diff --git a/.gitattributes b/.gitattributes
index 529f3325b58ea6d19943ce85daf51c4bac0c9a7f..2bd26e8c763eac5f7c38d958b5e292523caf0b75 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1261,6 +1261,21 @@ CMake/variants/GNUCXX98.cmake -text
 CMake/variants/variants.bob -text
 CMake/variants/variants.buildhostcentos7 -text
 CMake/variants/variants.buildhostcentos7test -text
+CMake/variants/variants.cbm200 -text
+CMake/variants/variants.cbm201 -text
+CMake/variants/variants.cbm202 -text
+CMake/variants/variants.cbm203 -text
+CMake/variants/variants.cbm204 -text
+CMake/variants/variants.cbm205 -text
+CMake/variants/variants.cbm206 -text
+CMake/variants/variants.cbm207 -text
+CMake/variants/variants.cbm208 -text
+CMake/variants/variants.cbm209 -text
+CMake/variants/variants.cbm210 -text
+CMake/variants/variants.cbm211 -text
+CMake/variants/variants.cbm212 -text
+CMake/variants/variants.cbm213 -text
+CMake/variants/variants.cbm299 -text
 CMake/variants/variants.cbt001 -text
 CMake/variants/variants.cbt002 -text
 CMake/variants/variants.cbt003 -text
@@ -3045,6 +3060,7 @@ MAC/Deployment/data/StaticMetaData/AntennaFields/RS511-AntennaField.conf -text
 MAC/Deployment/data/StaticMetaData/AntennaFields/SE607-AntennaField.conf -text
 MAC/Deployment/data/StaticMetaData/AntennaFields/UK608-AntennaField.conf -text
 MAC/Deployment/data/StaticMetaData/AntennaSets.conf -text
+MAC/Deployment/data/StaticMetaData/COBALT2_IP_MACs.txt -text
 MAC/Deployment/data/StaticMetaData/CableAttenuation.conf -text
 MAC/Deployment/data/StaticMetaData/CableDelays/CS001-CableDelays.conf -text
 MAC/Deployment/data/StaticMetaData/CableDelays/CS002-CableDelays.conf -text
@@ -3109,6 +3125,8 @@ MAC/Deployment/data/StaticMetaData/PVSSnumbers.dat -text
 MAC/Deployment/data/StaticMetaData/RSPBlet.dat -text
 MAC/Deployment/data/StaticMetaData/RSPConnections_CCU.dat -text
 MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt.dat -text
+MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt_commissioning.dat -text
+MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt_final.dat -text
 MAC/Deployment/data/StaticMetaData/RSPConnections_local.dat -text
 MAC/Deployment/data/StaticMetaData/RSPConnections_test.dat -text
 MAC/Deployment/data/StaticMetaData/RSPDriver.conf.test -text
@@ -4138,11 +4156,17 @@ RTCP/Cobalt/GPUProc/doc/scripts.txt -text
 RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/RSPConnections_Cobalt.dat -text
 RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/generateStationStreams.sh eol=lf
 RTCP/Cobalt/GPUProc/links_gcrypt.sh eol=lf
+RTCP/Cobalt/GPUProc/src/Kernels/FFT_Plan.h -text
 RTCP/Cobalt/GPUProc/src/Station/station_stream.log_prop -text
-RTCP/Cobalt/GPUProc/src/backward/CL/cl.hpp -text
+RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerCoherentStep.h -text
+RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerIncoherentStep.h -text
+RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.h -text
+RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.h -text
+RTCP/Cobalt/GPUProc/src/SubbandProcs/ProcessStep.h -text
+RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcInputData.h -text
+RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcOutputData.h -text
 RTCP/Cobalt/GPUProc/src/scripts/CobaltControl.sh eol=lf
 RTCP/Cobalt/GPUProc/src/scripts/CobaltVersions.sh eol=lf
-RTCP/Cobalt/GPUProc/src/scripts/Cobalt_build.sh eol=lf
 RTCP/Cobalt/GPUProc/src/scripts/Cobalt_install.sh eol=lf
 RTCP/Cobalt/GPUProc/src/scripts/bw_monitor.sh eol=lf
 RTCP/Cobalt/GPUProc/src/scripts/cobalt_functions.sh eol=lf
@@ -4198,15 +4222,8 @@ RTCP/Cobalt/GPUProc/test/cuda/tMultiDimArrayHostBuffer.sh eol=lf
 RTCP/Cobalt/GPUProc/test/cuda/tTranspose.sh eol=lf
 RTCP/Cobalt/GPUProc/test/cuda/tTranspose2.sh eol=lf
 RTCP/Cobalt/GPUProc/test/iperf-cbt-locus.sh eol=lf
-RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.77_Stations -text
-RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.AARTFAAC -text
-RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.small-test -text
-RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.run eol=lf
-RTCP/Cobalt/GPUProc/test/opencl/tContext.run eol=lf
-RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.run eol=lf
 RTCP/Cobalt/GPUProc/test/tMPIReceive.in_parset -text
 RTCP/Cobalt/GPUProc/test/tMPIReceive.sh eol=lf
-RTCP/Cobalt/GPUProc/test/t_cpu_utils.in_parset -text
 RTCP/Cobalt/GPUProc/test/t_generate_globalfs_locations.in_parset -text
 RTCP/Cobalt/GPUProc/test/t_generate_globalfs_locations.sh eol=lf
 RTCP/Cobalt/GPUProc/test/t_gpu_utils.sh eol=lf
@@ -4222,26 +4239,6 @@ RTCP/Cobalt/InputProc/test/tPacketReader.in_16bit -text
 RTCP/Cobalt/InputProc/test/tPacketReader.in_8bit -text
 RTCP/Cobalt/InputProc/test/tPacketReader.sh eol=lf
 RTCP/Cobalt/InputProc/test/t_generateRSP.sh eol=lf
-RTCP/Cobalt/OpenCL_FFT/doc/package.dox -text
-RTCP/Cobalt/OpenCL_FFT/src/AccelerateError.pdf -text
-RTCP/Cobalt/OpenCL_FFT/src/CMakeLists.txt -text
-RTCP/Cobalt/OpenCL_FFT/src/Error.pdf -text
-RTCP/Cobalt/OpenCL_FFT/src/Makefile -text
-RTCP/Cobalt/OpenCL_FFT/src/Makefile.not -text
-RTCP/Cobalt/OpenCL_FFT/src/OpenCLError.pdf -text svneol=unset#unset
-RTCP/Cobalt/OpenCL_FFT/src/OpenCL_FFT.xcodeproj/project.pbxproj -text
-RTCP/Cobalt/OpenCL_FFT/src/ReadMe.txt -text
-RTCP/Cobalt/OpenCL_FFT/src/clFFT.h -text
-RTCP/Cobalt/OpenCL_FFT/src/fft_base_kernels.h -text
-RTCP/Cobalt/OpenCL_FFT/src/fft_execute.cpp -text
-RTCP/Cobalt/OpenCL_FFT/src/fft_internal.h -text
-RTCP/Cobalt/OpenCL_FFT/src/fft_kernelstring.cpp -text
-RTCP/Cobalt/OpenCL_FFT/src/fft_kernelstring.cpp.orig -text
-RTCP/Cobalt/OpenCL_FFT/src/fft_setup.cpp -text
-RTCP/Cobalt/OpenCL_FFT/src/libOpenCL_FFT.a.not -text
-RTCP/Cobalt/OpenCL_FFT/src/main.cpp -text
-RTCP/Cobalt/OpenCL_FFT/src/param.txt -text
-RTCP/Cobalt/OpenCL_FFT/src/procs.h -text
 RTCP/Cobalt/OutputProc/doc/package.dox -text
 RTCP/Cobalt/OutputProc/etc/sudoers.d/setcap_cobalt -text
 RTCP/Cobalt/OutputProc/scripts/bf-output-loss.sh eol=lf
@@ -4259,32 +4256,6 @@ RTCP/Cobalt/OutputProc/test/tTBB_Writer-transient.in_1/tTBB_Writer-transient-ref
 RTCP/Cobalt/OutputProc/test/tTBB_Writer-transient.run eol=lf
 RTCP/Cobalt/OutputProc/test/tTBB_Writer-transient.sh eol=lf
 RTCP/Cobalt/Tools/plot_cobalt_flagging.py -text
-RTCP/Cobalt/clAmdFft/appmlEnv.sh -text
-RTCP/Cobalt/clAmdFft/bin32/clAmdFft.Client -text
-RTCP/Cobalt/clAmdFft/bin32/clAmdFft.Client-1.8.291 -text
-RTCP/Cobalt/clAmdFft/bin64/clAmdFft.Client -text
-RTCP/Cobalt/clAmdFft/bin64/clAmdFft.Client-1.8.291 -text
-RTCP/Cobalt/clAmdFft/clAmdFft-1.8.291-Linux.tar.gz -text
-RTCP/Cobalt/clAmdFft/clAmdFft-EULA.txt -text
-RTCP/Cobalt/clAmdFft/clAmdFft-README.txt -text
-RTCP/Cobalt/clAmdFft/clAmdFft1.8.291.tar.gz -text
-RTCP/Cobalt/clAmdFft/doc/clAmdFft.refman.pdf -text svneol=unset#unset
-RTCP/Cobalt/clAmdFft/include/clAmdFft.h -text
-RTCP/Cobalt/clAmdFft/include/clAmdFft.version.h -text
-RTCP/Cobalt/clAmdFft/install-clAmdFft-1.8.291.sh -text
-RTCP/Cobalt/clAmdFft/samples/CMakeLists.txt -text
-RTCP/Cobalt/clAmdFft/samples/amd-unicode.h -text
-RTCP/Cobalt/clAmdFft/samples/clAmdFft.client.cpp -text
-RTCP/Cobalt/clAmdFft/samples/clAmdFft.client.h -text
-RTCP/Cobalt/clAmdFft/samples/clAmdFft.h -text
-RTCP/Cobalt/clAmdFft/samples/clAmdFft.openCL.cpp -text
-RTCP/Cobalt/clAmdFft/samples/clAmdFft.openCL.h -text
-RTCP/Cobalt/clAmdFft/samples/clMemcpy.cpp -text
-RTCP/Cobalt/clAmdFft/samples/statisticalTimer.cpp -text
-RTCP/Cobalt/clAmdFft/samples/statisticalTimer.h -text
-RTCP/Cobalt/clAmdFft/samples/stdafx.cpp -text
-RTCP/Cobalt/clAmdFft/samples/stdafx.h -text
-RTCP/Cobalt/clAmdFft/samples/targetver.h -text
 RTCP/Cobalt/doc/package.dox -text
 RTCP/doc/package.dox -text
 SAS/DataManagement/CMakeLists.txt -text
@@ -4362,6 +4333,10 @@ SAS/MoM/MoMQueryService/MoMQueryServiceServer/test/t_momqueryservice.run -text
 SAS/MoM/MoMQueryService/MoMQueryServiceServer/test/t_momqueryservice.sh -text
 SAS/MoM/MoMQueryService/doc/MoM_query_service.md -text
 SAS/MoM/MoMQueryService/doc/package.dox -text
+SAS/MoM/MoMQueryService/test/CMakeLists.txt -text
+SAS/MoM/MoMQueryService/test/t_momqueryservice.py -text
+SAS/MoM/MoMQueryService/test/t_momqueryservice.run -text
+SAS/MoM/MoMQueryService/test/t_momqueryservice.sh -text
 SAS/OTB/OTB-distribution/assembly.xml -text
 SAS/OTB/OTB-distribution/pom.xml -text
 SAS/OTB/OTB/assembly.xml -text
@@ -4611,6 +4586,14 @@ SAS/OTDB_Services/treeService -text
 SAS/OTDB_Services/treeStatusEvents -text
 SAS/QPIDInfrastructure/CMakeLists.txt -text
 SAS/QPIDInfrastructure/amqp-infra-setup.sh -text
+SAS/QPIDInfrastructure/bin/CMakeLists.txt -text
+SAS/QPIDInfrastructure/bin/addtoQPIDDB.py -text
+SAS/QPIDInfrastructure/bin/compareQPIDwithDB.py -text
+SAS/QPIDInfrastructure/bin/configQPIDfromDB.py -text
+SAS/QPIDInfrastructure/bin/gatherfrombrokers.sh -text
+SAS/QPIDInfrastructure/bin/populateDB.sh -text
+SAS/QPIDInfrastructure/bin/qpidinfra_dump.sql -text
+SAS/QPIDInfrastructure/bin/route_to_struct.py -text
 SAS/ResourceAssignment/CMakeLists.txt -text
 SAS/ResourceAssignment/Common/CMakeLists.txt -text
 SAS/ResourceAssignment/Common/doc/package.dox -text
@@ -5448,11 +5431,13 @@ SubSystems/Online_Cobalt/test/tgenerateStationStreams.sh eol=lf
 SubSystems/Online_Cobalt/test/tstartBGL.in_parset -text
 SubSystems/Online_Cobalt/test/tstartBGL.run eol=lf
 SubSystems/Online_Cobalt/test/tstartBGL.sh eol=lf
+SubSystems/Online_Cobalt/validation/CMakeLists.txt -text
 SubSystems/Online_Cobalt/validation/cep4/docker/9311-cgroupdriver.test -text
 SubSystems/Online_Cobalt/validation/cep4/docker/datalocation.test -text
 SubSystems/Online_Cobalt/validation/cep4/lofarsys/docker.root.test -text
 SubSystems/Online_Cobalt/validation/cep4/lofarsys/ssh_localhost.root.test -text
 SubSystems/Online_Cobalt/validation/cep4/network/9228-ipoib.test -text
+SubSystems/Online_Cobalt/validation/cep4/network/resolvconf.test eol=lf
 SubSystems/Online_Cobalt/validation/cep4/os/9226-utc.test -text
 SubSystems/Online_Cobalt/validation/cep4/os/9376-hostname.test -text
 SubSystems/Online_Cobalt/validation/cep4/os/lustre-mounted.test -text
@@ -5463,29 +5448,35 @@ SubSystems/Online_Cobalt/validation/cep4/packages/jenkins-reqs.test -text
 SubSystems/Online_Cobalt/validation/cep4/qpid/9315-no_auth.test -text
 SubSystems/Online_Cobalt/validation/cep4/slurm/available.test -text
 SubSystems/Online_Cobalt/validation/cep4/slurm/nhc.test -text
-SubSystems/Online_Cobalt/validation/cluster/c3/cexec -text
-SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2cep.test eol=lf
-SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2cobalt.test eol=lf
-SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2locus.test eol=lf
-SubSystems/Online_Cobalt/validation/cluster/ethernet/iperf-cobalt2locus.bw-req -text
-SubSystems/Online_Cobalt/validation/cluster/ethernet/iperf-cobalt2locus.test -text
-SubSystems/Online_Cobalt/validation/cluster/funcs.sh eol=lf
-SubSystems/Online_Cobalt/validation/cluster/infiniband/build_osu.sh eol=lf
-SubSystems/Online_Cobalt/validation/cluster/infiniband/ibdiagnet.test eol=lf
-SubSystems/Online_Cobalt/validation/cluster/infiniband/osu-micro-benchmarks-4.3.tar.gz -text svneol=unset#application/x-gzip
-SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw.ref -text
-SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw.test eol=lf
-SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw_ref.sh eol=lf
 SubSystems/Online_Cobalt/validation/cobalt/casacore/meastable.test eol=lf
+SubSystems/Online_Cobalt/validation/cobalt/mpi/custom-openmpi-config.test -text
+SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-hello-world-between-nodes.test eol=lf
+SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-hello-world.c -text
+SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-infiniband-between-nodes.test -text
+SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-to-all-nodes.test -text
+SubSystems/Online_Cobalt/validation/cobalt/network/ib_mode.test -text
+SubSystems/Online_Cobalt/validation/cobalt/network/interface_arp_ignore_setting.test -text
+SubSystems/Online_Cobalt/validation/cobalt/network/interface_links.test -text
+SubSystems/Online_Cobalt/validation/cobalt/network/interface_mtu_settings.test -text
+SubSystems/Online_Cobalt/validation/cobalt/network/resolvconf.test eol=lf
+SubSystems/Online_Cobalt/validation/cobalt/system/tuned.test -text
+SubSystems/Online_Cobalt/validation/intercluster/connectivity/cobalt2cep.test eol=lf
+SubSystems/Online_Cobalt/validation/intercluster/connectivity/cobalt2cobalt.test eol=lf
+SubSystems/Online_Cobalt/validation/intercluster/ethernet/iperf-cobalt2locus.bw-req -text
+SubSystems/Online_Cobalt/validation/intercluster/ethernet/iperf-cobalt2locus.test -text
+SubSystems/Online_Cobalt/validation/intercluster/funcs.sh eol=lf
+SubSystems/Online_Cobalt/validation/intercluster/infiniband/cobalt2-to-cep4.test -text
 SubSystems/Online_Cobalt/validation/system/gpu/basic-gpu.test eol=lf
 SubSystems/Online_Cobalt/validation/system/gpu/persistence-mode.test eol=lf
 SubSystems/Online_Cobalt/validation/system/hardware/sata-ahci.test eol=lf
-SubSystems/Online_Cobalt/validation/system/mpi/basic-mpi.test eol=lf
+SubSystems/Online_Cobalt/validation/system/infiniband/ibdiagnet.test eol=lf
 SubSystems/Online_Cobalt/validation/system/mpi/custom-openmpi-config.test eol=lf
+SubSystems/Online_Cobalt/validation/system/mpi/local-hello-world.test eol=lf
+SubSystems/Online_Cobalt/validation/system/mpi/mpi-selector.test -text
 SubSystems/Online_Cobalt/validation/system/network/10gb-ifaces.test -text
+SubSystems/Online_Cobalt/validation/system/network/hostname.test -text
 SubSystems/Online_Cobalt/validation/system/network/hosts.test eol=lf
 SubSystems/Online_Cobalt/validation/system/network/ipoib.test -text
-SubSystems/Online_Cobalt/validation/system/network/resolvconf.test eol=lf
 SubSystems/Online_Cobalt/validation/system/network/routes.cbt001 -text
 SubSystems/Online_Cobalt/validation/system/network/routes.cbt002 -text
 SubSystems/Online_Cobalt/validation/system/network/routes.cbt003 -text
@@ -5505,16 +5496,17 @@ SubSystems/Online_Cobalt/validation/system/os/netif.test -text
 SubSystems/Online_Cobalt/validation/system/os/smp_affinity.root.test eol=lf
 SubSystems/Online_Cobalt/validation/system/packages/atop.test eol=lf
 SubSystems/Online_Cobalt/validation/system/packages/autogen.test eol=lf
-SubSystems/Online_Cobalt/validation/system/packages/ipmitool.test eol=lf
-SubSystems/Online_Cobalt/validation/system/packages/linux-tools.test eol=lf
 SubSystems/Online_Cobalt/validation/system/users/dotssh.root.test eol=lf
 SubSystems/Online_Cobalt/validation/system/users/homedirs.test -text
 SubSystems/Online_Cobalt/validation/system/users/localhome.test eol=lf
 SubSystems/Online_Cobalt/validation/system/users/login-shell.test -text
+SubSystems/Online_Cobalt/validation/system/users/rtuser.test -text
 SubSystems/Online_Cobalt/validation/system/users/sudo.test eol=lf
 SubSystems/Online_Cobalt/validation/validate eol=lf
+SubSystems/Online_Cobalt/validation/validation_utils.sh -text
 SubSystems/Online_OutputProc/doc/package.dox -text
 SubSystems/RAServices/CMakeLists.txt -text
+SubSystems/RAServices/Jenkinsfile -text
 SubSystems/RAServices/RAServices.ini -text
 SubSystems/RAServices/doc/package.dox -text
 SubSystems/SAS_OTDB/doc/package.dox -text
diff --git a/CMake/FindQPID.cmake b/CMake/FindQPID.cmake
index 75343f7a49d055cc3b6cd043e8873ae307532a98..0e134a612b1fc57f417f3b27f8384c776b7668ea 100644
--- a/CMake/FindQPID.cmake
+++ b/CMake/FindQPID.cmake
@@ -59,5 +59,6 @@ if(NOT QPID_FOUND)
 
   set(QPID_INCLUDE_DIRS ${QPID_INCLUDE_DIR})
   set(QPID_LIBRARIES ${QPID_LIBRARY})
+  set(HAVE_QPID TRUE CACHE "We have qpid" BOOL FORCE)
 
 endif(NOT QPID_FOUND)
diff --git a/CMake/LofarPackageList.cmake b/CMake/LofarPackageList.cmake
index 02c7c418ece9176454eca584688a93655d213af2..0fbe04785b24d5b5f8b45dd90f66f8e33be85a9c 100644
--- a/CMake/LofarPackageList.cmake
+++ b/CMake/LofarPackageList.cmake
@@ -152,7 +152,6 @@ if(NOT DEFINED LOFAR_PACKAGE_LIST_INCLUDED)
   set(InputProc_SOURCE_DIR ${CMAKE_SOURCE_DIR}/RTCP/Cobalt/InputProc)
   set(OutputProc_SOURCE_DIR ${CMAKE_SOURCE_DIR}/RTCP/Cobalt/OutputProc)
   set(GPUProc_SOURCE_DIR ${CMAKE_SOURCE_DIR}/RTCP/Cobalt/GPUProc)
-  set(OpenCL_FFT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/RTCP/Cobalt/OpenCL_FFT)
   set(CoInterface_SOURCE_DIR ${CMAKE_SOURCE_DIR}/RTCP/Cobalt/CoInterface)
   set(CobaltTest_SOURCE_DIR ${CMAKE_SOURCE_DIR}/RTCP/Cobalt/CobaltTest)
   set(BrokenAntennaInfo_SOURCE_DIR ${CMAKE_SOURCE_DIR}/RTCP/Cobalt/BrokenAntennaInfo)
@@ -210,5 +209,6 @@ if(NOT DEFINED LOFAR_PACKAGE_LIST_INCLUDED)
   set(DataManagement_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/DataManagement)
   set(Dragnet_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/Dragnet)
   set(LTAIngest_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/LTAIngest)
+  set(Cobalt_validation_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/Online_Cobalt/validation)
   set(LTAIngestTransfer_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/LTAIngestTransfer)
 endif(NOT DEFINED LOFAR_PACKAGE_LIST_INCLUDED)
diff --git a/CMake/variants/variants.cbm200 b/CMake/variants/variants.cbm200
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm200
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm201 b/CMake/variants/variants.cbm201
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm201
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm202 b/CMake/variants/variants.cbm202
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm202
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm203 b/CMake/variants/variants.cbm203
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm203
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm204 b/CMake/variants/variants.cbm204
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm204
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm205 b/CMake/variants/variants.cbm205
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm205
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm206 b/CMake/variants/variants.cbm206
new file mode 100644
index 0000000000000000000000000000000000000000..75b51fb5fec037c6b10f57bd67b226075ea31122
--- /dev/null
+++ b/CMake/variants/variants.cbm206
@@ -0,0 +1,19 @@
+## -*- CMake -*-
+##
+## Host specific variants file. 
+## Settings in this file extend or override those in the global variants file.
+##
+
+## Specific settings for the cobalt2 build host cbm206
+## We also have cbm201...cbm213 symlinks to this file for convenience.
+
+option(USE_LOG4CPLUS "Use Log4Cplus" ON)
+option(USE_MPI       "Use MPI"       ON)
+
+set(CASACORE_ROOT_DIR /opt/casacore/3.0.0)
+set(DAL_ROOT_DIR      /opt/DAL/3.3.1)
+set(BLITZ_ROOT_DIR    /opt/blitz/1.0.1)
+
+# MPI_ROOT_DIR does not need to be specified, because it can just be found thanks to the usage of mpi-selector
+
+
diff --git a/CMake/variants/variants.cbm207 b/CMake/variants/variants.cbm207
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm207
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm208 b/CMake/variants/variants.cbm208
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm208
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm209 b/CMake/variants/variants.cbm209
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm209
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm210 b/CMake/variants/variants.cbm210
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm210
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm211 b/CMake/variants/variants.cbm211
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm211
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm212 b/CMake/variants/variants.cbm212
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm212
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm213 b/CMake/variants/variants.cbm213
new file mode 120000
index 0000000000000000000000000000000000000000..15b156b21f2880cbbb97ed697f77c30c5990d842
--- /dev/null
+++ b/CMake/variants/variants.cbm213
@@ -0,0 +1 @@
+variants.cbm206
\ No newline at end of file
diff --git a/CMake/variants/variants.cbm299 b/CMake/variants/variants.cbm299
new file mode 100644
index 0000000000000000000000000000000000000000..6229b93dd8adfaf785177575861c4d642607744d
--- /dev/null
+++ b/CMake/variants/variants.cbm299
@@ -0,0 +1,7 @@
+## -*- CMake -*-
+##
+## Host specific variants file. 
+## Settings in this file extend or override those in the global variants file.
+##
+
+MESSAGE(FATAL_ERROR "Cannot build cobalt software on cbm299/cbm2head.\nPlease use the cobalt2 build host cbm206.")
diff --git a/CMake/variants/variants.cbt001 b/CMake/variants/variants.cbt001
index 7104bf68462be39d253ca3c4e91dea07192a79b2..5f1cbe8df0edeae8cb4406f35347a0bcd0a7914a 100644
--- a/CMake/variants/variants.cbt001
+++ b/CMake/variants/variants.cbt001
@@ -7,7 +7,6 @@
 
 option(USE_LOG4CPLUS "Use Log4Cplus" ON)
 option(USE_MPI       "Use MPI"       ON)
-option(USE_CUDA      "Use CUDA"      ON)
 
 #set(CASACORE_ROOT_DIR /opt/casacore)
 set(CASACORE_ROOT_DIR /localhome/lofar/casacore-1.7.0)
diff --git a/CMake/variants/variants.dop256 b/CMake/variants/variants.dop256
index 116d2f2ba8c64ef8c0c76d86f8954ad47104b28e..844a399a77381a04c6dbcd490ec325c59f736e35 100644
--- a/CMake/variants/variants.dop256
+++ b/CMake/variants/variants.dop256
@@ -3,8 +3,6 @@
 # $Id$
 
 option(USE_MPI       "Use MPI"       ON)
-option(USE_CUDA      "Use CUDA"      ON)
-#option(USE_OPENCL    "Use OpenCL"    OFF)
 #set(GNU_COMPILE_DEFINITIONS   -DCL_USE_DEPRECATED_OPENCL_1_1_APIS)
 #set(CLANG_COMPILE_DEFINITIONS -DCL_USE_DEPRECATED_OPENCL_1_1_APIS)
 
diff --git a/CMake/variants/variants.dragnet b/CMake/variants/variants.dragnet
index 982b7236fd96bb26199773f55d2a94477bed4bd6..00e49bd874e67df9c29a696b94504f778264b167 100644
--- a/CMake/variants/variants.dragnet
+++ b/CMake/variants/variants.dragnet
@@ -3,7 +3,6 @@
 # $Id$
 
 option(USE_MPI       "Use MPI"       ON)
-option(USE_CUDA      "Use CUDA"      ON)
 
 # Default search path for LOFAR deps (see CMake/variants/variants): /opt/lofar/external:/usr/local
 # The dirs thereunder must be lower case, e.g. unittest++/ or dal/
diff --git a/CMake/variants/variants.head01 b/CMake/variants/variants.head01
index 7fbd710168e4c0ec1dc57758891257afb34cd612..891fc9269fc6156b6b67d2063c5e66d7ecd0e23f 100644
--- a/CMake/variants/variants.head01
+++ b/CMake/variants/variants.head01
@@ -1,3 +1,2 @@
-set(CASACORE_ROOT_DIR /opt/casacore-latest)
-set(DAL_ROOT_DIR      /opt/DAL-c60bd6f01fa9f296dcc3e6db835363222038165b)
-
+set(CASACORE_ROOT_DIR /opt/casacore-v3.0.0)
+set(DAL_ROOT_DIR      /opt/DAL-v3.3.1)
diff --git a/CMake/variants/variants.lofar-documentation b/CMake/variants/variants.lofar-documentation
index b8bd7aca1f49d532f6e85cfcd13710314abe41a0..1fc21d13704fe712994c34b092536c944cb7536f 100644
--- a/CMake/variants/variants.lofar-documentation
+++ b/CMake/variants/variants.lofar-documentation
@@ -1,7 +1,5 @@
-option(USE_CUDA "Use CUDA" ON)
 option(USE_MPI "Use MPI" ON)
 option(USE_OPENMP "Use OPENMP" ON)
-option(USE_OPENCL "Don't use OPENCL" OFF)
 
 
 set(WINCC_ROOT_DIR /opt/WinCC_OA/3.14)
diff --git a/Docker/docker-template b/Docker/docker-template
index 53be24bc26b2e7d7cd7bd500e20a49c978a19df8..05ee6179c4a3e132c75a3259e2d775a0392b7784 100755
--- a/Docker/docker-template
+++ b/Docker/docker-template
@@ -26,8 +26,8 @@ function usage() {
   exit 1
 }
 
-# Defaults
-VERSION_DOCKER="versiondocker"
+# Defaults (use "versioncommon" which has fewest dependencies, and works even when cross compiling)
+VERSION_DOCKER="versioncommon"
 
 # Parse options
 while getopts "hv:" opt; do
diff --git a/Docker/lofar-outputproc/Dockerfile.tmpl b/Docker/lofar-outputproc/Dockerfile.tmpl
index 9b23d99fb7dd9ab89e9ad5f1e03de33485762e7f..ee7b9dc1c4a06d4a157b5e920d4c03d7a6653407 100644
--- a/Docker/lofar-outputproc/Dockerfile.tmpl
+++ b/Docker/lofar-outputproc/Dockerfile.tmpl
@@ -3,6 +3,46 @@
 #
 FROM lofar-base:${LOFAR_TAG}
 
+#
+# *******************
+#   Blitz
+# *******************
+#
+
+#RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1
+
+RUN apt-get update && apt-get install -y git python && \
+    mkdir /src && cd /src && git clone --branch=1.0.1 https://github.com/blitzpp/blitz.git && \
+    cd /src/blitz && ./configure && make install && \
+    rm -rf /src/blitz && \
+    apt-get purge git python
+
+#
+# *******************
+#   DAL
+# *******************
+#
+
+ENV DAL_VERSION=v3.3.1
+
+# Run-time dependencies
+RUN aptitude install -y libhdf5-${LIBHDF5_VERSION} python3 && \
+    aptitude clean && \
+    aptitude autoclean
+
+RUN export BUILD_PACKAGES="git cmake g++ swig3.0 python3-setuptools python3-dev libhdf5-dev" && \
+    aptitude install -y ${BUILD_PACKAGES} && \
+    mkdir -p ${INSTALLDIR}/DAL/build && \
+    git clone --branch ${DAL_VERSION//latest/master} https://github.com/nextgen-astrodata/DAL.git ${INSTALLDIR}/DAL/DAL.src && \
+    cd ${INSTALLDIR}/DAL/build && \
+    cmake -DPYTHON_INCLUDE_DIR=/usr/include/python${PYTHON_VERSION} -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython${PYTHON_VERSION}m.so -DBUILD_TESTING=OFF -DCMAKE_CXX_FLAGS="${CXX_FLAGS} -fpermissive" -DCMAKE_INSTALL_PREFIX=${INSTALLDIR}/DAL ${INSTALLDIR}/DAL/DAL.src && \
+    make -j ${J} && \
+    make install && \
+    bash -c "rm -rf ${INSTALLDIR}/DAL/{DAL.src,build}" && \
+    aptitude purge -y ${BUILD_PACKAGES} && \
+    aptitude clean && \
+    aptitude autoclean
+
 #
 # *******************
 #   LOFAR
@@ -10,15 +50,15 @@ FROM lofar-base:${LOFAR_TAG}
 #
 
 # Run-time dependencies
-RUN apt-get update && apt-get install -y binutils liblog4cplus-1.1-9 libxml2 libboost-thread${BOOST_VERSION}.0 libboost-filesystem${BOOST_VERSION}.0 libboost-date-time${BOOST_VERSION}.0 libpng12-0 libsigc++-2.0-dev libxml++2.6-2v5 libboost-regex${BOOST_VERSION}.0
+RUN apt-get update && apt-get install -y binutils liblog4cplus-1.1-9 libxml2 libboost-thread${BOOST_VERSION}.1 libboost-filesystem${BOOST_VERSION}.1 libboost-date-time${BOOST_VERSION}.1 libpng16-16 libsigc++-2.0-dev libxml++2.6-2v5 libboost-regex${BOOST_VERSION}.1
 
 # Tell image build information
 ENV LOFAR_BRANCH=${LOFAR_BRANCH} \
     LOFAR_REVISION=${LOFAR_REVISION} \
-    LOFAR_BUILDVARIANT=gnucxx11_optarch
+    LOFAR_BUILDVARIANT=gnucxx11_2018_optarch
 
 # Install
-RUN apt-get update && apt-get install -y subversion cmake g++ gfortran bison flex autogen liblog4cplus-dev libhdf5-dev libblitz0-dev libboost-dev libboost-python${BOOST_VERSION}-dev libxml2-dev pkg-config libpng12-dev libfftw3-dev libunittest++-dev libxml++2.6-dev libboost-filesystem${BOOST_VERSION}-dev libboost-date-time${BOOST_VERSION}-dev libboost-thread${BOOST_VERSION}-dev libboost-regex${BOOST_VERSION} binutils-dev libopenblas-dev libcfitsio3-dev wcslib-dev && \
+RUN apt-get update && apt-get install -y subversion cmake g++ gfortran bison flex autogen liblog4cplus-dev libhdf5-dev libboost-dev boost-python${BOOST_VERSION}-dev libxml2-dev pkg-config libpng-dev libfftw3-dev libunittest++-dev libxml++2.6-dev libboost-filesystem${BOOST_VERSION}-dev libboost-date-time${BOOST_VERSION}-dev libboost-thread${BOOST_VERSION}-dev libboost-regex${BOOST_VERSION}-dev binutils-dev libopenblas-dev libcfitsio-dev wcslib-dev && \
     mkdir -p ${INSTALLDIR}/lofar/build/${LOFAR_BUILDVARIANT} && \
     cd ${INSTALLDIR}/lofar && \
     svn --non-interactive -q co -r ${LOFAR_REVISION} -N ${LOFAR_BRANCH_URL} src; \
@@ -33,6 +73,6 @@ RUN apt-get update && apt-get install -y subversion cmake g++ gfortran bison fle
     bash -c "rm -rf ${INSTALLDIR}/lofar/{build,src}" && \
     setcap cap_sys_nice,cap_sys_admin=ep ${INSTALLDIR}/lofar/bin/outputProc && \
     setcap cap_sys_nice,cap_sys_admin=ep ${INSTALLDIR}/lofar/bin/TBB_Writer && \
-    apt-get purge -y subversion cmake g++ gfortran bison flex autogen liblog4cplus-dev libhdf5-dev libblitz0-dev libboost-dev libboost-python${BOOST_VERSION}-dev libxml2-dev pkg-config libpng12-dev libfftw3-dev libunittest++-dev libxml++2.6-dev libboost-filesystem${BOOST_VERSION}-dev libboost-date-time${BOOST_VERSION}-dev libboost-thread${BOOST_VERSION}-dev binutils-dev libcfitsio3-dev wcslib-dev libopenblas-dev && \
+    apt-get purge -y subversion cmake g++ gfortran bison flex autogen liblog4cplus-dev libhdf5-dev libboost-dev libboost-python${BOOST_VERSION}-dev libxml2-dev pkg-config libpng12-dev libfftw3-dev libunittest++-dev libxml++2.6-dev libboost-filesystem${BOOST_VERSION}-dev libboost-date-time${BOOST_VERSION}-dev libboost-thread${BOOST_VERSION}-dev binutils-dev libcfitsio3-dev wcslib-dev libopenblas-dev && \
     apt-get autoremove -y --purge
 
diff --git a/LCS/Common/include/Common/LofarBitModeInfo.h b/LCS/Common/include/Common/LofarBitModeInfo.h
index 0a532b7077dbc1aacf80a8f4d12cc83af42f1ff7..8b912111eaa590fb185ca95a20e25aea5ce211d8 100644
--- a/LCS/Common/include/Common/LofarBitModeInfo.h
+++ b/LCS/Common/include/Common/LofarBitModeInfo.h
@@ -32,6 +32,7 @@ namespace LOFAR {
     
     inline static int maxDataslotsPerRSP(int bitsPerSample) {
 		assert(bitsPerSample >= MIN_BITS_PER_SAMPLE && bitsPerSample <= MAX_BITS_PER_SAMPLE && bitsPerSample%2==0);
+    (void)bitsPerSample; //prevent unused var warning in release mode
 		return(61);
 	}
 
diff --git a/LCS/Common/include/Common/LofarLog4Cplus.h b/LCS/Common/include/Common/LofarLog4Cplus.h
index 48ed57b8c47dde02ada7ed0b181532ea5920c20a..649b19230ec04cc6c7eddb90e2e66ac3e8db05b3 100644
--- a/LCS/Common/include/Common/LofarLog4Cplus.h
+++ b/LCS/Common/include/Common/LofarLog4Cplus.h
@@ -174,8 +174,8 @@ namespace LOFAR {
 // @{
 
 #ifdef DISABLE_DEBUG_OUTPUT
-#define LOG_DEBUG(message)
-#define LOG_DEBUG_STR(stream)
+#define LOG_DEBUG(message) { }
+#define LOG_DEBUG_STR(stream) { }
 #else
 
 // Use this macro for plain and 'printf' like messages.
diff --git a/LCS/Common/include/Common/LofarLog4Cxx.h b/LCS/Common/include/Common/LofarLog4Cxx.h
index 79dee4aa12eac25ecaa69c0bc8009a7b82b19ffb..0b89b4931ef763a1cda36bd47e902a3272eb718c 100644
--- a/LCS/Common/include/Common/LofarLog4Cxx.h
+++ b/LCS/Common/include/Common/LofarLog4Cxx.h
@@ -166,8 +166,8 @@ namespace LOFAR {
   // @{
 
 #ifdef DISABLE_DEBUG_OUTPUT
-#define LOG_DEBUG(message)
-#define LOG_DEBUG_STR(stream)
+#define LOG_DEBUG(message) {}
+#define LOG_DEBUG_STR(stream) {}
 #else
 
 #define LOG_DEBUG(message)     LofarLog(DEBUG,message)
diff --git a/LCS/Common/include/Common/LofarLogCout.h b/LCS/Common/include/Common/LofarLogCout.h
index 9ee7c1585423deb5f882990d178208a5f1aec77b..c7633313fd8078f74325f0d1b887548c40af22a7 100644
--- a/LCS/Common/include/Common/LofarLogCout.h
+++ b/LCS/Common/include/Common/LofarLogCout.h
@@ -105,8 +105,8 @@
 //# LOG_DEBUG_(STR) (message|stream)
 //#
 #ifdef DISABLE_DEBUG_OUTPUT
-#define LOG_DEBUG(message)
-#define LOG_DEBUG_STR(stream)
+#define LOG_DEBUG(message) {}
+#define LOG_DEBUG_STR(stream) {}
 #else
 #define LOG_DEBUG(message) 			cDebug(5, "DEBUG ", message)
 #define LOG_DEBUG_STR(stream) 		cDebugstr(5, "DEBUG ", stream)
diff --git a/LCS/Common/include/Common/Thread/Thread.h b/LCS/Common/include/Common/Thread/Thread.h
index 99f93ed8857977436fbd3c51accd23f7ad05bc58..a4ace9c57ea299251d996dff05ef8f9074a21a3b 100644
--- a/LCS/Common/include/Common/Thread/Thread.h
+++ b/LCS/Common/include/Common/Thread/Thread.h
@@ -80,6 +80,12 @@ class Thread
     // to finish.
     bool      caughtException();
 
+    // Return the name of the given thread as registered at the OS
+    static std::string getName(const pthread_t &thread = pthread_self());
+
+    // Register this thread at the OS (NOTE: only first 15 characters of "name" are used)
+    static void setMyName(const std::string &name);
+
     class ScopedPriority
     {
     public:
@@ -204,7 +210,7 @@ private:
 
 template <typename T> inline Thread::Thread(T *object, void (T::*method)(), const std::string &name, const std::string &logPrefix, size_t stackSize)
 :
-  logPrefix(logPrefix),
+  logPrefix(logPrefix + "[Thread " + name + "] "),
   name(name),
   caught_exception(false)
 {
@@ -241,7 +247,7 @@ inline Thread::~Thread()
     try {
       throw SystemCallException("pthread_join", retval, THROW_ARGS);
     } catch (Exception &ex) {
-      LOG_ERROR_STR("Exception in destructor: " << ex);
+      LOG_ERROR_STR(logPrefix << "Exception in destructor: " << ex);
     }
 }
 
@@ -302,6 +308,45 @@ inline bool Thread::caughtException()
   return caught_exception;
 }
 
+inline void Thread::setMyName(const std::string &name)
+{
+  // Inform the kernel of the thread name (only first 16 characters are used!)
+
+#if defined(_LIBCPP_VERSION)
+  int retval;
+
+  // Set name WITHIN the thread, to avoid race conditions
+  if ((retval = pthread_setname_np(name.substr(0,15).c_str())) != 0)
+    throw SystemCallException("pthread_setname_np", retval, THROW_ARGS);
+#else
+# if defined(_GNU_SOURCE) && __GLIBC_PREREQ(2, 12)
+  int retval;
+
+  // Set name WITHIN the thread, to avoid race conditions
+  if ((retval = pthread_setname_np(pthread_self(), name.substr(0,15).c_str())) != 0)
+    throw SystemCallException("pthread_setname_np", retval, THROW_ARGS);
+# else
+  (void)name;
+# endif
+#endif
+}
+
+inline std::string Thread::getName(const pthread_t &thread)
+{
+#if defined(_GNU_SOURCE) && __GLIBC_PREREQ(2, 12)
+  char cname[1024];
+
+  int retval;
+
+  if ((retval = pthread_getname_np(thread, &cname[0], sizeof cname)) != 0)
+    throw SystemCallException("pthread_getname_np", retval, THROW_ARGS);
+
+  return std::string(cname);
+#else
+  (void)thread;
+  return "<unknown>";
+#endif
+}
 
 template <typename T> inline void Thread::stub(Args<T> *args)
 {
@@ -311,26 +356,13 @@ template <typename T> inline void Thread::stub(Args<T> *args)
 
   ThreadLogger threadLogger;
 
-  LOG_DEBUG_STR(logPrefix << "Thread started");
+  LOG_DEBUG_STR(logPrefix << "Started");
 
   ThreadMap::ScopedRegistration sr(ThreadMap::instance(), args->name);
 
   try {
-#if defined(_LIBCPP_VERSION)
-    int retval;
-
     // Set name WITHIN the thread, to avoid race conditions
-    if ((retval = pthread_setname_np(args->name.substr(0,15).c_str())) != 0)
-      throw SystemCallException("pthread_setname_np", retval, THROW_ARGS);
-#else
-# if defined(_GNU_SOURCE) && __GLIBC_PREREQ(2, 12)
-    int retval;
-
-    // Set name WITHIN the thread, to avoid race conditions
-    if ((retval = pthread_setname_np(pthread_self(), args->name.substr(0,15).c_str())) != 0)
-      throw SystemCallException("pthread_setname_np", retval, THROW_ARGS);
-# endif
-#endif
+    setMyName(args->name);
 
     // allow cancellation from here, to guarantee finished.up()
     started.up();
@@ -355,16 +387,17 @@ template <typename T> inline void Thread::stub(Args<T> *args)
 
     caught_exception = true;
   } catch (...) {
-    LOG_DEBUG_STR(logPrefix << "Thread cancelled");
+    LOG_DEBUG_STR(logPrefix << "Cancelled");
 
     finished.up();
 
+    // MUST rethrow exception caused by thread cancellation, or terminate() will be called
     throw;
   }
 
   finished.up();
 
-  LOG_DEBUG_STR(logPrefix << "Thread stopped");
+  LOG_DEBUG_STR(logPrefix << "Finished");
 }
 
 template <typename T> inline void *Thread::stub(void *arg)
diff --git a/LCS/Common/src/Net/Socket.cc b/LCS/Common/src/Net/Socket.cc
index cc62629e632fb752e0ac46f1e1e69412da220c3c..4bdc0914ea5941a340214ccad9016369a0cb33e4 100644
--- a/LCS/Common/src/Net/Socket.cc
+++ b/LCS/Common/src/Net/Socket.cc
@@ -319,7 +319,7 @@ int32 Socket::initUnixSocket(bool		asServer)
 	LOG_TRACE_CALC(formatString("Socket::initUnixSocket(%s,%d)",
 		itsSocketname.c_str(), asServer));
 
-        (void)asServer;        
+  (void)asServer; //prevent unused var warning in release mode
 
 	// setup socket address
 	string path = itsPort;
@@ -475,6 +475,8 @@ int32 Socket::openTCPSocket (bool asServer)
 		return (setErrno(SOCKET));
 	}
 
+  (void)asServer; //prevent unused var warning in release mode
+
 	LOG_DEBUG(formatString("Socket(%d):Created %s socket, host %s, port %d, protocol %d",
 			       itsSocketID, asServer ? "server" : "client",
 				   inet_ntoa(itsTCPAddr.sin_addr),
diff --git a/LCS/Common/test/tNumeric.cc b/LCS/Common/test/tNumeric.cc
index 07848b86db06466f372e215278de0348797f9049..c004813a7772a34528a8b39b15066679885d7448 100644
--- a/LCS/Common/test/tNumeric.cc
+++ b/LCS/Common/test/tNumeric.cc
@@ -81,7 +81,7 @@ using namespace std;
 #define printNumber(x)                                               \
 { int p(2*sizeof(x)+1);                                              \
   union_t u = { x };                                                 \
-  LOG_DEBUG_STR(setprecision(p) << left << setw(17) << #x << " = "   \
+  LOG_INFO_STR(setprecision(p) << left << setw(17) << #x << " = "    \
                 << setw(p+6) << x << " (" << hex << showbase         \
                 << setw(p+1) << u.mask << dec << ")");               \
 }
diff --git a/LCS/LofarStMan/include/LofarStMan/LofarColumn.h b/LCS/LofarStMan/include/LofarStMan/LofarColumn.h
index 763e538f32e218d68427e7d3f3b8e3f35c211c1e..9ea782857c693686604913d9b306a9576b1b546d 100644
--- a/LCS/LofarStMan/include/LofarStMan/LofarColumn.h
+++ b/LCS/LofarStMan/include/LofarStMan/LofarColumn.h
@@ -26,11 +26,7 @@
 //# Includes
 #include <LofarStMan/LofarStMan.h>
 #include <Common/lofar_vector.h>
-#if defined(HAVE_CASACORE)
 #include <casacore/tables/DataMan/StManColumn.h>
-#else
-#include <casacore/tables/DataMan/StManColumn.h>
-#endif
 #include <casacore/measures/Measures/MeasFrame.h>
 #include <casacore/measures/Measures/MDirection.h>
 #include <casacore/measures/Measures/MBaseline.h>
diff --git a/LCS/MessageBus/CMakeLists.txt b/LCS/MessageBus/CMakeLists.txt
index 41113fb9e24557eb4f044f12f7be3e99f53068a2..ab4763a103c483e07ea9ac494962501061ae1874 100644
--- a/LCS/MessageBus/CMakeLists.txt
+++ b/LCS/MessageBus/CMakeLists.txt
@@ -1,6 +1,11 @@
 # $Id$
 
-lofar_package(MessageBus 1.0 DEPENDS Common pyparameterset)
+# Python can be explicitly disabled, if only the C++ libraries are needed
+if(USE_PYTHON)
+  lofar_package(MessageBus 1.0 DEPENDS Common pyparameterset)
+else(USE_PYTHON)
+  lofar_package(MessageBus 1.0 DEPENDS Common)
+endif(USE_PYTHON)
 
 include(LofarFindPackage)
 lofar_find_package(QPID)
diff --git a/LCS/MessageBus/include/MessageBus/CMakeLists.txt b/LCS/MessageBus/include/MessageBus/CMakeLists.txt
index 4d5c85e09a296312fa0da2f8eb53510c67ef6ab9..48ed3c2256a5ffaaf471c0c9a9e754a3a219bdf4 100644
--- a/LCS/MessageBus/include/MessageBus/CMakeLists.txt
+++ b/LCS/MessageBus/include/MessageBus/CMakeLists.txt
@@ -13,6 +13,7 @@ install(FILES
   MessageBus.h
   NoQpidFallback.h
   ToBus.h
+  Util.h
   XMLDoc.h
   DESTINATION include/${PACKAGE_NAME})
 
diff --git a/LCS/MessageBus/include/MessageBus/FromBus.h b/LCS/MessageBus/include/MessageBus/FromBus.h
index 70d69d13183e3709ace82d44050459917ed7323d..7c43f92b9f703d20c547e7f52c79f696dff55213 100644
--- a/LCS/MessageBus/include/MessageBus/FromBus.h
+++ b/LCS/MessageBus/include/MessageBus/FromBus.h
@@ -45,7 +45,7 @@ namespace LOFAR {
 class FromBus
 {
 public:
-  FromBus(const std::string &address, const std::string &options="; {create: never}", const std::string &broker = "amqp:tcp:127.0.0.1:5672") ;
+  FromBus(const std::string &address, const std::string &broker = "amqp:tcp:127.0.0.1:5672", const std::string &options="; {create: never}");
   ~FromBus(void);
   bool addQueue(const std::string &address, const std::string &options="; {create: never}");
 
diff --git a/LCS/MessageBus/include/MessageBus/ToBus.h b/LCS/MessageBus/include/MessageBus/ToBus.h
index f06f0fd4665052058c83985fffdecc19586a84b5..075d01370d1c1902b9796a27b1d9f35123c2adfa 100644
--- a/LCS/MessageBus/include/MessageBus/ToBus.h
+++ b/LCS/MessageBus/include/MessageBus/ToBus.h
@@ -43,7 +43,7 @@ namespace LOFAR {
 class ToBus
 {
 public:
-  ToBus(const std::string &address, const std::string &options="; {create: never}", const std::string &broker = "amqp:tcp:127.0.0.1:5672") ;
+  ToBus(const std::string &address,  const std::string &broker = "amqp:tcp:127.0.0.1:5672", const std::string &options="; {create: never}");
   ~ToBus(void);
 
   void send(LOFAR::Message &msg);
diff --git a/LCS/MessageBus/src/Util.h b/LCS/MessageBus/include/MessageBus/Util.h
similarity index 89%
rename from LCS/MessageBus/src/Util.h
rename to LCS/MessageBus/include/MessageBus/Util.h
index 358386105751bd9530ebe03e65e53128f927fe60..7a43e7b4c1e9dc1290543803261fd7e8b211df14 100644
--- a/LCS/MessageBus/src/Util.h
+++ b/LCS/MessageBus/include/MessageBus/Util.h
@@ -39,6 +39,12 @@ namespace LOFAR {
   // Return the prefix that has to be prepended to all queue names
   std::string queue_prefix();
 
+  // Return the broker that should receive feedback
+  std::string broker_feedback();
+
+  // Return the broker that should receive state
+  std::string broker_state();
+
 } // namespace LOFAR
 
 #endif
diff --git a/LCS/MessageBus/src/FromBus.cc b/LCS/MessageBus/src/FromBus.cc
index 624f096c052e5d8c60d0d684687c7003ce289ceb..78efc01ecb7fac080c97e3ff9736cc34320bc79f 100644
--- a/LCS/MessageBus/src/FromBus.cc
+++ b/LCS/MessageBus/src/FromBus.cc
@@ -2,7 +2,7 @@
 
 #include <MessageBus/FromBus.h>
 #include <MessageBus/Exceptions.h>
-#include "Util.h"
+#include <MessageBus/Util.h>
 
 #include <Common/LofarLogger.h>
 
@@ -14,7 +14,7 @@
 using namespace qpid::messaging;
 
 namespace LOFAR {
-  FromBus::FromBus(const std::string &address, const std::string &options, const std::string &broker)
+  FromBus::FromBus(const std::string &address, const std::string &broker, const std::string &options)
   try:
     itsConnection(broker,"{reconnect:true}"),
     itsNrMissingACKs(0)
diff --git a/LCS/MessageBus/src/ToBus.cc b/LCS/MessageBus/src/ToBus.cc
index 62e5469b2455e5ad5d5848ac90d13ee3b0bd4669..eeabc5361d41e4ddbfaf5896b355e1a34cf3e969 100644
--- a/LCS/MessageBus/src/ToBus.cc
+++ b/LCS/MessageBus/src/ToBus.cc
@@ -2,7 +2,7 @@
 
 #include <MessageBus/ToBus.h>
 #include <MessageBus/Exceptions.h>
-#include "Util.h"
+#include <MessageBus/Util.h>
 
 #include <Common/LofarLogger.h>
 
@@ -15,7 +15,7 @@ using namespace qpid::messaging;
 
 namespace LOFAR {
 
-  ToBus::ToBus(const std::string &address, const std::string &options, const std::string &broker) 
+  ToBus::ToBus(const std::string &address, const std::string &broker, const std::string &options) 
   try:
     itsConnection(broker,"{reconnect:true}")
   {
diff --git a/LCS/MessageBus/src/Util.cc b/LCS/MessageBus/src/Util.cc
index 9c18c62c28ae29b22d08947e178df7988b604a17..a9ebf673061755eb402cc062051529cc075a970b 100644
--- a/LCS/MessageBus/src/Util.cc
+++ b/LCS/MessageBus/src/Util.cc
@@ -1,7 +1,7 @@
 #include "lofar_config.h"
 #include <Common/LofarTypes.h>
 
-#include "Util.h"
+#include <MessageBus/Util.h>
 
 #include <stdlib.h>
 
@@ -38,5 +38,31 @@ namespace LOFAR {
 
     return queueprefix;
   }
+
+  std::string broker_state()
+  {
+    string lofarenv = getenv_str("LOFARENV");
+
+    if (lofarenv == "PRODUCTION") {
+      return "ccu001.control.lofar";
+    } else if (lofarenv == "TEST") {
+      return "ccu199.control.lofar";
+    } else {
+      return "localhost";
+    }
+  }
+
+  std::string broker_feedback()
+  {
+    string lofarenv = getenv_str("LOFARENV");
+
+    if (lofarenv == "PRODUCTION") {
+      return "mcu001.control.lofar";
+    } else if (lofarenv == "TEST") {
+      return "mcu199.control.lofar";
+    } else {
+      return "localhost";
+    }
+  }
 } // namespace LOFAR
 
diff --git a/LCS/MessageBus/src/environment.py b/LCS/MessageBus/src/environment.py
index d48acb57a90ccbf99f57b33f0eb4063875c1c22a..fd8c1642cfd648bca1e7ac9b070b8dbefdf38104 100644
--- a/LCS/MessageBus/src/environment.py
+++ b/LCS/MessageBus/src/environment.py
@@ -1,4 +1,5 @@
-# environment.py: LOFAR environment functions
+# environment.py: Functions to determine the LOFAR environment,
+#                 to avoid a dependency on PyCommon.
 #
 # Copyright (C) 2015
 # ASTRON (Netherlands Institute for Radio Astronomy)
@@ -20,11 +21,6 @@
 #
 # $Id: __init__.py 1568 2015-09-18 15:21:11Z loose $
 
-"""
-Copied from PyCommon/__init__.py to avoid a dependency on a pure-python LOFAR package,
-which is not supported currently by CMake when building a C++ package (due to PackageVersion headers
-needing to be created for anything including LCS/Common).
-"""
 
 import os
 
diff --git a/LCS/MessageBus/src/messagebus.py b/LCS/MessageBus/src/messagebus.py
index efe1af78b0086358b11d3191b2e301023637427d..6699a60acaf8187d9c2387bc82b6dbc5dc07d437 100644
--- a/LCS/MessageBus/src/messagebus.py
+++ b/LCS/MessageBus/src/messagebus.py
@@ -36,6 +36,17 @@ import atexit
 broker="127.0.0.1" 
 options="create:never"
 
+# which brokers to use to avoid routing
+if isProductionEnvironment():
+  broker_feedback="mcu001.control.lofar"
+  broker_state="ccu001.control.lofar"
+elif isTestEnvironment():
+  broker_feedback="mcu199.control.lofar"
+  broker_state="ccu199.control.lofar"
+else:
+  broker_feedback="localhost"
+  broker_state="localhost"
+
 logger=logging.getLogger("MessageBus")
 
 # which brokers to use to avoid routing
diff --git a/LCS/MessageDaemons/src/MessageRouter.conf.ccu001 b/LCS/MessageDaemons/src/MessageRouter.conf.ccu001
index 0fec9038410fb38dc3860ff8314b6342ebc26e65..0d4f917884cfda47e9fee269ae37e41c16ccd128 100644
--- a/LCS/MessageDaemons/src/MessageRouter.conf.ccu001
+++ b/LCS/MessageDaemons/src/MessageRouter.conf.ccu001
@@ -9,7 +9,7 @@
 #lofar.task.specification.system:   mom.task.specification.system
 #
 # Disabled some queues to MoM, see http://www.lofar.org/operations/lib/exe/fetch.php?cache=&media=mom3:qpid_mom3_feedback_production.png
-lofar.task.feedback.dataproducts:  otdb.task.feedback.dataproducts
-lofar.task.feedback.processing:    mom.task.feedback.processing, otdb.task.feedback.processing
-lofar.task.feedback.state:         mac.task.feedback.state
+#lofar.task.feedback.dataproducts:  otdb.task.feedback.dataproducts
+#lofar.task.feedback.processing:    mom.task.feedback.processing, otdb.task.feedback.processing
+#lofar.task.feedback.state:         mac.task.feedback.state
 lofar.task.specification.system:   mom.task.specification.system
diff --git a/LCS/MessageDaemons/src/MessageRouter.conf.ccu199 b/LCS/MessageDaemons/src/MessageRouter.conf.ccu199
index 0fec9038410fb38dc3860ff8314b6342ebc26e65..0d4f917884cfda47e9fee269ae37e41c16ccd128 100644
--- a/LCS/MessageDaemons/src/MessageRouter.conf.ccu199
+++ b/LCS/MessageDaemons/src/MessageRouter.conf.ccu199
@@ -9,7 +9,7 @@
 #lofar.task.specification.system:   mom.task.specification.system
 #
 # Disabled some queues to MoM, see http://www.lofar.org/operations/lib/exe/fetch.php?cache=&media=mom3:qpid_mom3_feedback_production.png
-lofar.task.feedback.dataproducts:  otdb.task.feedback.dataproducts
-lofar.task.feedback.processing:    mom.task.feedback.processing, otdb.task.feedback.processing
-lofar.task.feedback.state:         mac.task.feedback.state
+#lofar.task.feedback.dataproducts:  otdb.task.feedback.dataproducts
+#lofar.task.feedback.processing:    mom.task.feedback.processing, otdb.task.feedback.processing
+#lofar.task.feedback.state:         mac.task.feedback.state
 lofar.task.specification.system:   mom.task.specification.system
diff --git a/LCS/Messaging/include/Messaging/FromBus.h b/LCS/Messaging/include/Messaging/FromBus.h
index bd6e9c87ae5a106a12bf7611ee3e00b6eebe2ef0..4df41b10cdf67d11ac85c9c12b0fb4fb7d6b4040 100644
--- a/LCS/Messaging/include/Messaging/FromBus.h
+++ b/LCS/Messaging/include/Messaging/FromBus.h
@@ -55,8 +55,8 @@ namespace LOFAR
       // @param broker  valid Qpid broker URL.
       // @note  Please consult the Qpid documentation for more details.
       FromBus(const std::string& address, 
-              const std::string& options = defaultAddressOptions,
-              const std::string& broker = defaultBroker);
+              const std::string& broker = defaultBroker,
+              const std::string& options = defaultAddressOptions);
 
       // Destructor. Report the number of missing acknowledgements if non-zero.
       ~FromBus();
diff --git a/LCS/Messaging/include/Messaging/ToBus.h b/LCS/Messaging/include/Messaging/ToBus.h
index e8f44372467c9da45edb231dc2d08e5e3ef73964..1b50efed5388f2bd9698864c362b4ecc30a4bb35 100644
--- a/LCS/Messaging/include/Messaging/ToBus.h
+++ b/LCS/Messaging/include/Messaging/ToBus.h
@@ -53,8 +53,8 @@ namespace LOFAR
       // @param broker  valid Qpid broker URL.
       // @note  Please consult the Qpid documentation for more details.
       ToBus(const std::string& address, 
-            const std::string& options = defaultAddressOptions,
-            const std::string& broker = defaultBroker);
+            const std::string& broker = defaultBroker,
+            const std::string& options = defaultAddressOptions);
 
       // Destructor.
       ~ToBus();
diff --git a/LCS/Messaging/src/FromBus.cc b/LCS/Messaging/src/FromBus.cc
index 024a9d2d7b5744a8a4610c85285e8eb87915667d..ccb86d404394057d29a7be1e69bec3e00fb20567 100644
--- a/LCS/Messaging/src/FromBus.cc
+++ b/LCS/Messaging/src/FromBus.cc
@@ -45,8 +45,8 @@ namespace LOFAR
     }
 
     FromBus::FromBus(const std::string& address, 
-                     const std::string& options,
-                     const std::string& broker)
+                     const std::string& broker,
+                     const std::string& options)
     // We need to use a function try-block here, because we want to catch
     // exceptions that may be thrown during member initialization as well.
     try :
diff --git a/LCS/Messaging/src/ToBus.cc b/LCS/Messaging/src/ToBus.cc
index 6d7db7b52396dd7b3cd8d351e61b070da9b25844..6f05c5a6d73b94922a580031522466d45d3f254e 100644
--- a/LCS/Messaging/src/ToBus.cc
+++ b/LCS/Messaging/src/ToBus.cc
@@ -37,8 +37,8 @@ namespace LOFAR
     using namespace std;
 
     ToBus::ToBus(const string& address, 
-                 const string& options,
-                 const string& broker)
+                 const string& broker,
+                 const string& options)
     // We need to use a function try-block here, because we want to catch
     // exceptions that may be thrown during member initialization as well.
     try : 
diff --git a/LCS/Stream/include/Stream/FileDescriptorBasedStream.h b/LCS/Stream/include/Stream/FileDescriptorBasedStream.h
index 1682651b1a0ac292ac9a1ebfded7b023acd20631..04927d287caeb62bfd45535fe009d4404a7d54f1 100644
--- a/LCS/Stream/include/Stream/FileDescriptorBasedStream.h
+++ b/LCS/Stream/include/Stream/FileDescriptorBasedStream.h
@@ -31,7 +31,7 @@ namespace LOFAR {
 class FileDescriptorBasedStream : public Stream
 {
   public:
-		   FileDescriptorBasedStream(int fd = -1) : fd(fd) {}
+    FileDescriptorBasedStream(int fd = -1, const std::string &annotation = "");
     virtual	   ~FileDescriptorBasedStream();
 
     virtual size_t tryRead(void *ptr, size_t size);
@@ -48,6 +48,8 @@ class FileDescriptorBasedStream : public Stream
 
 
     int		   fd;
+
+    virtual std::string description() const { return "fd=" + std::to_string(fd); }
 };
 
 } // namespace LOFAR
diff --git a/LCS/Stream/include/Stream/FileStream.h b/LCS/Stream/include/Stream/FileStream.h
index 7c38a35956b7c22c657acd04586ee9a68d2d510f..5603f9107febecec80cb08ce3a8ed7d4e4410a58 100644
--- a/LCS/Stream/include/Stream/FileStream.h
+++ b/LCS/Stream/include/Stream/FileStream.h
@@ -32,9 +32,9 @@ namespace LOFAR {
 class FileStream : public FileDescriptorBasedStream
 {
   public:
-	    FileStream(const std::string &name); // read-only; existing file
-	    FileStream(const std::string &name, int mode); // rd/wr; create file
-	    FileStream(const std::string &name, int flags, int mode); // rd/wr; create file, use given flags
+	    FileStream(const std::string &name, const std::string &annotation = ""); // read-only; existing file
+	    FileStream(const std::string &name, int mode, const std::string &annotation = ""); // rd/wr; create file
+	    FileStream(const std::string &name, int flags, int mode, const std::string &annotation = ""); // rd/wr; create file, use given flags
 
     const std::string name;
 						   
@@ -43,6 +43,8 @@ class FileStream : public FileDescriptorBasedStream
     virtual void skip( size_t bytes ); // seek ahead
 
     virtual size_t size(); // return file size
+
+    virtual std::string description() const { return name; }
 };
 
 } // namespace LOFAR
diff --git a/LCS/Stream/include/Stream/FixedBufferStream.h b/LCS/Stream/include/Stream/FixedBufferStream.h
index 1116043f876c71cee7a3b5ad0a8d76d1be18d3ea..350e7be21f6858ef59bc55ca3ae58cc84a4664f4 100644
--- a/LCS/Stream/include/Stream/FixedBufferStream.h
+++ b/LCS/Stream/include/Stream/FixedBufferStream.h
@@ -48,6 +48,10 @@ class FixedBufferStream : public Stream
     virtual size_t tryReadv(const struct iovec *iov, int iovcnt);
     virtual size_t tryWritev(const struct iovec *iov, int iovcnt);
 
+    size_t size() const;
+
+    virtual std::string description() const;
+
   private:
     char * const itsEnd;
 
diff --git a/LCS/Stream/include/Stream/NamedPipeStream.h b/LCS/Stream/include/Stream/NamedPipeStream.h
index 4e820936b226ac2c94341a74b7dc8a1c31b28727..63bae752a4131c782b771715dc5f703fa51424e9 100644
--- a/LCS/Stream/include/Stream/NamedPipeStream.h
+++ b/LCS/Stream/include/Stream/NamedPipeStream.h
@@ -33,7 +33,7 @@ namespace LOFAR {
 class NamedPipeStream : public Stream
 {
   public:
-		   NamedPipeStream(const char *name, bool serverSide);
+    NamedPipeStream(const char *name, bool serverSide, const std::string &annotation = "");
     virtual	   ~NamedPipeStream();
 
     virtual size_t tryRead(void *ptr, size_t size);
@@ -44,6 +44,8 @@ class NamedPipeStream : public Stream
 
     virtual void   sync();
 
+    virtual std::string description() const { return itsReadName + " " + itsWriteName; }
+
   private:
     void	   cleanUp();
 
diff --git a/LCS/Stream/include/Stream/NetFuncs.h b/LCS/Stream/include/Stream/NetFuncs.h
index c0abaa8f7e5e752550a9cbf3bba78c3fd58bf0fb..ad937cfaafa02428ebaccaae4dba51127a46c570 100644
--- a/LCS/Stream/include/Stream/NetFuncs.h
+++ b/LCS/Stream/include/Stream/NetFuncs.h
@@ -52,11 +52,11 @@ namespace LOFAR {
   // TCP=false means UDP.
   void safeGetAddrInfo(safeAddrInfo &result, bool TCP, const std::string &hostname, uint16 port);
 
-  // Returns full hostnames (FQDNs) of the network interfaces in this machine.
+  // Returns either the network interface name, or the full hostnames (FQDNs) of the network interfaces in this machine.
   // Includes names (if avail) of IPv4, IPv6, and loopback interfaces.
   // Excludes names of interfaces that are down.
   // Also not included is the system hostname if it is different from any interface hostname (e.g. on cbt nodes).
-  std::set<std::string> myInterfaceHostnames();
+  std::set<std::string> myInterfaces(bool as_fqdn=true, bool onlyWithLink=false, long speedBps=-1);
 
   // Retrieve the IP of an interface ("eth0") as an 'ifreq' struct, which can be used as sockaddr.
   struct sockaddr getInterfaceIP(const std::string &iface);
diff --git a/LCS/Stream/include/Stream/NullStream.h b/LCS/Stream/include/Stream/NullStream.h
index 5e373facb291302a69691f68b744f27f973248e2..06e55405606de8d22281b7ba5b25e5b1ba90b08e 100644
--- a/LCS/Stream/include/Stream/NullStream.h
+++ b/LCS/Stream/include/Stream/NullStream.h
@@ -38,6 +38,8 @@ class NullStream : public Stream
 
     virtual size_t tryReadv(const struct iovec *iov, int iovcnt);
     virtual size_t tryWritev(const struct iovec *iov, int iovcnt);
+
+    virtual std::string description() const { return "NullStream"; }
 };
 
 } // namespace LOFAR
diff --git a/LCS/Stream/include/Stream/SharedMemoryStream.h b/LCS/Stream/include/Stream/SharedMemoryStream.h
index cf259f5792107e9600af0b3d13e87368ff029722..fcb3ebfab1e38a035ae86d1d902a1b4d0439b8c7 100644
--- a/LCS/Stream/include/Stream/SharedMemoryStream.h
+++ b/LCS/Stream/include/Stream/SharedMemoryStream.h
@@ -34,6 +34,7 @@ namespace LOFAR {
 class SharedMemoryStream : public Stream
 {
   public:
+    SharedMemoryStream(const std::string &annotation = "");
     virtual ~SharedMemoryStream();
 
     virtual size_t tryRead(void *ptr, size_t size);
diff --git a/LCS/Stream/include/Stream/SocketStream.h b/LCS/Stream/include/Stream/SocketStream.h
index 3749472e17f1b8a1bfa93a053017065e93e08e42..d67d4ac3c41933b0d9704d10e6f2b31f841e1d7c 100644
--- a/LCS/Stream/include/Stream/SocketStream.h
+++ b/LCS/Stream/include/Stream/SocketStream.h
@@ -46,7 +46,7 @@ class SocketStream : public FileDescriptorBasedStream
     };
 
     SocketStream(const std::string &hostname, uint16 _port, Protocol, Mode,
-                 time_t deadline = 0, bool doAccept = true, const std::string &bind_local_iface = "");
+                 time_t deadline = 0, bool doAccept = true, const std::string &bind_local_iface = "", const std::string &annotation = "");
     virtual ~SocketStream();
 
     FileDescriptorBasedStream *detach();
@@ -91,10 +91,13 @@ class SocketStream : public FileDescriptorBasedStream
     std::string getHostname() const { return hostname; }
     uint16 getPort() const { return port; }
 
+    virtual std::string description() const;
+
   private:
     const std::string hostname;
     uint16 port;
     int listen_sk;
+    std::string local_iface;
 
     void accept(time_t timeout);
 };
diff --git a/LCS/Stream/include/Stream/Stream.h b/LCS/Stream/include/Stream/Stream.h
index 93b7ff703c23f34facd2cf743bd481ed1b3575ab..68c810d67430b31ecec633d5673adc1a1ecf3443 100644
--- a/LCS/Stream/include/Stream/Stream.h
+++ b/LCS/Stream/include/Stream/Stream.h
@@ -35,7 +35,8 @@ namespace LOFAR {
 class Stream
 {
   public:
-    virtual	   ~Stream();
+    Stream(const std::string &annotation = "");
+    virtual ~Stream();
 
     virtual size_t tryRead(void *ptr, size_t size) = 0;
     void	   read(void *ptr, size_t size); // does not return until all bytes are read
@@ -49,6 +50,18 @@ class Stream
     std::string    readLine(); // excludes '\n'
 
     virtual void   sync();
+
+    virtual std::string description() const = 0; // returns a description of the stream (like the filename for a FileStream, the address for a SocketStream, etc)
+
+    /* set/get free-form annotation for this stream.
+     * Particularly useful for annotating a stream for logging.
+     */
+    const std::string &getAnnotation() const { return annotation; }
+    void setAnnotation(const std::string &_annotation) { annotation = _annotation; }
+
+protected:
+    // optional free-form text field for annotation about this stream (for logging/debugging)
+    std::string annotation;
 };
 
 EXCEPTION_CLASS(EndOfStreamException, LOFAR::Exception);
diff --git a/LCS/Stream/include/Stream/StreamFactory.h b/LCS/Stream/include/Stream/StreamFactory.h
index c1c79488363e499d44e8b3af215bd5e5dd70474d..39ed82a031310d954140f4d7f730417825f298de 100644
--- a/LCS/Stream/include/Stream/StreamFactory.h
+++ b/LCS/Stream/include/Stream/StreamFactory.h
@@ -32,7 +32,8 @@ namespace LOFAR
   // Caller should wrap the returned pointer in some smart ptr type. 
   //
   // deadline: absolute deadline for creating the connection
-  Stream *createStream(const std::string &descriptor, bool asReader, time_t deadline = 0);
+  // annotation: free-form annotation for this stream. Particularly useful for annotating a stream for logging.
+  Stream *createStream(const std::string &descriptor, bool asReader, time_t deadline = 0, const std::string &annotation = "");
 
 } // namespace LOFAR
 
diff --git a/LCS/Stream/include/Stream/StringStream.h b/LCS/Stream/include/Stream/StringStream.h
index ba43c9150dad5c0dfcb6713049c675aeb8b67834..57271587c4972743d056e9ddf32de917a4ae5725 100644
--- a/LCS/Stream/include/Stream/StringStream.h
+++ b/LCS/Stream/include/Stream/StringStream.h
@@ -44,6 +44,8 @@ class StringStream : public Stream
 
     void close();
 
+    virtual std::string description() const { return "StringStream "; }
+
   private:
     Mutex itsMutex;
 
diff --git a/LCS/Stream/src/FileDescriptorBasedStream.cc b/LCS/Stream/src/FileDescriptorBasedStream.cc
index 5b6f338053346b01ad6b97530ed10f1cb867749f..884b303e48ccce2645268cf6855f7edf85a302ca 100644
--- a/LCS/Stream/src/FileDescriptorBasedStream.cc
+++ b/LCS/Stream/src/FileDescriptorBasedStream.cc
@@ -34,6 +34,12 @@
 namespace LOFAR {
 
 
+FileDescriptorBasedStream::FileDescriptorBasedStream(int fd, const std::string &annotation) :
+  Stream(annotation),
+  fd(fd)
+{
+}
+
 FileDescriptorBasedStream::~FileDescriptorBasedStream()
 {
   if (fd >= 0) {
diff --git a/LCS/Stream/src/FileStream.cc b/LCS/Stream/src/FileStream.cc
index 3d780997c612a5a466884f2fd6978540917c2c5d..ea4699a2bf560dd22ce45bd6232f17fb81bdc3bc 100644
--- a/LCS/Stream/src/FileStream.cc
+++ b/LCS/Stream/src/FileStream.cc
@@ -34,27 +34,33 @@
 
 namespace LOFAR {
 
-FileStream::FileStream(const std::string &name):
+FileStream::FileStream(const std::string &name, const std::string &annotation):
   name(name)
 {
   if ((fd = ::open(name.c_str(), O_RDONLY)) < 0)
     THROW_SYSCALL(std::string("open ") + name);
+
+  setAnnotation(annotation);
 }
 
 
-FileStream::FileStream(const std::string &name, int mode):
+FileStream::FileStream(const std::string &name, int mode, const std::string &annotation):
   name(name)
 {
   if ((fd = ::open(name.c_str(), O_RDWR | O_CREAT | O_TRUNC, mode)) < 0)
     THROW_SYSCALL(std::string("open ") + name);
+
+  setAnnotation(annotation);
 }
 
 
-FileStream::FileStream(const std::string &name, int flags, int mode):
+FileStream::FileStream(const std::string &name, int flags, int mode, const std::string &annotation):
   name(name)
 {
   if ((fd = ::open(name.c_str(), flags, mode)) < 0) 
     THROW_SYSCALL(std::string("open ") + name);
+
+  setAnnotation(annotation);
 }
 
 FileStream::~FileStream()
diff --git a/LCS/Stream/src/FixedBufferStream.cc b/LCS/Stream/src/FixedBufferStream.cc
index 43630a2e44a35ecc82cf4d5d9ebe903cb61e1d2d..7d761270ab48fb445eaaa145a651fa50211a10c2 100644
--- a/LCS/Stream/src/FixedBufferStream.cc
+++ b/LCS/Stream/src/FixedBufferStream.cc
@@ -26,7 +26,9 @@
 #include <Common/Thread/Cancellation.h>
 
 #include <cstring>
+#include <boost/format.hpp>
 
+using boost::format;
 
 namespace LOFAR {
 
@@ -137,5 +139,12 @@ size_t FixedBufferStream::tryWritev(const struct iovec *iov, int iovcnt)
   return nwritten;
 }
 
+size_t FixedBufferStream::size() const {
+  return static_cast<size_t>(itsEnd-itsHead);
+}
+
+std::string FixedBufferStream::description() const {
+  return str(boost::format("char[%d]@%x") % size() % static_cast<void*>(itsHead));
+}
 
 } // namespace LOFAR
diff --git a/LCS/Stream/src/NamedPipeStream.cc b/LCS/Stream/src/NamedPipeStream.cc
index 2feca6038200628be12dd68bd552a1919cd4edd4..43236ad09bec2650e045b79f1b2485e73d5744ff 100644
--- a/LCS/Stream/src/NamedPipeStream.cc
+++ b/LCS/Stream/src/NamedPipeStream.cc
@@ -34,8 +34,9 @@
 
 namespace LOFAR {
 
-NamedPipeStream::NamedPipeStream(const char *name, bool serverSide)
+NamedPipeStream::NamedPipeStream(const char *name, bool serverSide, const std::string &annotation)
 :
+  Stream(annotation),
   itsReadName(std::string(name) + (serverSide ? "-0" : "-1")),
   itsWriteName(std::string(name) + (serverSide ? "-1" : "-0")),
   itsReadStream(0),
diff --git a/LCS/Stream/src/NetFuncs.cc b/LCS/Stream/src/NetFuncs.cc
index b77fadb2cc5bfc0be2cdbe4cb9e5fa2fc380e67e..eb780fcc07bc5349e274e7b35862e852d84ab76b 100644
--- a/LCS/Stream/src/NetFuncs.cc
+++ b/LCS/Stream/src/NetFuncs.cc
@@ -23,6 +23,7 @@
 #include <lofar_config.h>
 
 #include <Stream/NetFuncs.h>
+#include <Stream/FileStream.h>
 #include <Common/Thread/Mutex.h>
 #include <Common/LofarLogger.h>
 #include <Common/SystemCallException.h>
@@ -98,14 +99,12 @@ namespace LOFAR {
     }
   }
 
-  std::set<std::string> myInterfaceHostnames() {
+  std::set<std::string> myInterfaces(bool as_fqdn, bool onlyWithLink, long speedBps) {
     IfAddrs ifas;
-    std::set<std::string> hostnames;
+    std::set<std::string> if_names;
 
     struct ifaddrs *ap;
     for (ap = ifas.ifa; ap != NULL; ap = ap->ifa_next) {
-      char hostname[NI_MAXHOST];
-      int salen;
 
       if (ap->ifa_addr == NULL) {
         continue;
@@ -114,6 +113,7 @@ namespace LOFAR {
         continue;
       }
 
+      int salen = 0;
       int family = ap->ifa_addr->sa_family;
       if (family == AF_INET) {
         salen = sizeof(struct sockaddr_in);
@@ -129,11 +129,39 @@ namespace LOFAR {
         continue;
       }
 
-      {
+      if (onlyWithLink) {
+        string if_carrier_file_name(str(format("/sys/class/net/%s/carrier") % ap->ifa_name));
+
+        FileStream file(if_carrier_file_name);
+        if (file.readLine() != "1")
+          continue;
+      }
+
+      if (speedBps > 0) {
+        try {
+          string if_speed_file_name(str(format("/sys/class/net/%s/speed") % ap->ifa_name));
+
+          FileStream file(if_speed_file_name);
+
+          // file contains one line, with speed of the interface in Mbps
+          string line = file.readLine();
+
+          // convert to Bps
+          long ifSpeedBps = stol(line) * 1000000L;
+
+          if(ifSpeedBps != speedBps)
+            continue;
+        } catch(LOFAR::SystemCallException) {
+            continue;
+        }
+      }
+
+      if (as_fqdn) {
         // See safeGetAddrInfo() above. If getaddrinfo does not seem to be thread safe,
         // then better lock getnameinfo too, and with the same mutex.
         ScopedLock sl(getAddrInfoMutex);
 
+        char hostname[NI_MAXHOST];
         int retval = getnameinfo(ap->ifa_addr, salen, hostname, sizeof(hostname),
                                  NULL, 0, NI_NAMEREQD);
         if (retval != 0) {
@@ -142,12 +170,14 @@ namespace LOFAR {
                             family % ap->ifa_name % errorstr));
           continue;
         }
-      }
 
-      hostnames.insert(hostname);
+        if_names.insert(hostname);
+      } else {
+        if_names.insert(string(ap->ifa_name));
+      }
     }
 
-    return hostnames;
+    return if_names;
   }
 
   struct sockaddr getInterfaceIP(const std::string &iface) {
diff --git a/LCS/Stream/src/SharedMemoryStream.cc b/LCS/Stream/src/SharedMemoryStream.cc
index 921efd1d450815fefa3e7b9bb59f5f2adabf6fef..9adfddebdf38bc322823b4732c40c6411a0d4679 100644
--- a/LCS/Stream/src/SharedMemoryStream.cc
+++ b/LCS/Stream/src/SharedMemoryStream.cc
@@ -31,6 +31,11 @@
 
 namespace LOFAR {
 
+SharedMemoryStream::SharedMemoryStream(const std::string &annotation) :
+  Stream(annotation)
+{
+}
+
 SharedMemoryStream::~SharedMemoryStream()
 {
 }
diff --git a/LCS/Stream/src/SocketStream.cc b/LCS/Stream/src/SocketStream.cc
index c37d12baf703b9b34bb59a3d2321ac6326b609b4..db33637dc897805ba85fb09e3f5afc5fa96584f2 100644
--- a/LCS/Stream/src/SocketStream.cc
+++ b/LCS/Stream/src/SocketStream.cc
@@ -59,25 +59,29 @@ using boost::format;
 namespace LOFAR {
 
 SocketStream::SocketStream(const std::string &hostname, uint16 _port, Protocol protocol,
-                           Mode mode, time_t deadline, bool doAccept, const std::string &bind_local_iface)
-:
+                           Mode mode, time_t deadline, bool doAccept, const std::string &bind_local_iface, const std::string &annotation) :
   protocol(protocol),
   mode(mode),
   hostname(hostname),
   port(_port),
-  listen_sk(-1)
-{  
+  listen_sk(-1),
+  local_iface("")
+{
+  setAnnotation(annotation);
+
   const std::string description = str(boost::format("%s:%s:%s")
       % (protocol == TCP ? "tcp" : "udp")
       % hostname
       % _port);
 
+  LOG_INFO_STR("Creating SocketStream: " << this->description());
+
   for(;;) {
     try {
       // Not all potentially blocking calls below have a timeout arg.
       // So check early every round. It may abort hanging tests early (=good).
       if (deadline > 0 && deadline <= time(0))
-        THROW(TimeOutException, "SocketStream");
+        THROW(TimeOutException, str(boost::format("SocketStream deadline %s already passed before opening connection. %s") % deadline % this->description()));
 
       // Resolve host + port to a 'struct addrinfo'
       safeAddrInfo result;
@@ -99,12 +103,16 @@ SocketStream::SocketStream(const std::string &hostname, uint16 _port, Protocol p
         memset(&ifr, 0, sizeof ifr);
         snprintf(ifr.ifr_name, sizeof ifr.ifr_name, "%s", bind_local_iface.c_str());
 
-        if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof ifr) < 0)
+        if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof ifr) < 0) {
           try {
             THROW_SYSCALL("setsockopt(SO_BINDTODEVICE)");
           } catch(Exception &ex) {
             LOG_ERROR_STR("Could not bind socket to device " << bind_local_iface << ": " << ex);
           }
+        } else {
+          local_iface = bind_local_iface;
+          LOG_DEBUG_STR("Bound socket " << description << " to interface " << local_iface);
+        }
       }
 
       if (mode == Client) {
@@ -112,31 +120,39 @@ SocketStream::SocketStream(const std::string &hostname, uint16 _port, Protocol p
           struct sockaddr sa = getInterfaceIP(bind_local_iface);
           LOG_DEBUG_STR("Binding socket " << description << " to IP " << inet_ntoa(((struct sockaddr_in*)&sa)->sin_addr) << " of interface " << bind_local_iface);
 
-          if (bind(fd, &sa, sizeof sa) < 0)
+          if (bind(fd, &sa, sizeof sa) < 0) {
             THROW_SYSCALL(str(boost::format("bind [%s]") % description));
+          } else {
+            local_iface = bind_local_iface;
+            LOG_DEBUG_STR("Bound socket " << description << " to interface " << local_iface);
+          }
         }
 
         while (connect(fd, result.addrinfo->ai_addr, result.addrinfo->ai_addrlen) < 0)
           if (errno == ECONNREFUSED || errno == ETIMEDOUT) {
             if (deadline > 0 && time(0) >= deadline)
-              throw TimeOutException("client socket", THROW_ARGS);
+              THROW(TimeOutException, str(boost::format("SocketStream connect timed out after deadline at %s. %s") % deadline % this->description()));
 
             if (usleep(999999) < 0) { // near 1 sec; max portably safe arg val
               // interrupted by a signal handler -- abort to allow this thread to
               // be forced to continue after receiving a SIGINT, as with any other
               // system call in this constructor 
-              THROW_SYSCALL("usleep");
+              THROW_SYSCALL(str(boost::format("interrupted in usleep while (re)trying to connect to %s") % this->description()));
             }
-          } else
-            THROW_SYSCALL(str(boost::format("connect [%s]") % description));
+          } else {
+            THROW_SYSCALL(str(boost::format("connect failed for %s") % this->description()));
+          }
+
+        LOG_INFO_STR("Created  SocketStream: " << this->description());
       } else {
+        /* server mode */
         const int on = 1;
 
         if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on) < 0)
-          THROW_SYSCALL("setsockopt(SO_REUSEADDR)");
+          THROW_SYSCALL(str(boost::format("setsockopt(SO_REUSEADDR) failed for %s") % this->description()));
 
         if (bind(fd, result.addrinfo->ai_addr, result.addrinfo->ai_addrlen) < 0)
-          THROW_SYSCALL(str(boost::format("bind [%s]") % description));
+          THROW_SYSCALL(str(boost::format("bind failed for %s") % this->description()));
 
         if (port == 0) {
           // we let OS search for a free port
@@ -153,10 +169,15 @@ SocketStream::SocketStream(const std::string &hostname, uint16 _port, Protocol p
           if (listen(listen_sk, listenBacklog) < 0)
             THROW_SYSCALL(str(boost::format("listen [%s]") % description));
 
+          LOG_INFO_STR("Created  SocketStream: " << this->description());
+
           if (doAccept)
             accept(deadline);
           else
             break;
+        } else {
+          /* UDP protocol */
+          LOG_INFO_STR("Created  SocketStream: " << this->description());
         }
       }
 
@@ -226,8 +247,10 @@ void SocketStream::accept(time_t deadline)
 
     time_t now = time(0);
     
-    if (now > deadline)
-      THROW(TimeOutException, "server socket");
+    if (now > deadline) {
+      LOG_INFO_STR(str(boost::format("SocketStream::accept timed out. %s") % this->description()));
+      THROW(TimeOutException, str(boost::format("SocketStream::accept timed out. %s") % this->description()).c_str());
+    }
 
     timeval.tv_sec  = deadline - now;
     timeval.tv_usec = 0;
@@ -241,6 +264,8 @@ void SocketStream::accept(time_t deadline)
 
   if ((fd = ::accept(listen_sk, 0, 0)) < 0)
     THROW_SYSCALL("accept");
+
+  LOG_INFO_STR("SocketStream " << this->description() << " accepted new connection");
 }
 
 
@@ -398,4 +423,14 @@ unsigned SocketStream::recvmmsg( void *bufBase, size_t maxMsgSize,
   return static_cast<unsigned>(numRead);
 }
 
+std::string SocketStream::description() const {
+  return str(boost::format("%s:%s:%s:%s%s%s")
+      % (mode == Client ? "client" : "server")
+      % (protocol == TCP ? "tcp" : "udp")
+      % hostname
+      % port
+      % (local_iface == "" ? "" : (":" + local_iface))
+      % (annotation == "" ? "" : (" " + annotation)));
+}
+
 } // namespace LOFAR
diff --git a/LCS/Stream/src/Stream.cc b/LCS/Stream/src/Stream.cc
index b383b74cd60f0ba89846d44b03a143f66dc7d3de..afa3252faa697a0a11ab1d390b32b63fc27fbd29 100644
--- a/LCS/Stream/src/Stream.cc
+++ b/LCS/Stream/src/Stream.cc
@@ -28,6 +28,11 @@
 
 namespace LOFAR {
 
+Stream::Stream(const std::string &annotation) :
+  annotation(annotation)
+{
+}
+
 Stream::~Stream()
 {
 }
diff --git a/LCS/Stream/src/StreamFactory.cc b/LCS/Stream/src/StreamFactory.cc
index 0bd1c6281d8de929ae18f2fa39966929678028d4..dcb12bce42124fb67e337686bead6f887cd99abc 100644
--- a/LCS/Stream/src/StreamFactory.cc
+++ b/LCS/Stream/src/StreamFactory.cc
@@ -39,7 +39,7 @@ namespace LOFAR
 {
 
   // Caller should wrap the returned pointer in some smart ptr type.
-  Stream *createStream(const std::string &descriptor, bool asServer, time_t deadline)
+  Stream *createStream(const std::string &descriptor, bool asServer, time_t deadline, const std::string &annotation)
   {
     std::vector<std::string> split = StringUtil::split(descriptor, ':');
 
@@ -49,34 +49,61 @@ namespace LOFAR
 
     // udp:HOST:PORT[:LOCAL_IFACE]
     else if (split.size() >= 3 && split[0] == "udp")
-      return new SocketStream(split[1].c_str(), boost::lexical_cast<unsigned short>(split[2]), SocketStream::UDP, asServer ? SocketStream::Server : SocketStream::Client, deadline, true, split.size() > 3 ? split[3] : "");
+      return new SocketStream(split[1].c_str(),
+                              boost::lexical_cast<unsigned short>(split[2]),
+                              SocketStream::UDP, asServer ? SocketStream::Server : SocketStream::Client,
+                              deadline,
+                              true,
+                              split.size() > 3 ? split[3] : "",
+                              annotation);
 
     // tcp:HOST:PORT[:LOCAL_IFACE]
     else if (split.size() >= 3 && split[0] == "tcp")
-      return new SocketStream(split[1].c_str(), boost::lexical_cast<unsigned short>(split[2]), SocketStream::TCP, asServer ? SocketStream::Server : SocketStream::Client, deadline, true, split.size() > 3 ? split[3] : "");
+      return new SocketStream(split[1].c_str(),
+                              boost::lexical_cast<unsigned short>(split[2]),
+                              SocketStream::TCP,
+                              asServer ? SocketStream::Server : SocketStream::Client,
+                              deadline,
+                              true,
+                              split.size() > 3 ? split[3] : "",
+                              annotation);
 
     // tcpbroker:HOST:BROKERPORT:KEY[:LOCAL_IFACE]
     else if (split.size() >= 4 && split[0] == "tcpbroker")
-      return asServer ? static_cast<Stream*>(new PortBroker::ServerStream(split[3])) : static_cast<Stream*>(new PortBroker::ClientStream(split[1], boost::lexical_cast<unsigned short>(split[2]), split[3], deadline, split.size() > 4 ? split[4] : ""));
+      return asServer ? static_cast<Stream*>(new PortBroker::ServerStream(split[3])) :
+                        static_cast<Stream*>(new PortBroker::ClientStream(split[1],
+                                                                          boost::lexical_cast<unsigned short>(split[2]),
+                                                                          split[3],
+                                                                          deadline,
+                                                                          split.size() > 4 ? split[4] : ""));
 
     // file:PATH
     else if (split.size() > 1 && split[0] == "file") {
       // don't use split[1] to allow : in filenames
       const std::string filename = descriptor.substr(5);
-      return asServer ? new FileStream(filename.c_str()) : new FileStream(filename.c_str(), 0666);
+      return asServer ? new FileStream(filename.c_str(), annotation) :
+                        new FileStream(filename.c_str(), 0666, annotation);
     }
    
     // pipe:PATH
     else if (split.size() == 2 && split[0] == "pipe")
-      return new NamedPipeStream(split[1].c_str(), asServer);
+      return new NamedPipeStream(split[1].c_str(), asServer, annotation);
 
     // HOST:PORT (udp)
     else if (split.size() == 2)
-      return new SocketStream(split[0].c_str(), boost::lexical_cast<unsigned short>(split[1]), SocketStream::UDP, asServer ? SocketStream::Server : SocketStream::Client, deadline, true, "");
+      return new SocketStream(split[0].c_str(),
+                              boost::lexical_cast<unsigned short>(split[1]),
+                              SocketStream::UDP,
+                              asServer ? SocketStream::Server : SocketStream::Client,
+                              deadline,
+                              true,
+                              "",
+                              annotation);
 
     // PATH (file)
     else if (split.size() == 1)
-      return asServer ? new FileStream(split[0].c_str()) : new FileStream(split[0].c_str(), 0666);
+      return asServer ? new FileStream(split[0].c_str(), annotation) :
+                        new FileStream(split[0].c_str(), 0666, annotation);
 
     THROW(NotImplemented, std::string("createStream(): unrecognized descriptor: " + descriptor));
   }
diff --git a/LCS/Stream/test/tFixedBufferStream.cc b/LCS/Stream/test/tFixedBufferStream.cc
index 0186beae9a40865007226c50094c376621535d64..41b3598971a7fd32e6b1061a77e17a20a30b1b54 100644
--- a/LCS/Stream/test/tFixedBufferStream.cc
+++ b/LCS/Stream/test/tFixedBufferStream.cc
@@ -83,6 +83,9 @@ int main(int /*argc*/, const char* argv[])
     FixedBufferStream rs(&buffer[0], buffer.size());
     FixedBufferStream ws(&buffer[0], buffer.size());
 
+    LOG_INFO_STR(rs.description());
+    LOG_INFO_STR(ws.description());
+
     // 1 write, 1 read
     testWrite(ws, 100);
     testRead(rs, 100);
diff --git a/LCS/Stream/test/tNetFuncs.cc b/LCS/Stream/test/tNetFuncs.cc
index 7580fef98b3df1e83cc65b114e671dff3ac380fb..d8fe765c64f2f4f8c396f18a0481c1b29e747560 100644
--- a/LCS/Stream/test/tNetFuncs.cc
+++ b/LCS/Stream/test/tNetFuncs.cc
@@ -60,31 +60,31 @@ void test_safeGetAddrInfo()
   ASSERTSTR(ip == "127.0.0.1", "localhost resolves to " << ip);
 }
 
-void test_myInterfaceHostnames()
+void test_myInterfaces()
 {
-  LOG_INFO("test_myInterfaceHostnames");
+  LOG_INFO("test_myInterfaces");
 
-  set<string> names = myInterfaceHostnames();
+  set<string> names = myInterfaces();
   size_t sz = names.size();
-  ASSERTSTR(sz != 0, "Size of myInterfaceHostnames() retval is " << sz);
+  ASSERTSTR(sz != 0, "Size of myInterfaces() retval is " << sz);
 
   bool loopbackNameSeen = false;
   for (set<string>::iterator it = names.begin(); it != names.end(); ++it) {
-    LOG_INFO_STR("test_myInterfaceHostnames(): hostname = " << *it);
+    LOG_INFO_STR("test_myInterfaces(): hostname = " << *it);
 
     if (it->find("localhost") != std::string::npos) { // "localhost", "ip6-localhost", "localhost6", ...
       loopbackNameSeen = true;
     }
   }
 
-  ASSERTSTR(loopbackNameSeen, "myInterfaceHostnames() did not return any loopback interface name");
+  ASSERTSTR(loopbackNameSeen, "myInterfaces() did not return any loopback interface name");
 }
 
 void test()
 {
   test_getInterfaceIP();
   test_safeGetAddrInfo();
-  test_myInterfaceHostnames();
+  test_myInterfaces();
 }
 
 
diff --git a/LCS/Stream/test/tSocketStream.cc b/LCS/Stream/test/tSocketStream.cc
index 976caa6eece0b7043cb02ff7c4d584b6959840e4..570bc27d5f689dc8984af8650b011db59cce7e61 100644
--- a/LCS/Stream/test/tSocketStream.cc
+++ b/LCS/Stream/test/tSocketStream.cc
@@ -36,10 +36,10 @@ public:
   Server(SocketStream::Protocol protocol)
   :
     protocol(protocol),
-    ss("localhost", 0, protocol, SocketStream::Server, 0, false),
+    ss("localhost", 0, protocol, SocketStream::Server, 0, false, "", "TestServer"),
     thread(this, &Server::mainLoop)
   {
-    LOG_INFO_STR("Server listening on port " << ss.getPort());
+    LOG_INFO_STR(ss.description());
   }
 
   ~Server()
@@ -66,7 +66,8 @@ void test_client_server(SocketStream::Protocol protocol)
   Server s(protocol);
 
   // Setup clients, bound to loopi-back interface
-  SocketStream c("localhost", s.getPort(), protocol, SocketStream::Client, 0, false);
+  SocketStream c("localhost", s.getPort(), protocol, SocketStream::Client, 0, false, "", "TestClient");
+  LOG_INFO_STR(c.description());
 }
 
 void test()
@@ -76,6 +77,20 @@ void test()
 
   LOG_INFO("Testing UDP...");
   test_client_server(SocketStream::UDP);
+
+  try {
+    LOG_INFO("Testing client on incorrect port...");
+    SocketStream c("localhost", 0, SocketStream::TCP, SocketStream::Client, time(0)+1, false);
+  } catch (TimeOutException& e) {
+    LOG_INFO_STR("Client on incorrect port timed out as expected..." << e);
+  }
+
+  try {
+    LOG_INFO("Testing server with timout...");
+    SocketStream c("localhost", 0, SocketStream::TCP, SocketStream::Client, time(0)+1, true);
+  } catch (TimeOutException& e) {
+    LOG_INFO_STR("Server on incorrect port timed out as expected..." << e);
+  }
 }
 
 
diff --git a/LCS/pytools/include/pytools/PycBasicData.h b/LCS/pytools/include/pytools/PycBasicData.h
index f2e12e55f72bad24bd39e8a016ea7f9ca0261524..37f6b267751482ac237c6ddb2d8a7d091ea69d5d 100755
--- a/LCS/pytools/include/pytools/PycBasicData.h
+++ b/LCS/pytools/include/pytools/PycBasicData.h
@@ -108,6 +108,7 @@ namespace LOFAR { namespace pytools {
     template <typename ContainerType, typename ValueType>
     static void set_value(ContainerType& a, std::size_t i, ValueType const& v)
     {
+      (void)i; //prevent unused var warning in release mode
       assert(a.size() == i);
       a.push_back(v);
     }
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/LTA/LTACommon/LTA-SIP.xsd b/LTA/LTACommon/LTA-SIP.xsd
index 4b7d975a255839cf769492087d65e7bffb35b3ae..680dba8c0fa3fa3ab2139b53909b856490f4bc09 100644
--- a/LTA/LTACommon/LTA-SIP.xsd
+++ b/LTA/LTACommon/LTA-SIP.xsd
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<xs:schema targetNamespace="http://www.astron.nl/SIP-Lofar" version="2.7.1" xmlns="http://www.astron.nl/SIP-Lofar" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+<xs:schema targetNamespace="http://www.astron.nl/SIP-Lofar" version="2.7.2" xmlns="http://www.astron.nl/SIP-Lofar" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 	<xs:annotation>
 		<xs:documentation>
 		XML Schema for data model Submission Information Package LOFAR Long Term Archive
@@ -123,6 +123,7 @@
 			<xs:enumeration value="J2000"/>
 			<xs:enumeration value="SUN"/>
 			<xs:enumeration value="JUPITER"/>
+			<xs:enumeration value="AZELGEO"/>
 		</xs:restriction>
 	</xs:simpleType>
 	<xs:annotation>
diff --git a/LTA/LTAIngest/LTAIngestServer/LTAIngestTransferServer/lib/momclient.py b/LTA/LTAIngest/LTAIngestServer/LTAIngestTransferServer/lib/momclient.py
index d01f16dbb7450fb0e327483c077b9b8ad3625a00..be822c239e4c10665d3aa13d4937e7b6f22a8ba0 100755
--- a/LTA/LTAIngest/LTAIngestServer/LTAIngestTransferServer/lib/momclient.py
+++ b/LTA/LTAIngest/LTAIngestServer/LTAIngestTransferServer/lib/momclient.py
@@ -14,6 +14,14 @@ from lofar.common.util import humanreadablesize
 import urllib3
 urllib3.disable_warnings()
 
+try:
+    import mechanize
+except ImportError as e:
+    print e
+    print "please install python 'mechanize' package: sudo pip install mechanize"
+    print
+    exit(1)
+
 class MoMClient:
 
     """This is an HTTP client that knows how to use the Single Sign On of Mom2.
diff --git a/MAC/APL/CUDaemons/PVSSGateway_Stub/CMakeLists.txt b/MAC/APL/CUDaemons/PVSSGateway_Stub/CMakeLists.txt
index f58d427d9772eb1bc6e6899c7eeb45bd19b4142e..9cc267481c451e51bbcbc7d1c8e1ed48b55e79d3 100644
--- a/MAC/APL/CUDaemons/PVSSGateway_Stub/CMakeLists.txt
+++ b/MAC/APL/CUDaemons/PVSSGateway_Stub/CMakeLists.txt
@@ -11,4 +11,4 @@ lofar_add_library(pvssgwstub
 
 lofar_add_bin_program(PVSSGatewayStub PVSSGatewayStubMain.cc PVSSGatewayStub.cc)
 
-install(FILES PVSSGatewayStub.conf DESTINATION etc)
+lofar_add_sysconf_files(PVSSGatewayStub.conf)
diff --git a/MAC/APL/CUDaemons/Service_Broker/CMakeLists.txt b/MAC/APL/CUDaemons/Service_Broker/CMakeLists.txt
index 4a8f64a31a8ed183f213e76763f21ca4d3a42f4c..b05bcdf550aa4aa1491a76303646626820ec545c 100644
--- a/MAC/APL/CUDaemons/Service_Broker/CMakeLists.txt
+++ b/MAC/APL/CUDaemons/Service_Broker/CMakeLists.txt
@@ -11,4 +11,4 @@ lofar_add_library(servicebroker
 
 lofar_add_bin_program(ServiceBroker ServiceBrokerMain.cc ServiceBroker.cc)
 
-install(FILES ServiceBroker.conf DESTINATION etc)
+lofar_add_sysconf_files(ServiceBroker.conf)
diff --git a/MAC/Deployment/data/Coordinates/ETRF_FILES/IE613/ie613-antenna-positions-etrs.csv b/MAC/Deployment/data/Coordinates/ETRF_FILES/IE613/ie613-antenna-positions-etrs.csv
index 56638e56abf42cc7c109e8c23e3486531746ed23..03dc3500a95eb680ee543e7ffdb15538e5a7201f 100644
--- a/MAC/Deployment/data/Coordinates/ETRF_FILES/IE613/ie613-antenna-positions-etrs.csv
+++ b/MAC/Deployment/data/Coordinates/ETRF_FILES/IE613/ie613-antenna-positions-etrs.csv
@@ -1,195 +1,195 @@
-NAME,ETRS-X,ETRS-Y,ETRS-Z,STATION-P,STATION-Q,STATION-R,RCU-X,RCU-Y
-L0,3801624.10856,-529030.144321,5077003.33758,-6.735,12.389,0.0,0,1
-L1,3801623.20436,-529022.13332,5077004.87235,1.427,13.244,0.0,2,3
-L2,3801621.45091,-529028.364405,5077005.51374,-4.624,15.631,0.0,4,5
-L3,3801620.54284,-529021.553655,5077006.92265,2.332,16.531,0.0,6,7
-L4,3801646.30601,-529007.273462,5076989.20971,13.566,-15.953,0.0,8,9
-L5,3801645.03826,-529001.244225,5076990.80346,19.78,-14.58,0.0,10,11
-L6,3801652.84665,-529008.422381,5076984.20068,11.619,-24.04,0.0,12,13
-L7,3801652.74607,-529003.497071,5076984.80416,16.582,-24.08,0.0,14,15
-L8,3801619.70289,-529033.333371,5077006.28647,-9.407,17.969,0.0,16,17
-L9,3801618.94159,-529040.297502,5077006.1081,-16.315,19.148,0.0,18,19
-L10,3801615.72997,-529041.019718,5077008.42967,-16.652,23.162,0.0,20,21
-L11,3801613.76624,-529037.838023,5077010.23786,-13.216,25.495,0.0,22,23
-L12,3801636.91031,-529018.609654,5076995.01215,3.309,-3.901,0.0,24,25
-L13,3801632.34691,-529018.277046,5076998.45664,4.196,1.757,0.0,26,27
-L14,3801632.12168,-529014.908769,5076998.9862,7.609,1.924,0.0,28,29
-L15,3801635.60373,-529012.573157,5076996.63569,9.535,-2.48,0.0,30,31
-L16,3801629.76178,-529013.125808,5077000.94027,9.687,4.796,0.0,32,33
-L17,3801626.03464,-529015.35764,5077003.485,7.895,9.501,0.0,34,35
-L18,3801627.27955,-529006.775319,5077003.47569,16.371,7.667,0.0,36,37
-L19,3801623.62559,-529008.168631,5077006.05569,15.413,12.253,0.0,38,39
-L20,3801644.22642,-529038.251875,5076987.44007,-17.321,-12.332,0.0,40,41
-L21,3801639.14143,-529045.026625,5076990.51176,-23.515,-5.788,0.0,42,43
-L22,3801648.608,-529045.396223,5076983.4007,-25.033,-17.536,0.0,44,45
-L23,3801639.62259,-529050.69201,5076989.54462,-29.268,-6.196,0.0,46,47
-L24,3801629.11398,-529034.302583,5076999.15253,-11.521,6.31,0.0,48,49
-L25,3801625.8773,-529035.528226,5077001.43881,-12.361,10.372,0.0,50,51
-L26,3801630.28183,-529038.208913,5076997.86112,-15.589,4.99,0.0,52,53
-L27,3801629.81848,-529042.251094,5076997.77363,-19.596,5.701,0.0,54,55
-L28,3801650.29313,-529024.090486,5076984.4274,-3.821,-20.343,0.0,56,57
-L29,3801653.33369,-529022.845693,5076982.28967,-2.938,-24.162,0.0,58,59
-L30,3801652.0097,-529032.704977,5076982.22106,-12.688,-22.187,0.0,60,61
-L31,3801656.64085,-529030.683572,5076978.97849,-11.217,-28.008,0.0,62,63
-L32,3801628.1705,-529002.978084,5077003.2175,20.08,6.433,0.0,64,65
-L33,3801632.51999,-528998.929291,5077000.40279,23.623,0.894,0.0,66,67
-L34,3801630.89005,-528989.408004,5077002.64169,33.391,2.6,0.0,68,69
-L35,3801626.28903,-528992.815581,5077005.71307,30.523,8.43,0.0,70,71
-L36,3801639.72662,-529021.79607,5076992.56659,-0.235,-7.293,0.0,72,73
-L37,3801640.58541,-529016.119463,5076992.53402,5.367,-8.55,0.0,74,75
-L38,3801642.90324,-529022.164445,5076990.15417,-0.99,-11.227,0.0,76,77
-L39,3801644.07468,-529018.679621,5076989.65294,2.371,-12.799,0.0,78,79
-L40,3801613.49668,-529024.076941,5077011.91538,0.649,25.369,0.0,80,81
-L41,3801615.90945,-529014.325239,5077011.15914,10.159,22.045,0.0,82,83
-L42,3801609.21526,-529018.498353,5077015.71197,6.775,30.501,0.0,84,85
-L43,3801612.80684,-529008.729972,5077014.07696,16.159,25.712,0.0,86,87
-L44,3801637.52466,-529027.872277,5076993.55963,-6.076,-4.354,0.0,88,89
-L45,3801640.63597,-529028.684264,5076991.14841,-7.269,-8.192,0.0,90,91
-L46,3801635.83519,-529032.295976,5076994.34711,-10.318,-2.107,0.0,92,93
-L47,3801640.00113,-529032.814756,5076991.17955,-11.344,-7.265,0.0,94,95
-L48,3801640.9208,-529006.047012,5076993.36396,15.451,-9.304,0.0,96,97
-L49,3801647.49335,-529032.594521,5076985.60658,-12.03,-16.58,0.0,98,99
-L50,3801645.42222,-528996.287397,5076991.04837,24.716,-15.223,0.0,100,101
-L51,3801635.08021,-529000.140949,5076998.36036,22.095,-2.246,0.0,102,103
-L52,3801631.81261,-529047.246714,5076995.74816,-24.859,3.391,0.0,104,105
-L53,3801653.58056,-529040.482451,5076980.21336,-20.696,-23.878,0.0,106,107
-L54,3801637.70694,-528993.13014,5076997.15028,28.824,-5.744,0.0,108,109
-L55,3801637.90242,-529015.370278,5076994.61854,6.445,-5.242,0.0,110,111
-L56,3801610.8709,-529030.346475,5077013.20427,-5.335,28.841,0.0,112,113
-L57,3801635.61721,-529041.946393,5076993.47473,-19.992,-1.513,0.0,114,115
-L58,3801623.42751,-529038.204059,5077002.98174,-14.754,13.505,0.0,116,117
-L59,3801658.73619,-529021.130287,5076978.43808,-1.868,-30.931,0.0,118,119
-L60,3801645.9965,-529029.084979,5076987.10117,-8.321,-14.838,0.0,120,121
-L61,3801637.34139,-529038.630752,5076992.54246,-16.868,-3.766,0.0,122,123
-L62,3801619.08922,-529015.76568,5077008.62937,8.326,18.143,0.0,124,125
-L63,3801628.95572,-529019.802848,5077000.82614,3.073,6.021,0.0,126,127
-L64,3801642.93487,-529011.245167,5076991.30186,9.982,-11.632,0.0,128,129
-L65,3801628.70881,-529026.737833,5077000.26666,-3.868,6.56,0.0,130,131
-L66,3801652.47982,-529017.268988,5076983.52572,2.771,-23.288,0.0,132,133
-L67,3801646.87731,-529020.821106,5076987.32969,-0.121,-16.209,0.0,134,135
-L68,3801625.59651,-529044.132668,5077000.72556,-20.976,11.009,0.0,136,137
-L69,3801622.91188,-529044.606348,5077002.68014,-21.127,14.36,0.0,138,139
-L70,3801633.03757,-529026.906705,5076997.01501,-4.562,1.188,0.0,140,141
-L71,3801617.27327,-529024.366064,5077009.0633,-0.099,20.687,0.0,142,143
-L72,3801643.33709,-529026.941161,5076989.31769,-5.844,-11.606,0.0,144,145
-L73,3801634.63118,-529005.25186,5076998.14753,17.012,-1.517,0.0,146,147
-L74,3801645.36222,-529012.872763,5076989.31407,8.052,-14.593,0.0,148,149
-L75,3801640.32787,-528994.443917,5076995.05154,27.186,-8.956,0.0,150,151
-L76,3801630.13982,-529030.851219,5076998.75646,-8.176,4.92,0.0,152,153
-L77,3801643.29597,-529033.178836,5076988.67929,-12.109,-11.346,0.0,154,155
-L78,3801616.89089,-529032.068481,5077008.52269,-7.795,21.42,0.0,156,157
-L79,3801619.05996,-529006.708134,5077009.62284,17.434,17.876,0.0,158,159
-L80,3801622.89187,-529012.900981,5077006.09613,10.745,13.323,0.0,160,161
-L81,3801641.41074,-529001.736999,5076993.46032,19.724,-10.057,0.0,162,163
-L82,3801629.86911,-529008.686801,5077001.33628,14.136,4.514,0.0,164,165
-L83,3801630.20942,-529023.519762,5076999.49093,-0.815,4.588,0.0,166,167
-L84,3801648.23321,-529040.301998,5076984.22712,-19.867,-17.241,0.0,168,169
-L85,3801637.63669,-529024.324087,5076993.85656,-2.523,-4.612,0.0,170,171
-L86,3801658.30219,-529010.376544,5076979.91583,8.994,-30.752,0.0,172,173
-L87,3801651.29131,-529014.298313,5076984.73219,5.901,-21.911,0.0,174,175
-L88,3801626.41855,-529018.72968,5077002.8365,4.459,9.137,0.0,176,177
-L89,3801617.63711,-528999.314747,5077011.47878,25.038,19.396,0.0,178,179
-L90,3801625.93131,-529027.290351,5077002.28215,-4.087,10.029,0.0,180,181
-L91,3801633.67036,-529049.363758,5076994.13334,-27.212,1.154,0.0,182,183
-L92,3801624.37027,-529001.842209,5077006.17807,21.682,11.116,0.0,184,185
-L93,3801632.97145,-529030.365798,5076996.69334,-8.031,1.386,0.0,186,187
-L94,3801634.68204,-529035.563708,5076994.85797,-13.463,-0.565,0.0,188,189
-L95,3801635.94739,-529009.167177,5076996.74434,12.917,-3.021,0.0,190,191
-H0,3801681.27135,-528961.263437,5076968.37951,24.5318938806,12.9351607929,0.0,0,1
-H1,3801685.36841,-528960.233733,5076965.43346,25.0708938806,7.81316079291,0.0,2,3
-H2,3801689.46549,-528959.20502,5076962.48728,25.6088938806,2.69116079291,0.0,4,5
-H3,3801693.56178,-528958.176404,5076959.54169,26.1468938806,-2.42983920709,0.0,6,7
-H4,3801697.65884,-528957.1467,5076956.59564,26.6858938806,-7.55183920709,0.0,8,9
-H5,3801677.7386,-528967.318311,5076970.35376,18.8718938806,17.5181607929,0.0,10,11
-H6,3801681.83485,-528966.288703,5076967.4083,19.4108938806,12.3971607929,0.0,12,13
-H7,3801685.93194,-528965.25999,5076964.46212,19.9488938806,7.27516079291,0.0,14,15
-H8,3801690.02903,-528964.231277,5076961.51594,20.4868938806,2.15316079291,0.0,16,17
-H9,3801694.12609,-528963.201573,5076958.56989,21.0258938806,-2.96883920709,0.0,18,19
-H10,3801698.22237,-528962.172957,5076955.6243,21.5638938806,-8.08983920709,0.0,20,21
-H11,3801702.31946,-528961.144244,5076952.67813,22.1018938806,-13.2118392071,0.0,22,23
-H12,3801674.20504,-528973.373281,5076972.3286,13.2118938806,22.1021607929,0.0,24,25
-H13,3801678.3021,-528972.343577,5076969.38255,13.7508938806,16.9801607929,0.0,26,27
-H14,3801682.39919,-528971.314864,5076966.43637,14.2888938806,11.8581607929,0.0,28,29
-H15,3801686.49547,-528970.286248,5076963.49078,14.8268938806,6.73716079291,0.0,30,31
-H16,3801690.59256,-528969.257535,5076960.5446,15.3648938806,1.61516079291,0.0,32,33
-H17,3801694.68962,-528968.22783,5076957.59856,15.9038938806,-3.50683920709,0.0,34,35
-H18,3801698.78671,-528967.199118,5076954.65238,16.4418938806,-8.62883920709,0.0,36,37
-H19,3801702.88379,-528966.170405,5076951.7062,16.9798938806,-13.7508392071,0.0,38,39
-H20,3801706.98005,-528965.140797,5076948.76074,17.5188938806,-18.8718392071,0.0,40,41
-H21,3801670.67229,-528979.428154,5076974.30285,7.55189388057,26.6851607929,0.0,42,43
-H22,3801674.76857,-528978.399538,5076971.35726,8.08989388057,21.5641607929,0.0,44,45
-H23,3801678.86564,-528977.369834,5076968.41121,8.62889388057,16.4421607929,0.0,46,47
-H24,3801682.96272,-528976.341121,5076965.46503,9.16689388057,11.3201607929,0.0,48,49
-H25,3801687.05981,-528975.312408,5076962.51886,9.70489388057,6.19816079291,0.0,50,51
-H26,3801691.15687,-528974.282704,5076959.57281,10.2438938806,1.07616079291,0.0,52,53
-H27,3801695.25315,-528973.254088,5076956.62722,10.7818938806,-4.04483920709,0.0,54,55
-H28,3801699.35024,-528972.225375,5076953.68104,11.3198938806,-9.16683920709,0.0,56,57
-H29,3801703.4473,-528971.19567,5076950.73499,11.8588938806,-14.2888392071,0.0,58,59
-H30,3801707.54439,-528970.166958,5076947.78881,12.3968938806,-19.4108392071,0.0,60,61
-H31,3801711.64067,-528969.138341,5076944.84322,12.9348938806,-24.5318392071,0.0,62,63
-H32,3801671.23582,-528984.454412,5076973.33151,2.42989388057,26.1471607929,0.0,64,65
-H33,3801675.33288,-528983.424707,5076970.38546,2.96889388057,21.0251607929,0.0,66,67
-H34,3801679.42917,-528982.396091,5076967.43987,3.50689388057,15.9041607929,0.0,68,69
-H35,3801683.52625,-528981.367378,5076964.4937,4.04489388057,10.7821607929,0.0,70,71
-H36,3801687.62331,-528980.337674,5076961.54765,4.58389388057,5.66016079291,0.0,72,73
-H37,3801691.7204,-528979.308961,5076958.60147,5.12189388057,0.538160792914,0.0,74,75
-H38,3801695.81749,-528978.280248,5076955.65529,5.65989388057,-4.58383920709,0.0,76,77
-H39,3801699.91375,-528977.250641,5076952.70983,6.19889388057,-9.70483920709,0.0,78,79
-H40,3801704.01083,-528976.221928,5076949.76365,6.73689388057,-14.8268392071,0.0,80,81
-H41,3801708.10792,-528975.193215,5076946.81748,7.27489388057,-19.9488392071,0.0,82,83
-H42,3801712.20498,-528974.16351,5076943.87143,7.81389388057,-25.0708392071,0.0,84,85
-H43,3801671.79936,-528989.480669,5076972.36017,-2.69210611943,25.6091607929,0.0,86,87
-H44,3801675.89642,-528988.450965,5076969.41412,-2.15310611943,20.4871607929,0.0,88,89
-H45,3801679.9935,-528987.422252,5076966.46795,-1.61510611943,15.3651607929,0.0,90,91
-H46,3801684.09059,-528986.393539,5076963.52177,-1.07710611943,10.2431607929,0.0,92,93
-H47,3801688.18685,-528985.363931,5076960.57631,-0.538106119427,5.12216079291,0.0,94,95
-H48,3801696.38102,-528983.306505,5076954.68395,0.537893880573,-5.12183920709,0.0,96,97
-H49,3801700.47808,-528982.276801,5076951.7379,1.07689388057,-10.2438392071,0.0,98,99
-H50,3801704.57517,-528981.248088,5076948.79173,1.61489388057,-15.3658392071,0.0,100,101
-H51,3801708.67145,-528980.219472,5076945.84614,2.15289388057,-20.4868392071,0.0,102,103
-H52,3801712.76851,-528979.189768,5076942.90009,2.69189388057,-25.6088392071,0.0,104,105
-H53,3801672.36367,-528994.505838,5076971.38837,-7.81310611943,25.0701607929,0.0,106,107
-H54,3801676.45995,-528993.477222,5076968.44279,-7.27510611943,19.9491607929,0.0,108,109
-H55,3801680.55704,-528992.448509,5076965.49661,-6.73710611943,14.8271607929,0.0,110,111
-H56,3801684.6541,-528991.418805,5076962.55056,-6.19810611943,9.70516079291,0.0,112,113
-H57,3801688.75118,-528990.390092,5076959.60438,-5.66010611943,4.58316079291,0.0,114,115
-H58,3801692.84747,-528989.361475,5076956.65879,-5.12210611943,-0.537839207086,0.0,116,117
-H59,3801696.94453,-528988.331771,5076953.71274,-4.58310611943,-5.65983920709,0.0,118,119
-H60,3801701.04161,-528987.303058,5076950.76657,-4.04510611943,-10.7818392071,0.0,120,121
-H61,3801705.1387,-528986.274345,5076947.82039,-3.50710611943,-15.9038392071,0.0,122,123
-H62,3801709.23576,-528985.244641,5076944.87434,-2.96810611943,-21.0258392071,0.0,124,125
-H63,3801713.33204,-528984.216025,5076941.92875,-2.43010611943,-26.1468392071,0.0,126,127
-H64,3801672.9272,-528999.532095,5076970.41704,-12.9351061194,24.5321607929,0.0,128,129
-H65,3801677.02428,-528998.503382,5076967.47086,-12.3971061194,19.4101607929,0.0,130,131
-H66,3801681.12054,-528997.473775,5076964.5254,-11.8581061194,14.2891607929,0.0,132,133
-H67,3801685.21763,-528996.445062,5076961.57922,-11.3201061194,9.16716079291,0.0,134,135
-H68,3801689.31472,-528995.416349,5076958.63304,-10.7821061194,4.04516079291,0.0,136,137
-H69,3801693.41178,-528994.386645,5076955.68699,-10.2431061194,-1.07683920709,0.0,138,139
-H70,3801697.50886,-528993.357932,5076952.74082,-9.70510611943,-6.19883920709,0.0,140,141
-H71,3801701.60515,-528992.329315,5076949.79523,-9.16710611943,-11.3198392071,0.0,142,143
-H72,3801705.70223,-528991.300603,5076946.84905,-8.62910611943,-16.4418392071,0.0,144,145
-H73,3801709.79929,-528990.270898,5076943.903,-8.09010611943,-21.5638392071,0.0,146,147
-H74,3801713.89638,-528989.242185,5076940.95682,-7.55210611943,-26.6858392071,0.0,148,149
-H75,3801677.58782,-529003.52964,5076966.49952,-17.5191061194,18.8721607929,0.0,150,151
-H76,3801681.68488,-529002.499935,5076963.55347,-16.9801061194,13.7501607929,0.0,152,153
-H77,3801685.78196,-529001.471222,5076960.60729,-16.4421061194,8.62816079291,0.0,154,155
-H78,3801689.87825,-529000.442606,5076957.66171,-15.9041061194,3.50716079291,0.0,156,157
-H79,3801693.97531,-528999.412902,5076954.71566,-15.3651061194,-1.61483920709,0.0,158,159
-H80,3801698.07239,-528998.384189,5076951.76948,-14.8271061194,-6.73683920709,0.0,160,161
-H81,3801702.16948,-528997.355476,5076948.8233,-14.2891061194,-11.8588392071,0.0,162,163
-H82,3801706.26574,-528996.325868,5076945.87784,-13.7501061194,-16.9798392071,0.0,164,165
-H83,3801710.36283,-528995.297155,5076942.93166,-13.2121061194,-22.1018392071,0.0,166,167
-H84,3801682.24841,-529007.526192,5076962.58213,-22.1021061194,13.2121607929,0.0,168,169
-H85,3801686.3455,-529006.49748,5076959.63596,-21.5641061194,8.09016079291,0.0,170,171
-H86,3801690.44256,-529005.467775,5076956.68991,-21.0251061194,2.96816079291,0.0,172,173
-H87,3801694.53884,-529004.439159,5076953.74432,-20.4871061194,-2.15283920709,0.0,174,175
-H88,3801698.63593,-529003.410446,5076950.79814,-19.9491061194,-7.27483920709,0.0,176,177
-H89,3801702.73299,-529002.380742,5076947.85209,-19.4101061194,-12.3968392071,0.0,178,179
-H90,3801706.83007,-529001.352029,5076944.90591,-18.8721061194,-17.5188392071,0.0,180,181
-H91,3801686.909,-529011.522745,5076958.66475,-26.6851061194,7.55216079291,0.0,182,183
-H92,3801691.00609,-529010.494032,5076955.71857,-26.1471061194,2.43016079291,0.0,184,185
-H93,3801695.10318,-529009.46532,5076952.77239,-25.6091061194,-2.69183920709,0.0,186,187
-H94,3801699.20026,-529008.436607,5076949.82621,-25.0711061194,-7.81383920709,0.0,188,189
-H95,3801703.29652,-529007.406999,5076946.88075,-24.5321061194,-12.9348392071,0.0,190,191
-CLBA,3801633.86881,-529022.26806,5076996.89168,0.0,0.0,0.0,-1,-1
-CHBA,3801692.28406,-528984.335098,5076957.63005,0.0,0.0,0.0,-1,-1
+NAME,ETRS-X,ETRS-Y,ETRS-Z,STATION-P,STATION-Q,STATION-R,RCU-X,RCU-Y
+L0,3801624.0604194775,-529030.1501214409,5077003.372914715,-6.735,12.449,0.0,0,1
+L1,3801623.156214851,-529022.1391197687,5077004.907690008,1.427,13.304,0.0,2,3
+L2,3801621.402771829,-529028.3702053287,5077005.549079371,-4.624,15.691,0.0,4,5
+L3,3801620.494701803,-529021.5594553944,5077006.957990355,2.332,16.590999999999998,0.0,6,7
+L4,3801646.257868807,-529007.2792624957,5076989.245047947,13.566,-15.892999999999999,0.0,8,9
+L5,3801644.990124009,-529001.2500248001,5076990.838798535,19.78,-14.52,0.0,10,11
+L6,3801652.798510613,-529008.4281808413,5076984.23601916,11.619,-23.98,0.0,12,13
+L7,3801652.6979275024,-529003.502871749,5076984.839494415,16.582,-24.02,0.0,14,15
+L8,3801619.65474614,-529033.3391716245,5077006.321810332,-9.407,18.029,0.0,16,17
+L9,3801618.8934504706,-529040.3033025083,5077006.143442911,-16.315,19.208,0.0,18,19
+L10,3801615.6818327536,-529041.0255180513,5077008.465011637,-16.652,23.221999999999998,0.0,20,21
+L11,3801613.7180983396,-529037.8438229004,5077010.273200819,-13.216,25.555,0.0,22,23
+L12,3801636.862167671,-529018.6154543279,5076995.047487771,3.309,-3.8409999999999997,0.0,24,25
+L13,3801632.2987675644,-529018.2828461849,5076998.491973842,4.196,1.817,0.0,26,27
+L14,3801632.073534833,-529014.9145690448,5076999.0215371745,7.609,1.984,0.0,28,29
+L15,3801635.555589347,-529012.5789573228,5076996.671025263,9.535,-2.42,0.0,30,31
+L16,3801629.7136383206,-529013.1316083346,5077000.975611778,9.687,4.856,0.0,32,33
+L17,3801625.986494659,-529015.3634400802,5077003.520334982,7.895,9.561,0.0,34,35
+L18,3801627.2314108717,-529006.781119357,5077003.511027649,16.371,7.726999999999999,0.0,36,37
+L19,3801623.577451161,-529008.1744307632,5077006.091031865,15.413,12.313,0.0,38,39
+L20,3801644.178274404,-529038.2576754929,5076987.475408072,-17.321,-12.272,0.0,40,41
+L21,3801639.093291584,-529045.0324250113,5076990.547099899,-23.515,-5.728000000000001,0.0,42,43
+L22,3801648.559862634,-529045.4020230422,5076983.436034027,-25.033,-17.476000000000003,0.0,44,45
+L23,3801639.5744460723,-529050.6978104172,5076989.579953808,-29.268,-6.136,0.0,46,47
+L24,3801629.0658411835,-529034.3083827608,5076999.187863539,-11.521,6.369999999999999,0.0,48,49
+L25,3801625.829157557,-529035.5340266348,5077001.474153153,-12.361,10.432,0.0,50,51
+L26,3801630.2336919876,-529038.21471358,5076997.89645809,-15.589,5.05,0.0,52,53
+L27,3801629.7703422913,-529042.256893996,5076997.8089678455,-19.596,5.760999999999999,0.0,54,55
+L28,3801650.2449894287,-529024.0962864995,5076984.462742875,-3.821,-20.283,0.0,56,57
+L29,3801653.2855528444,-529022.8514937412,5076982.325006899,-2.938,-24.102,0.0,58,59
+L30,3801651.961563638,-529032.7107772199,5076982.256400288,-12.688,-22.127000000000002,0.0,60,61
+L31,3801656.592709577,-529030.6893727339,5076979.013825201,-11.217,-27.948,0.0,62,63
+L32,3801628.1223553293,-529002.9838846978,5077003.252834085,20.08,6.492999999999999,0.0,64,65
+L33,3801632.471847731,-528998.9350913557,5077000.438130136,23.623,0.954,0.0,66,67
+L34,3801630.841910967,-528989.4138045723,5077002.677028109,33.391,2.66,0.0,68,69
+L35,3801626.240890222,-528992.8213812988,5077005.748404504,30.523,8.49,0.0,70,71
+L36,3801639.678476319,-529021.8018705442,5076992.6019290835,-0.235,-7.2330000000000005,0.0,72,73
+L37,3801640.5372687764,-529016.1252635132,5076992.569354084,5.367,-8.49,0.0,74,75
+L38,3801642.8550988515,-529022.1702448049,5076990.1895131385,-0.99,-11.167,0.0,76,77
+L39,3801644.026540263,-529018.6854213631,5076989.688279063,2.371,-12.738999999999999,0.0,78,79
+L40,3801613.448537932,-529024.0827411198,5077011.950718751,0.649,25.429,0.0,80,81
+L41,3801615.8613112206,-529014.331038811,5077011.194475974,10.159,22.105,0.0,82,83
+L42,3801609.1671177046,-529018.5041528655,5077015.747308527,6.775,30.561,0.0,84,85
+L43,3801612.7586999116,-529008.7357724707,5077014.112298218,16.159,25.772,0.0,86,87
+L44,3801637.476522954,-529027.8780769372,5076993.594964455,-6.076,-4.2940000000000005,0.0,88,89
+L45,3801640.587829189,-529028.6900640154,5076991.183752416,-7.269,-8.132,0.0,90,91
+L46,3801635.787048296,-529032.3017762424,5076994.38244959,-10.318,-2.047,0.0,92,93
+L47,3801639.95299008,-529032.8205559698,5076991.214889543,-11.344,-7.205,0.0,94,95
+L48,3801640.872661582,-529006.052812086,5076993.399297403,15.451,-9.244,0.0,96,97
+L49,3801647.4452052154,-529032.600321321,5076985.641916363,-12.03,-16.52,0.0,98,99
+L50,3801645.3740788316,-528996.2931970066,5076991.083710599,24.716,-15.163,0.0,100,101
+L51,3801635.0320703574,-529000.1467496689,5076998.395698194,22.095,-2.186,0.0,102,103
+L52,3801631.7644643122,-529047.2525141707,5076995.783498656,-24.859,3.451,0.0,104,105
+L53,3801653.5324146794,-529040.4882514522,5076980.248698475,-20.696,-23.818,0.0,106,107
+L54,3801637.658797412,-528993.1359398637,5076997.185617264,28.824,-5.684,0.0,108,109
+L55,3801637.854281561,-529015.3760778479,5076994.653880035,6.445,-5.182,0.0,110,111
+L56,3801610.822755677,-529030.3522757463,5077013.239610957,-5.335,28.901,0.0,112,113
+L57,3801635.5690706214,-529041.9521934493,5076993.51007039,-19.992,-1.4529999999999998,0.0,114,115
+L58,3801623.379372388,-529038.2098590777,5077003.017076146,-14.754,13.565000000000001,0.0,116,117
+L59,3801658.688045175,-529021.1360873628,5076978.473420397,-1.868,-30.871000000000002,0.0,118,119
+L60,3801645.948360583,-529029.0907795749,5076987.136512588,-8.321,-14.777999999999999,0.0,120,121
+L61,3801637.293247128,-529038.6365525298,5076992.577801295,-16.868,-3.706,0.0,122,123
+L62,3801619.0410770294,-529015.7714798962,5077008.664710791,8.326,18.203,0.0,124,125
+L63,3801628.9075750494,-529019.8086478977,5077000.861481694,3.073,6.0809999999999995,0.0,126,127
+L64,3801642.8867329224,-529011.2509672388,5076991.337200256,9.982,-11.572,0.0,128,129
+L65,3801628.6606646073,-529026.7436330118,5077000.302000953,-3.868,6.619999999999999,0.0,130,131
+L66,3801652.4316802244,-529017.2747885893,5076983.561056331,2.771,-23.228,0.0,132,133
+L67,3801646.82916782,-529020.8269064376,5076987.365030378,-0.121,-16.149,0.0,134,135
+L68,3801625.5483684004,-529044.1384682457,5077000.760895827,-20.976,11.069,0.0,136,137
+L69,3801622.8637353466,-529044.6121483854,5077002.715473657,-21.127,14.42,0.0,138,139
+L70,3801632.989433533,-529026.9125051505,5076997.050345714,-4.562,1.248,0.0,140,141
+L71,3801617.225129998,-529024.3718640828,5077009.098633851,-0.099,20.747,0.0,142,143
+L72,3801643.2889520545,-529026.9469614587,5076989.353028585,-5.844,-11.546,0.0,144,145
+L73,3801634.583043351,-529005.2576602624,5076998.182865744,17.012,-1.4569999999999999,0.0,146,147
+L74,3801645.314081931,-529012.8785635096,5076989.349405455,8.052,-14.533,0.0,148,149
+L75,3801640.2797297854,-528994.4497167781,5076995.086881522,27.186,-8.895999999999999,0.0,150,151
+L76,3801630.091682903,-529030.8570194659,5076998.791801457,-8.176,4.9799999999999995,0.0,152,153
+L77,3801643.247825172,-529033.1846358575,5076988.714630846,-12.109,-11.286,0.0,154,155
+L78,3801616.8427475425,-529032.0742813692,5077008.558026228,-7.795,21.48,0.0,156,157
+L79,3801619.0118177617,-529006.7139346995,5077009.658175388,17.434,17.936,0.0,158,159
+L80,3801622.843729028,-529012.9067811779,5077006.131471751,10.745,13.383000000000001,0.0,160,161
+L81,3801641.362598874,-529001.7427988423,5076993.495657609,19.724,-9.997,0.0,162,163
+L82,3801629.8209644263,-529008.692600873,5077001.371615393,14.136,4.574,0.0,164,165
+L83,3801630.16127925,-529023.5255621256,5076999.526263583,-0.815,4.648,0.0,166,167
+L84,3801648.185065934,-529040.3077985601,5076984.26246331,-19.867,-17.181,0.0,168,169
+L85,3801637.588545676,-529024.3298869116,5076993.891901235,-2.523,-4.5520000000000005,0.0,170,171
+L86,3801658.2540483866,-529010.3823445776,5076979.951171356,8.994,-30.692,0.0,172,173
+L87,3801651.2431713324,-529014.3041136618,5076984.767524768,5.901,-21.851000000000003,0.0,174,175
+L88,3801626.370404906,-529018.7354804414,5077002.871837701,4.459,9.197000000000001,0.0,176,177
+L89,3801617.588968538,-528999.3205468256,5077011.514120386,25.038,19.456,0.0,178,179
+L90,3801625.8831722927,-529027.2961509313,5077002.317486599,-4.087,10.089,0.0,180,181
+L91,3801633.6222211765,-529049.3695582533,5076994.168679228,-27.212,1.214,0.0,182,183
+L92,3801624.322130732,-529001.8480093864,5077006.2134038415,21.682,11.176,0.0,184,185
+L93,3801632.9233061285,-529030.3715982911,5076996.728683139,-8.031,1.446,0.0,186,187
+L94,3801634.63390296,-529035.569508233,5076994.893304237,-13.463,-0.5049999999999999,0.0,188,189
+L95,3801635.899248073,-529009.1729775316,5076996.7796776565,12.917,-2.961,0.0,190,191
+H0,3801681.2713465034,-528961.2634374993,5076968.379507404,24.531893880573303,12.935160792914209,0.0,0,1
+H1,3801685.368407111,-528960.2337331506,5076965.433457789,25.070893880573305,7.813160792914207,0.0,2,3
+H2,3801689.4654934374,-528959.2050202669,5076962.487280361,25.6088938805733,2.6911607929142076,0.0,4,5
+H3,3801693.561777163,-528958.1764040845,5076959.541691559,26.1468938805733,-2.4298392070857924,0.0,6,7
+H4,3801697.6588377706,-528957.146699736,5076956.595641945,26.685893880573303,-7.551839207085792,0.0,8,9
+H5,3801677.738595455,-528967.3183109143,5076970.353758391,18.871893880573303,17.518160792914205,0.0,10,11
+H6,3801681.8348534615,-528966.2887032672,5076967.408297402,19.410893880573305,12.397160792914208,0.0,12,13
+H7,3801685.931939788,-528965.2599903834,5076964.462119974,19.948893880573305,7.275160792914208,0.0,14,15
+H8,3801690.029026115,-528964.2312774997,5076961.515942547,20.4868938805733,2.1531607929142074,0.0,16,17
+H9,3801694.126086722,-528963.2015731512,5076958.569892932,21.025893880573303,-2.9688392070857925,0.0,18,19
+H10,3801698.2223704476,-528962.1729569688,5076955.62430413,21.563893880573303,-8.089839207085792,0.0,20,21
+H11,3801702.3194567743,-528961.1442440851,5076952.678126702,22.101893880573304,-13.211839207085792,0.0,22,23
+H12,3801674.2050418057,-528973.3732810309,5076972.328598003,13.211893880573303,22.102160792914205,0.0,24,25
+H13,3801678.302102413,-528972.3435766824,5076969.382548388,13.750893880573303,16.980160792914205,0.0,26,27
+H14,3801682.3991887397,-528971.3148637986,5076966.43637096,14.288893880573303,11.858160792914209,0.0,28,29
+H15,3801686.495472465,-528970.2862476163,5076963.490782158,14.826893880573303,6.737160792914207,0.0,30,31
+H16,3801690.592558792,-528969.2575347325,5076960.544604731,15.364893880573304,1.6151607929142078,0.0,32,33
+H17,3801694.689619399,-528968.2278303839,5076957.598555116,15.903893880573303,-3.5068392070857923,0.0,34,35
+H18,3801698.786705726,-528967.1991175001,5076954.652377688,16.441893880573303,-8.628839207085791,0.0,36,37
+H19,3801702.8837920525,-528966.1704046164,5076951.706200261,16.979893880573304,-13.750839207085791,0.0,38,39
+H20,3801706.9800500586,-528965.1407969693,5076948.7607392715,17.518893880573305,-18.87183920708579,0.0,40,41
+H21,3801670.6722907573,-528979.428154446,5076974.302848989,7.551893880573303,26.685160792914207,0.0,42,43
+H22,3801674.7685744828,-528978.3995382637,5076971.357260187,8.089893880573303,21.56416079291421,0.0,44,45
+H23,3801678.86563509,-528977.3698339151,5076968.411210572,8.628893880573303,16.442160792914205,0.0,46,47
+H24,3801682.9627214167,-528976.3411210313,5076965.465033145,9.166893880573303,11.320160792914209,0.0,48,49
+H25,3801687.0598077434,-528975.3124081476,5076962.518855717,9.704893880573303,6.198160792914208,0.0,50,51
+H26,3801691.1568683507,-528974.282703799,5076959.572806102,10.243893880573303,1.0761607929142076,0.0,52,53
+H27,3801695.253152076,-528973.2540876167,5076956.6272173,10.781893880573303,-4.044839207085793,0.0,54,55
+H28,3801699.350238403,-528972.2253747329,5076953.681039873,11.319893880573304,-9.166839207085792,0.0,56,57
+H29,3801703.4472990106,-528971.1956703843,5076950.734990258,11.858893880573303,-14.288839207085791,0.0,58,59
+H30,3801707.544385337,-528970.1669575006,5076947.78881283,12.396893880573304,-19.410839207085793,0.0,60,61
+H31,3801711.6406690623,-528969.1383413182,5076944.843224028,12.934893880573304,-24.531839207085792,0.0,62,63
+H32,3801671.2358234343,-528984.4544116787,5076973.331511173,2.429893880573304,26.147160792914207,0.0,64,65
+H33,3801675.332884042,-528983.4247073302,5076970.385461559,2.9688938805733036,21.025160792914207,0.0,66,67
+H34,3801679.4291677675,-528982.3960911479,5076967.439872757,3.506893880573304,15.904160792914208,0.0,68,69
+H35,3801683.5262540937,-528981.3673782641,5076964.493695329,4.044893880573303,10.782160792914208,0.0,70,71
+H36,3801687.6233147015,-528980.3376739156,5076961.547645714,4.583893880573304,5.6601607929142075,0.0,72,73
+H37,3801691.720401028,-528979.3089610318,5076958.6014682865,5.121893880573303,0.5381607929142076,0.0,74,75
+H38,3801695.8174873544,-528978.280248148,5076955.655290859,5.6598938805733034,-4.583839207085792,0.0,76,77
+H39,3801699.913745361,-528977.2506405009,5076952.70982987,6.198893880573303,-9.704839207085792,0.0,78,79
+H40,3801704.0108316876,-528976.2219276171,5076949.763652442,6.736893880573303,-14.826839207085792,0.0,80,81
+H41,3801708.1079180143,-528975.1932147334,5076946.817475014,7.274893880573304,-19.948839207085793,0.0,82,83
+H42,3801712.2049786216,-528974.1635103849,5076943.8714254,7.813893880573303,-25.070839207085793,0.0,84,85
+H43,3801671.7993561113,-528989.4806689116,5076972.360173359,-2.6921061194266964,25.609160792914206,0.0,86,87
+H44,3801675.896416719,-528988.450964563,5076969.414123744,-2.1531061194266967,20.487160792914207,0.0,88,89
+H45,3801679.9935030458,-528987.4222516792,5076966.467946316,-1.6151061194266965,15.365160792914208,0.0,90,91
+H46,3801684.090589372,-528986.3935387954,5076963.521768888,-1.0771061194266962,10.243160792914209,0.0,92,93
+H47,3801688.1868473785,-528985.3639311483,5076960.576307899,-0.5381061194266965,5.122160792914207,0.0,94,95
+H48,3801696.381020032,-528983.3065053808,5076954.683953044,0.5378938805733036,-5.1218392070857925,0.0,96,97
+H49,3801700.478080639,-528982.2768010322,5076951.737903429,1.0768938805733037,-10.243839207085792,0.0,98,99
+H50,3801704.575166966,-528981.2480881484,5076948.791726002,1.6148938805733037,-15.365839207085791,0.0,100,101
+H51,3801708.6714506913,-528980.2194719661,5076945.8461372,2.1528938805733038,-20.486839207085794,0.0,102,103
+H52,3801712.7685112986,-528979.1897676176,5076942.900087585,2.6918938805733035,-25.608839207085794,0.0,104,105
+H53,3801672.3636656706,-528994.5058379781,5076971.38837473,-7.813106119426697,25.070160792914205,0.0,106,107
+H54,3801676.459949396,-528993.4772217958,5076968.442785928,-7.275106119426697,19.949160792914206,0.0,108,109
+H55,3801680.557035723,-528992.448508912,5076965.4966085,-6.737106119426697,14.827160792914208,0.0,110,111
+H56,3801684.65409633,-528991.4188045635,5076962.550558886,-6.198106119426697,9.705160792914208,0.0,112,113
+H57,3801688.7511826567,-528990.3900916796,5076959.604381458,-5.660106119426697,4.5831607929142075,0.0,114,115
+H58,3801692.847466382,-528989.3614754974,5076956.658792656,-5.122106119426697,-0.5378392070857925,0.0,116,117
+H59,3801696.9445269895,-528988.3317711488,5076953.712743041,-4.583106119426697,-5.659839207085793,0.0,118,119
+H60,3801701.041613316,-528987.303058265,5076950.766565613,-4.045106119426697,-10.781839207085792,0.0,120,121
+H61,3801705.138699643,-528986.2743453813,5076947.820388186,-3.507106119426696,-15.90383920708579,0.0,122,123
+H62,3801709.23576025,-528985.2446410327,5076944.874338571,-2.968106119426696,-21.025839207085795,0.0,124,125
+H63,3801713.3320439756,-528984.2160248504,5076941.928749769,-2.430106119426696,-26.146839207085794,0.0,126,127
+H64,3801672.9271983476,-528999.5320952109,5076970.417036914,-12.935106119426697,24.53216079291421,0.0,128,129
+H65,3801677.0242846743,-528998.5033823272,5076967.470859487,-12.397106119426697,19.410160792914205,0.0,130,131
+H66,3801681.120542681,-528997.4737746799,5076964.5253984975,-11.858106119426697,14.289160792914208,0.0,132,133
+H67,3801685.217629007,-528996.4450617962,5076961.57922107,-11.320106119426697,9.167160792914208,0.0,134,135
+H68,3801689.3147153337,-528995.4163489124,5076958.633043642,-10.782106119426697,4.045160792914207,0.0,136,137
+H69,3801693.4117759415,-528994.3866445639,5076955.686994027,-10.243106119426697,-1.0768392070857924,0.0,138,139
+H70,3801697.5088622677,-528993.3579316802,5076952.7408166,-9.705106119426697,-6.1988392070857925,0.0,140,141
+H71,3801701.605145993,-528992.3293154978,5076949.795227798,-9.167106119426697,-11.319839207085792,0.0,142,143
+H72,3801705.70223232,-528991.3006026141,5076946.84905037,-8.629106119426696,-16.441839207085792,0.0,144,145
+H73,3801709.7992929276,-528990.2708982654,5076943.903000755,-8.090106119426697,-21.563839207085792,0.0,146,147
+H74,3801713.896379254,-528989.2421853817,5076940.956823328,-7.552106119426696,-26.68583920708579,0.0,148,149
+H75,3801677.5878173513,-529003.5296395599,5076966.499521671,-17.519106119426695,18.872160792914208,0.0,150,151
+H76,3801681.684877959,-529002.4999352113,5076963.553472056,-16.980106119426697,13.750160792914208,0.0,152,153
+H77,3801685.7819642853,-529001.4712223276,5076960.607294628,-16.442106119426697,8.628160792914208,0.0,154,155
+H78,3801689.8782480108,-529000.4426061452,5076957.661705826,-15.904106119426697,3.5071607929142075,0.0,156,157
+H79,3801693.9753086185,-528999.4129017966,5076954.715656212,-15.365106119426695,-1.6148392070857922,0.0,158,159
+H80,3801698.072394945,-528998.3841889129,5076951.769478784,-14.827106119426698,-6.736839207085793,0.0,160,161
+H81,3801702.1694812714,-528997.3554760291,5076948.823301356,-14.289106119426698,-11.858839207085792,0.0,162,163
+H82,3801706.265739278,-528996.325868382,5076945.877840367,-13.750106119426697,-16.979839207085792,0.0,164,165
+H83,3801710.3628256046,-528995.2971554983,5076942.9316629395,-13.212106119426696,-22.101839207085792,0.0,166,167
+H84,3801682.248410636,-529007.5261924441,5076962.582134241,-22.102106119426697,13.212160792914208,0.0,168,169
+H85,3801686.345496963,-529006.4974795603,5076959.635956814,-21.564106119426697,8.090160792914208,0.0,170,171
+H86,3801690.44255757,-529005.4677752118,5076956.689907199,-21.025106119426695,2.9681607929142073,0.0,172,173
+H87,3801694.5388412955,-529004.4391590294,5076953.744318397,-20.487106119426695,-2.1528392070857927,0.0,174,175
+H88,3801698.635927622,-529003.4104461457,5076950.798140969,-19.9491061194267,-7.274839207085792,0.0,176,177
+H89,3801702.7329882295,-529002.3807417972,5076947.852091354,-19.410106119426697,-12.396839207085792,0.0,178,179
+H90,3801706.830074556,-529001.3520289133,5076944.905913927,-18.872106119426697,-17.518839207085794,0.0,180,181
+H91,3801686.9090039204,-529011.5227453284,5076958.664746811,-26.685106119426695,7.552160792914208,0.0,182,183
+H92,3801691.006090247,-529010.4940324445,5076955.718569383,-26.147106119426695,2.4301607929142075,0.0,184,185
+H93,3801695.1031765738,-529009.4653195607,5076952.772391955,-25.6091061194267,-2.6918392070857924,0.0,186,187
+H94,3801699.2002629004,-529008.436606677,5076949.826214528,-25.071106119426698,-7.813839207085793,0.0,188,189
+H95,3801703.2965209065,-529007.4069990299,5076946.880753539,-24.532106119426697,-12.934839207085792,0.0,190,191
+CLBA,3801633.868807419,-529022.2680597045,5076996.8916760385,0.0,0.0,0.0,-1,-1
+CHBA,3801692.2840600284,-528984.335097502,5076957.630049388,0.0,0.0,0.0,-1,-1
diff --git a/MAC/Deployment/data/PVSS/License/Astron_Central_1_shield.txt b/MAC/Deployment/data/PVSS/License/Astron_Central_1_shield.txt
index 4e48ae8a235b81daf1da64e8eb091fe08889d077..a1c5a1625f3fbf6835ba1c94db32e190a9a7dfd8 100644
--- a/MAC/Deployment/data/PVSS/License/Astron_Central_1_shield.txt
+++ b/MAC/Deployment/data/PVSS/License/Astron_Central_1_shield.txt
@@ -1,7 +1,7 @@
 [license]
-code        = "dongleHost 50041954877"
+code        = "dongleHost 90272035228"
 version     = 31600002
-sn          = "471_3031_Astron_Central_5"
+sn          = "471_3031_Astron_Central_5_2"
 expire      = 0000.00.00;00:00:00,000 
 redundancy  = 1
 ui          = 14
@@ -12,14 +12,14 @@ ios         = 100000
 ssi         = 0
 api         = 80
 excelreport = 5
-http        = 15
+http        = 19
 infoserver  = 5000
 comcenter   = 5
 maintenance = 0
 scheduler   = 0
 s7          = 1
 distributed = 255
-ultralight  = 1
+ultralight  = 5
 mobile_app  = 1
 s7plus      = 8
 uifix       = 0
diff --git a/MAC/Deployment/data/PVSS/License/Central.rtu b/MAC/Deployment/data/PVSS/License/Central.rtu
index d3124d6880d4d249570c8a4106e74ea1f6c50a2a..0a0f602e98092a6361e4808eeba49b79af6bb541 100644
--- a/MAC/Deployment/data/PVSS/License/Central.rtu
+++ b/MAC/Deployment/data/PVSS/License/Central.rtu
@@ -5,5 +5,5 @@ Version=1.00
 
 [Contents]
 ; 1 command for WIBU-BOX with Serial Number 9-5510484:
-N5qGR 010NG NNNGq KNNNs qRZA7 ZBB0w
-Z9Chs ZN
+N5qGR 010NG NNNGq KNNNh 2B3qM y324w
+5FTGN M0
diff --git a/MAC/Deployment/data/PVSS/License/Readme.txt b/MAC/Deployment/data/PVSS/License/Readme.txt
index ee6bfc7fd8fa6a7d720c9742bb9731f5c00c5396..0242960de84860f735a9d563e70cbfbe96357afe 100644
--- a/MAC/Deployment/data/PVSS/License/Readme.txt
+++ b/MAC/Deployment/data/PVSS/License/Readme.txt
@@ -1,3 +1,3 @@
 Example command:
 
-WCCILtoolLicense.exe -shield Astron_Station_1_shield.txt CCU001_option.txt > shield.CCU001.txt
\ No newline at end of file
+WCCILtoolLicense.exe -shield Astron_Central_1_shield.txt wop64-Apertif-3_16_option.txt > shield.wop64.txt
\ No newline at end of file
diff --git a/MAC/Deployment/data/PVSS/License/shield.wop57.txt b/MAC/Deployment/data/PVSS/License/shield.wop57.txt
index aa323f9838180ad839f37d14b72e4a444d910c1c..555bf7a3e8b4b1d9f0355c511535b4dc7fd0d947 100644
--- a/MAC/Deployment/data/PVSS/License/shield.wop57.txt
+++ b/MAC/Deployment/data/PVSS/License/shield.wop57.txt
@@ -1,12 +1,12 @@
 [license]
-code        = "wop57 30058163466"
-version     = 31500002
-sn          = "471_3031_Astron_Central_4/1"
-date        = 2017.10.17;11:40:54,000 
+code        = "wop57 90176756269"
+version     = 31600002
+sn          = "471_3031_Astron_Central_5_2/2"
+date        = 2019.04.09;09:01:16,000 
 comment     = "MCU.Apertif Central system"
 expire      = 0000.00.00;00:00:00,000 
 redundancy  = 1
-ui          = 15
+ui          = 14
 para        = 4
 dde         = 5
 event       = 1
@@ -14,13 +14,14 @@ ios         = 100000
 ssi         = 0
 api         = 80
 excelreport = 5
-http        = 15
+http        = 19
 infoserver  = 5000
 comcenter   = 5
 maintenance = 0
 scheduler   = 0
 s7          = 1
 distributed = 255
+ultralight  = 5
 mobile_app  = 1
 s7plus      = 8
 uifix       = 0
diff --git a/MAC/Deployment/data/PVSS/License/shield.wop64.txt b/MAC/Deployment/data/PVSS/License/shield.wop64.txt
index 6e5b5256084492858f63aca00e79b3a44fec2358..356731e8b87d10bf462ad55d12bbd8cc2e705d57 100644
--- a/MAC/Deployment/data/PVSS/License/shield.wop64.txt
+++ b/MAC/Deployment/data/PVSS/License/shield.wop64.txt
@@ -1,12 +1,12 @@
 [license]
-code        = "wop64 40504776762"
-version     = 31500002
-sn          = "471_3031_Astron_Central_4/2"
-date        = 2017.10.17;11:57:15,000 
+code        = "wop64 00174848251"
+version     = 31600002
+sn          = "471_3031_Astron_Central_5_2/1"
+date        = 2019.04.09;09:00:55,000 
 comment     = "Test MCU.Apertif Central system"
 expire      = 0000.00.00;00:00:00,000 
 redundancy  = 1
-ui          = 15
+ui          = 14
 para        = 4
 dde         = 5
 event       = 1
@@ -14,13 +14,14 @@ ios         = 100000
 ssi         = 0
 api         = 80
 excelreport = 5
-http        = 15
+http        = 19
 infoserver  = 5000
 comcenter   = 5
 maintenance = 0
 scheduler   = 0
 s7          = 1
 distributed = 255
+ultralight  = 5
 mobile_app  = 1
 s7plus      = 8
 uifix       = 0
diff --git a/MAC/Deployment/data/PVSS/License/wop57-Apertif-3_16_option.txt b/MAC/Deployment/data/PVSS/License/wop57-Apertif-3_16_option.txt
index 76f71c04ce8c03d85afae7926373e1f96f3cb4c1..1dbc5c6327bf7415c538683d0bfdac6958c255cb 100644
--- a/MAC/Deployment/data/PVSS/License/wop57-Apertif-3_16_option.txt
+++ b/MAC/Deployment/data/PVSS/License/wop57-Apertif-3_16_option.txt
@@ -11,7 +11,7 @@ dde               = 5
 event             = 1
 api               = 80
 excelreport       = 5
-http              = 15
+http              = 19
 infoserver        = 5000
 ios               = 100000
 comcenter         = 5
@@ -20,7 +20,7 @@ scheduler         = 0
 ssi               = 0
 s7                = 1
 distributed       = 255
-ultralight        = 1
+ultralight        = 5
 mobile_app        = 1
 s7plus            = 8
 uifix             = 0
diff --git a/MAC/Deployment/data/PVSS/License/wop64-Apertif-3_16_option.txt b/MAC/Deployment/data/PVSS/License/wop64-Apertif-3_16_option.txt
index 146a8a63554427572ff9e32661b7135f23b53b49..41f4a225f8cef35d1173a9e89842b4f4e2b67547 100644
--- a/MAC/Deployment/data/PVSS/License/wop64-Apertif-3_16_option.txt
+++ b/MAC/Deployment/data/PVSS/License/wop64-Apertif-3_16_option.txt
@@ -11,7 +11,7 @@ dde               = 5
 event             = 1
 api               = 80
 excelreport       = 5
-http              = 15
+http              = 19
 infoserver        = 5000
 ios               = 100000
 comcenter         = 5
@@ -20,7 +20,7 @@ scheduler         = 0
 ssi               = 0
 s7                = 1
 distributed       = 255
-ultralight        = 1
+ultralight        = 5
 mobile_app        = 1
 s7plus            = 8
 uifix             = 0
diff --git a/MAC/Deployment/data/StaticMetaData/COBALT2_IP_MACs.txt b/MAC/Deployment/data/StaticMetaData/COBALT2_IP_MACs.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3bcd502bed1a3b829c1e4e36af34fd49510839a3
--- /dev/null
+++ b/MAC/Deployment/data/StaticMetaData/COBALT2_IP_MACs.txt
@@ -0,0 +1,95 @@
+# List of MAC addresses of 10GbE COBALT2 interfaces.
+#
+# Used to manually construct tables connecting stations to COBALT2.
+
+cbt201-10GB01.online.lofar 10.168.160.1 E4:43:4B:3D:89:81
+cbt201-10GB02.online.lofar 10.168.160.2 E4:43:4B:3D:89:82
+cbt201-10GB03.online.lofar 10.168.160.3 E4:43:4B:3D:89:83
+cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
+cbt201-10GB05.online.lofar 10.168.160.5 F8:F2:1E:40:D9:31
+cbt201-10GB06.online.lofar 10.168.160.6 F8:F2:1E:40:D9:32
+cbt201-10GB07.online.lofar 10.168.160.7 F8:F2:1E:40:D9:33
+cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
+cbt202-10GB02.online.lofar 10.168.161.2 E4:43:4B:3E:5E:92
+cbt202-10GB03.online.lofar 10.168.161.3 E4:43:4B:3E:5E:93
+cbt202-10GB04.online.lofar 10.168.161.4 3C:FD:FE:07:FD:A0
+cbt202-10GB05.online.lofar 10.168.161.5 3C:FD:FE:07:FD:A2
+cbt202-10GB06.online.lofar 10.168.161.6 3C:FD:FE:07:FD:A4
+cbt202-10GB07.online.lofar 10.168.161.7 3C:FD:FE:07:FD:A6
+cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
+cbt203-10GB02.online.lofar 10.168.162.2 E4:43:4B:3D:86:E2
+cbt203-10GB03.online.lofar 10.168.162.3 E4:43:4B:3D:86:E3
+cbt203-10GB04.online.lofar 10.168.162.4 F8:F2:1E:40:DA:50
+cbt203-10GB05.online.lofar 10.168.162.5 F8:F2:1E:40:DA:51
+cbt203-10GB06.online.lofar 10.168.162.6 F8:F2:1E:40:DA:52
+cbt203-10GB07.online.lofar 10.168.162.7 F8:F2:1E:40:DA:53
+cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
+cbt204-10GB02.online.lofar 10.168.163.2 E4:43:4B:3E:A1:92
+cbt204-10GB03.online.lofar 10.168.163.3 E4:43:4B:3E:A1:93
+cbt204-10GB04.online.lofar 10.168.163.4 F8:F2:1E:42:38:50
+cbt204-10GB05.online.lofar 10.168.163.5 F8:F2:1E:42:38:51
+cbt204-10GB06.online.lofar 10.168.163.6 F8:F2:1E:42:38:52
+cbt204-10GB07.online.lofar 10.168.163.7 F8:F2:1E:42:38:53
+cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
+cbt205-10GB02.online.lofar 10.168.164.2 E4:43:4B:3D:C4:02
+cbt205-10GB03.online.lofar 10.168.164.3 E4:43:4B:3D:C4:03
+cbt205-10GB04.online.lofar 10.168.164.4 F8:F2:1E:40:CC:10
+cbt205-10GB05.online.lofar 10.168.164.5 F8:F2:1E:40:CC:11
+cbt205-10GB06.online.lofar 10.168.164.6 F8:F2:1E:40:CC:12
+cbt205-10GB07.online.lofar 10.168.164.7 F8:F2:1E:40:CC:13
+cbt206-10GB01.online.lofar 10.168.165.1 E4:43:4B:3E:5D:A1
+cbt206-10GB02.online.lofar 10.168.165.2 E4:43:4B:3E:5D:A2
+cbt206-10GB03.online.lofar 10.168.165.3 E4:43:4B:3E:5D:A3
+cbt206-10GB04.online.lofar 10.168.165.4 F8:F2:1E:42:31:10
+cbt206-10GB05.online.lofar 10.168.165.5 F8:F2:1E:42:31:11
+cbt206-10GB06.online.lofar 10.168.165.6 F8:F2:1E:42:31:12
+cbt206-10GB07.online.lofar 10.168.165.7 F8:F2:1E:42:31:13
+cbt207-10GB01.online.lofar 10.168.166.1 E4:43:4B:3E:93:51
+cbt207-10GB02.online.lofar 10.168.166.2 E4:43:4B:3E:93:52
+cbt207-10GB03.online.lofar 10.168.166.3 E4:43:4B:3E:93:53
+cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
+cbt207-10GB05.online.lofar 10.168.166.5 F8:F2:1E:42:2F:81
+cbt207-10GB06.online.lofar 10.168.166.6 F8:F2:1E:42:2F:82
+cbt207-10GB07.online.lofar 10.168.166.7 F8:F2:1E:42:2F:83
+cbt208-10GB01.online.lofar 10.168.167.1 E4:43:4B:3E:94:11
+cbt208-10GB02.online.lofar 10.168.167.2 E4:43:4B:3E:94:12
+cbt208-10GB03.online.lofar 10.168.167.3 E4:43:4B:3E:94:13
+cbt208-10GB04.online.lofar 10.168.167.4 F8:F2:1E:42:34:B0
+cbt208-10GB05.online.lofar 10.168.167.5 F8:F2:1E:42:34:B1
+cbt208-10GB06.online.lofar 10.168.167.6 F8:F2:1E:42:34:B2
+cbt208-10GB07.online.lofar 10.168.167.7 F8:F2:1E:42:34:B3
+cbt209-10GB01.online.lofar 10.168.168.1 E4:43:4B:3E:5F:61
+cbt209-10GB02.online.lofar 10.168.168.2 E4:43:4B:3E:5F:62
+cbt209-10GB03.online.lofar 10.168.168.3 E4:43:4B:3E:5F:63
+cbt209-10GB04.online.lofar 10.168.168.4 F8:F2:1E:42:30:E0
+cbt209-10GB05.online.lofar 10.168.168.5 F8:F2:1E:42:30:E1
+cbt209-10GB06.online.lofar 10.168.168.6 F8:F2:1E:42:30:E2
+cbt209-10GB07.online.lofar 10.168.168.7 F8:F2:1E:42:30:E3
+cbt210-10GB01.online.lofar 10.168.169.1 E4:43:4B:3E:A2:21
+cbt210-10GB02.online.lofar 10.168.169.2 E4:43:4B:3E:A2:22
+cbt210-10GB03.online.lofar 10.168.169.3 E4:43:4B:3E:A2:23
+cbt210-10GB04.online.lofar 10.168.169.4 F8:F2:1E:42:2F:30
+cbt210-10GB05.online.lofar 10.168.169.5 F8:F2:1E:42:2F:31
+cbt210-10GB06.online.lofar 10.168.169.6 F8:F2:1E:42:2F:32
+cbt210-10GB07.online.lofar 10.168.169.7 F8:F2:1E:42:2F:33
+cbt211-10GB01.online.lofar 10.168.170.1 E4:43:4B:3E:91:81
+cbt211-10GB02.online.lofar 10.168.170.2 E4:43:4B:3E:91:82
+cbt211-10GB03.online.lofar 10.168.170.3 E4:43:4B:3E:91:83
+cbt211-10GB04.online.lofar 10.168.170.4 F8:F2:1E:42:39:70
+cbt211-10GB05.online.lofar 10.168.170.5 F8:F2:1E:42:39:71
+cbt211-10GB06.online.lofar 10.168.170.6 F8:F2:1E:42:39:72
+cbt211-10GB07.online.lofar 10.168.170.7 F8:F2:1E:42:39:73
+cbt212-10GB01.online.lofar 10.168.171.1 E4:43:4B:3E:A1:A1
+cbt212-10GB02.online.lofar 10.168.171.2 E4:43:4B:3E:A1:A2
+cbt212-10GB03.online.lofar 10.168.171.3 E4:43:4B:3E:A1:A3
+cbt212-10GB04.online.lofar 10.168.171.4 F8:F2:1E:42:2C:C0
+cbt212-10GB05.online.lofar 10.168.171.5 F8:F2:1E:42:2C:C1
+cbt212-10GB06.online.lofar 10.168.171.6 F8:F2:1E:42:2C:C2
+cbt212-10GB07.online.lofar 10.168.171.7 F8:F2:1E:42:2C:C3
+cbt213-10GB01.online.lofar 10.168.172.1 E4:43:4B:3E:A0:E1
+cbt213-10GB02.online.lofar 10.168.172.2 E4:43:4B:3E:A0:E2
+cbt213-10GB03.online.lofar 10.168.172.3 E4:43:4B:3E:A0:E3
+cbt213-10GB04.online.lofar 10.168.172.4 F8:F2:1E:42:2E:80
+cbt213-10GB05.online.lofar 10.168.172.5 F8:F2:1E:42:2E:81
+cbt213-10GB06.online.lofar 10.168.172.6 F8:F2:1E:42:2E:82
+cbt213-10GB07.online.lofar 10.168.172.7 F8:F2:1E:42:2E:83
diff --git a/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt.dat b/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt.dat
index 5ac07ccb90c4183302f0e023deeae056f92a5599..6d3d5964a8a134dbfc64653d8b45d6d17efe0013 100644
--- a/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt.dat
+++ b/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt.dat
@@ -21,163 +21,153 @@
 #
 # The network configuration is as follows:
 #
-# RD1 -> cbt001
-# RD1 -> cbt002
-# RD0 -> cbt003
-# RD0 -> cbt004
-# RD0 -> cbt005
-# RD1 -> cbt006
-# RD1 -> cbt007
-# RD0 -> cbt008
-# RD0 -> cbt009
-# RD1 -> cbt010
-
-CS001 RSP_0 cbt007-10GB01 10.168.102.1 A0:36:9F:1F:79:04
-CS001 RSP_1 cbt007-10GB01 10.168.102.1 A0:36:9F:1F:79:04
-
-CS002 RSP_0 cbt003-10GB01 10.168.98.1 A0:36:9F:1F:78:0C
-CS002 RSP_1 cbt003-10GB01 10.168.98.1 A0:36:9F:1F:78:0C
-
-CS003 RSP_0 cbt005-10GB01 10.168.100.1 A0:36:9F:1F:7B:74
-CS003 RSP_1 cbt005-10GB01 10.168.100.1 A0:36:9F:1F:7B:74
+# RD0 -> cbt207 ... cbt213
+# RD1 -> cbt201 ... cbt206
+#
+# NOTES:
+# - This is a mapping for COMMISSIONING
 
-CS004 RSP_0 cbt008-10GB01 10.168.103.1 A0:36:9F:1F:7B:68
-CS004 RSP_1 cbt008-10GB01 10.168.103.1 A0:36:9F:1F:7B:68
+CS002 RSP_0 cbt207-10GB01.online.lofar 10.168.166.1 E4:43:4B:3E:93:51
+CS002 RSP_1 cbt207-10GB01.online.lofar 10.168.166.1 E4:43:4B:3E:93:51
 
-CS005 RSP_0 cbt001-10GB01 10.168.96.1 A0:36:9F:1F:78:A4
-CS005 RSP_1 cbt001-10GB01 10.168.96.1 A0:36:9F:1F:78:A4
+CS026 RSP_0 cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
+CS026 RSP_1 cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
 
-CS006 RSP_0 cbt004-10GB01 10.168.99.1 A0:36:9F:1F:79:94
-CS006 RSP_1 cbt004-10GB01 10.168.99.1 A0:36:9F:1F:79:94
+CS302 RSP_0 cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
+CS302 RSP_1 cbt207-10GB06.online.lofar 10.168.166.6 F8:F2:1E:42:2F:82
 
-CS007 RSP_0 cbt006-10GB01 10.168.101.1 A0:36:9F:1F:79:A4
-CS007 RSP_1 cbt006-10GB01 10.168.101.1 A0:36:9F:1F:79:A4
+DE602 RSP_0 cbt207-10GB06.online.lofar 10.200.41.207 F8:F2:1E:42:2F:82
 
-CS011 RSP_0 cbt003-10GB02 10.168.98.2 A0:36:9F:1F:78:0E
-CS011 RSP_1 cbt003-10GB02 10.168.98.2 A0:36:9F:1F:78:0E
+FR606 RSP_0 cbt207-10GB06.online.lofar 10.211.1.207 F8:F2:1E:42:2F:82
+FR606 RSP_0 cbt207-10GB06.online.lofar 10.212.1.207 F8:F2:1E:42:2F:82
+FR606 RSP_0 cbt207-10GB06.online.lofar 10.213.1.207 F8:F2:1E:42:2F:82
+FR606 RSP_0 cbt207-10GB06.online.lofar 10.214.1.207 F8:F2:1E:42:2F:82
 
-CS013 RSP_0 cbt005-10GB02 10.168.100.2 A0:36:9F:1F:7B:76
-CS013 RSP_1 cbt005-10GB02 10.168.100.2 A0:36:9F:1F:7B:76
+CS003 RSP_0 cbt208-10GB01.online.lofar 10.168.167.1 E4:43:4B:3E:94:11
+CS003 RSP_1 cbt208-10GB01.online.lofar 10.168.167.1 E4:43:4B:3E:94:11
 
-CS017 RSP_0 cbt002-10GB01 10.168.97.1 A0:36:9F:1F:73:40
-CS017 RSP_1 cbt002-10GB01 10.168.97.1 A0:36:9F:1F:73:40
+CS028 RSP_0 cbt208-10GB04.online.lofar 10.168.167.4 F8:F2:1E:42:34:B0
+CS028 RSP_1 cbt208-10GB04.online.lofar 10.168.167.4 F8:F2:1E:42:34:B0
 
-CS021 RSP_0 cbt001-10GB02 10.168.96.2 A0:36:9F:1F:78:A6
-CS021 RSP_1 cbt001-10GB02 10.168.96.2 A0:36:9F:1F:78:A6
+PL610 RSP_0 cbt208-10GB06.online.lofar 10.220.11.208 F8:F2:1E:42:34:B2
 
-CS024 RSP_0 cbt007-10GB02 10.168.102.2 A0:36:9F:1F:79:06
-CS024 RSP_1 cbt007-10GB02 10.168.102.2 A0:36:9F:1F:79:06
+DE601 RSP_0 cbt208-10GB06.online.lofar 10.211.1.208 F8:F2:1E:42:34:B2
+DE601 RSP_0 cbt208-10GB06.online.lofar 10.212.1.208 F8:F2:1E:42:34:B2
+DE601 RSP_0 cbt208-10GB06.online.lofar 10.213.1.208 F8:F2:1E:42:34:B2
+DE601 RSP_0 cbt208-10GB06.online.lofar 10.214.1.208 F8:F2:1E:42:34:B2
 
-CS026 RSP_0 cbt004-10GB02 10.168.99.2 A0:36:9F:1F:79:96
-CS026 RSP_1 cbt004-10GB02 10.168.99.2 A0:36:9F:1F:79:96
+RS106 RSP_0 cbt208-10GB06.online.lofar 10.168.167.6 F8:F2:1E:42:34:B2
 
-CS028 RSP_0 cbt003-10GB03 10.168.98.3 A0:36:9F:1F:7B:40
-CS028 RSP_1 cbt003-10GB03 10.168.98.3 A0:36:9F:1F:7B:40
+CS004 RSP_0 cbt209-10GB01.online.lofar 10.168.168.1 E4:43:4B:3E:5F:61
+CS004 RSP_1 cbt209-10GB01.online.lofar 10.168.168.1 E4:43:4B:3E:5F:61
 
-CS030 RSP_0 cbt006-10GB02 10.168.101.2 A0:36:9F:1F:79:A6
-CS030 RSP_1 cbt006-10GB02 10.168.101.2 A0:36:9F:1F:79:A6
+CS031 RSP_0 cbt209-10GB04.online.lofar 10.168.168.4 F8:F2:1E:42:30:E0
+CS031 RSP_1 cbt209-10GB04.online.lofar 10.168.168.4 F8:F2:1E:42:30:E0
 
-CS031 RSP_0 cbt004-10GB03 10.168.99.3 A0:36:9F:1F:7A:04
-CS031 RSP_1 cbt004-10GB03 10.168.99.3 A0:36:9F:1F:7A:04
+DE604 RSP_0 cbt209-10GB06.online.lofar 10.200.81.209 F8:F2:1E:42:30:E2
 
-CS032 RSP_0 cbt002-10GB02 10.168.97.2 A0:36:9F:1F:73:42
-CS032 RSP_1 cbt002-10GB02 10.168.97.2 A0:36:9F:1F:73:42
+SE607 RSP_0 cbt209-10GB06.online.lofar 10.211.1.209 F8:F2:1E:42:30:E2
+SE607 RSP_0 cbt209-10GB06.online.lofar 10.212.1.209 F8:F2:1E:42:30:E2
+SE607 RSP_0 cbt209-10GB06.online.lofar 10.213.1.209 F8:F2:1E:42:30:E2
+SE607 RSP_0 cbt209-10GB06.online.lofar 10.214.1.209 F8:F2:1E:42:30:E2
 
-CS101 RSP_0 cbt001-10GB03 10.168.96.3 A0:36:9F:1F:7B:44
-CS101 RSP_1 cbt001-10GB03 10.168.96.3 A0:36:9F:1F:7B:44
+RS210 RSP_0 cbt209-10GB06.online.lofar 10.168.168.6 F8:F2:1E:42:30:E2
 
-CS103 RSP_0 cbt008-10GB02 10.168.103.2 A0:36:9F:1F:7B:6A
-CS103 RSP_1 cbt008-10GB02 10.168.103.2 A0:36:9F:1F:7B:6A
+CS006 RSP_0 cbt210-10GB01.online.lofar 10.168.169.1 E4:43:4B:3E:A2:21
+CS006 RSP_1 cbt210-10GB01.online.lofar 10.168.169.1 E4:43:4B:3E:A2:21
 
-CS201 RSP_0 cbt003-10GB01 10.168.98.1 A0:36:9F:1F:78:0C
-CS201 RSP_1 cbt003-10GB02 10.168.98.2 A0:36:9F:1F:78:0E
+CS103 RSP_0 cbt210-10GB04.online.lofar 10.168.169.4 F8:F2:1E:42:2F:30
+CS103 RSP_1 cbt210-10GB04.online.lofar 10.168.169.4 F8:F2:1E:42:2F:30
 
-CS301 RSP_0 cbt005-10GB03 10.168.100.3 A0:36:9F:1F:79:E0
-CS301 RSP_1 cbt005-10GB03 10.168.100.3 A0:36:9F:1F:79:E0
+DE603 RSP_0 cbt210-10GB06.online.lofar 10.211.1.210 F8:F2:1E:42:2F:32
+DE603 RSP_0 cbt210-10GB06.online.lofar 10.212.1.210 F8:F2:1E:42:2F:32
+DE603 RSP_0 cbt210-10GB06.online.lofar 10.213.1.210 F8:F2:1E:42:2F:32
+DE603 RSP_0 cbt210-10GB06.online.lofar 10.214.1.210 F8:F2:1E:42:2F:32
 
-CS302 RSP_0 cbt004-10GB01 10.168.99.1 A0:36:9F:1F:79:94
-CS302 RSP_1 cbt004-10GB02 10.168.99.2 A0:36:9F:1F:79:96
+PL611 RSP_0 cbt210-10GB06.online.lofar 10.220.41.210 F8:F2:1E:42:2F:32
 
-CS401 RSP_0 cbt007-10GB03 10.168.102.3 A0:36:9F:1F:7B:3C
-CS401 RSP_1 cbt007-10GB03 10.168.102.3 A0:36:9F:1F:7B:3C
+RS306 RSP_0 cbt210-10GB06.online.lofar 10.168.169.6 F8:F2:1E:42:2F:32
 
-CS501 RSP_0 cbt006-10GB03 10.168.101.3 A0:36:9F:1F:7A:34
-CS501 RSP_1 cbt006-10GB03 10.168.101.3 A0:36:9F:1F:7A:34
+CS011 RSP_0 cbt211-10GB01.online.lofar 10.168.170.1 E4:43:4B:3E:91:81
+CS011 RSP_1 cbt211-10GB01.online.lofar 10.168.170.1 E4:43:4B:3E:91:81
 
-RS104 RSP_0 cbt002-10GB03 10.168.97.3 A0:36:9F:1F:79:A0
+CS201 RSP_0 cbt211-10GB04.online.lofar 10.168.170.4 F8:F2:1E:42:39:70
+CS201 RSP_1 cbt211-10GB04.online.lofar 10.168.170.4 F8:F2:1E:42:39:70
 
-RS106 RSP_0 cbt008-10GB03 10.168.103.3 A0:36:9F:1F:79:00
+DE609 RSP_0 cbt211-10GB06.online.lofar 10.200.91.211 F8:F2:1E:42:39:72
+DE609 RSP_0 cbt211-10GB06.online.lofar 10.200.92.211 F8:F2:1E:42:39:72
 
-RS205 RSP_0 cbt007-10GB04 10.168.102.4 A0:36:9F:1F:7B:3E
+UK608 RSP_0 cbt211-10GB06.online.lofar 10.211.1.211 F8:F2:1E:42:39:72
+UK608 RSP_0 cbt211-10GB06.online.lofar 10.212.1.211 F8:F2:1E:42:39:72
+UK608 RSP_0 cbt211-10GB06.online.lofar 10.213.1.211 F8:F2:1E:42:39:72
+UK608 RSP_0 cbt211-10GB06.online.lofar 10.214.1.211 F8:F2:1E:42:39:72
 
-RS208 RSP_0 cbt001-10GB04 10.168.96.4 A0:36:9F:1F:7B:46
+RS307 RSP_0 cbt211-10GB06.online.lofar 10.168.170.6 F8:F2:1E:42:39:72
 
-RS210 RSP_0 cbt005-10GB03 10.168.100.3 A0:36:9F:1F:79:E0
+CS013 RSP_0 cbt212-10GB01.online.lofar 10.168.171.1 E4:43:4B:3E:A1:A1
+CS013 RSP_1 cbt212-10GB01.online.lofar 10.168.171.1 E4:43:4B:3E:A1:A1
 
-RS305 RSP_0 cbt006-10GB04 10.168.101.4 A0:36:9F:1F:7A:36
+CS301 RSP_0 cbt212-10GB04.online.lofar 10.168.171.4 F8:F2:1E:42:2C:C0
+CS301 RSP_1 cbt212-10GB04.online.lofar 10.168.171.4 F8:F2:1E:42:2C:C0
 
-RS306 RSP_0 cbt005-10GB01 10.168.100.1 A0:36:9F:1F:7B:74
+DE605 RSP_0 cbt212-10GB06.online.lofar 10.211.1.212 F8:F2:1E:42:2C:C2
+DE605 RSP_0 cbt212-10GB06.online.lofar 10.212.1.212 F8:F2:1E:42:2C:C2
+DE605 RSP_0 cbt212-10GB06.online.lofar 10.213.1.212 F8:F2:1E:42:2C:C2
+DE605 RSP_0 cbt212-10GB06.online.lofar 10.214.1.212 F8:F2:1E:42:2C:C2
 
-RS307 RSP_0 cbt008-10GB01 10.168.103.1 A0:36:9F:1F:7B:68
+PL612 RSP_0 cbt212-10GB06.online.lofar 10.220.61.212 F8:F2:1E:42:2C:C2
 
-RS310 RSP_0 cbt002-10GB04 10.168.97.4 A0:36:9F:1F:79:A2
+RS508 RSP_0 cbt212-10GB06.online.lofar 10.168.171.6 F8:F2:1E:42:2C:C2
 
-RS406 RSP_0 cbt007-10GB03 10.168.102.3 A0:36:9F:1F:7B:3C
+CS001 RSP_0 cbt201-10GB01.online.lofar 10.168.160.1 E4:43:4B:3D:89:81
+CS001 RSP_1 cbt201-10GB01.online.lofar 10.168.160.1 E4:43:4B:3D:89:81
 
-RS407 RSP_0 cbt001-10GB04 10.168.96.4 A0:36:9F:1F:7B:46
+CS024 RSP_0 cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
+CS024 RSP_1 cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
 
-RS409 RSP_0 cbt002-10GB03 10.168.97.3 A0:36:9F:1F:79:A0
+RS406 RSP_0 cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
 
-RS410 RSP_0 cbt002-10GB04 10.168.97.4 A0:36:9F:1F:79:A2
+CS005 RSP_0 cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
+CS005 RSP_1 cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
 
-RS503 RSP_0 cbt006-10GB04 10.168.101.4 A0:36:9F:1F:7A:36
+RS205 RSP_0 cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
 
-RS508 RSP_0 cbt008-10GB03 10.168.103.3 A0:36:9F:1F:79:00
+CS501 RSP_0 cbt202-10GB04.online.lofar 10.168.161.4 3C:FD:FE:07:FD:A0
+CS501 RSP_1 cbt202-10GB04.online.lofar 10.168.161.4 3C:FD:FE:07:FD:A0
 
-RS509 RSP_0 cbt007-10GB04 10.168.102.4 A0:36:9F:1F:7B:3E
+RS407 RSP_0 cbt202-10GB04.online.lofar 10.168.161.4 3C:FD:FE:07:FD:A0
 
-DE601 RSP_0 cbt008-10GB04 10.211.1.108 A0:36:9F:1F:79:02
-DE601 RSP_0 cbt008-10GB04 10.212.1.108 A0:36:9F:1F:79:02
-DE601 RSP_0 cbt008-10GB04 10.213.1.108 A0:36:9F:1F:79:02
-DE601 RSP_0 cbt008-10GB04 10.214.1.108 A0:36:9F:1F:79:02
+CS007 RSP_0 cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
+CS007 RSP_1 cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
 
-DE602 RSP_0 cbt003-10GB04 10.200.41.103 A0:36:9F:1F:7B:42
+RS208 RSP_0 cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
 
-DE603 RSP_0 cbt004-10GB04 10.211.1.104 A0:36:9F:1F:7A:06
-DE603 RSP_0 cbt004-10GB04 10.212.1.104 A0:36:9F:1F:7A:06
-DE603 RSP_0 cbt004-10GB04 10.213.1.104 A0:36:9F:1F:7A:06
-DE603 RSP_0 cbt004-10GB04 10.214.1.104 A0:36:9F:1F:7A:06
+CS032 RSP_0 cbt203-10GB04.online.lofar 10.168.162.4 F8:F2:1E:40:DA:50
+CS032 RSP_1 cbt203-10GB04.online.lofar 10.168.162.4 F8:F2:1E:40:DA:50
 
-DE604 RSP_0 cbt003-10GB04 10.200.81.103 A0:36:9F:1F:7B:42
+RS409 RSP_0 cbt203-10GB04.online.lofar 10.168.162.4 F8:F2:1E:40:DA:50
 
-DE605 RSP_0 cbt008-10GB04 10.211.1.108 A0:36:9F:1F:79:02
-DE605 RSP_0 cbt008-10GB04 10.212.1.108 A0:36:9F:1F:79:02
-DE605 RSP_0 cbt008-10GB04 10.213.1.108 A0:36:9F:1F:79:02
-DE605 RSP_0 cbt008-10GB04 10.214.1.108 A0:36:9F:1F:79:02
+CS017 RSP_0 cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
+CS017 RSP_1 cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
 
-FR606 RSP_0 cbt005-10GB04 10.211.1.105 A0:36:9F:1F:79:E2
-FR606 RSP_0 cbt005-10GB04 10.212.1.105 A0:36:9F:1F:79:E2
-FR606 RSP_0 cbt005-10GB04 10.213.1.105 A0:36:9F:1F:79:E2
-FR606 RSP_0 cbt005-10GB04 10.214.1.105 A0:36:9F:1F:79:E2
+RS305 RSP_0 cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
 
-SE607 RSP_0 cbt004-10GB04 10.211.1.104 A0:36:9F:1F:7A:06
-SE607 RSP_0 cbt004-10GB04 10.212.1.104 A0:36:9F:1F:7A:06
-SE607 RSP_0 cbt004-10GB04 10.213.1.104 A0:36:9F:1F:7A:06
-SE607 RSP_0 cbt004-10GB04 10.214.1.104 A0:36:9F:1F:7A:06
+CS101 RSP_0 cbt204-10GB04.online.lofar 10.168.163.4 F8:F2:1E:42:38:50
+CS101 RSP_1 cbt204-10GB04.online.lofar 10.168.163.4 F8:F2:1E:42:38:50
 
-UK608 RSP_0 cbt005-10GB04 10.211.1.105 A0:36:9F:1F:79:E2
-UK608 RSP_0 cbt005-10GB04 10.212.1.105 A0:36:9F:1F:79:E2
-UK608 RSP_0 cbt005-10GB04 10.213.1.105 A0:36:9F:1F:79:E2
-UK608 RSP_0 cbt005-10GB04 10.214.1.105 A0:36:9F:1F:79:E2
+RS503 RSP_0 cbt204-10GB04.online.lofar 10.168.163.4 F8:F2:1E:42:38:50
 
-DE609 RSP_0 cbt008-10GB04 10.200.91.108 A0:36:9F:1F:79:02
-DE609 RSP_0 cbt008-10GB04 10.200.92.108 A0:36:9F:1F:79:02
+IE613 RSP_0 cbt204-10GB06.online.lofar 10.220.81.204 F8:F2:1E:42:38:52
 
-PL610 RSP_0 cbt003-10GB04 10.220.11.103 A0:36:9F:1F:7B:42
+CS030 RSP_0 cbt204-10GB06.online.lofar 10.168.163.6 F8:F2:1E:42:38:52
+CS030 RSP_1 cbt204-10GB06.online.lofar 10.168.163.6 F8:F2:1E:42:38:52
 
-PL611 RSP_0 cbt004-10GB04 10.220.41.104 A0:36:9F:1F:7A:06
+CS021 RSP_0 cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
+CS021 RSP_1 cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
 
-PL612 RSP_0 cbt005-10GB04 10.220.61.105 A0:36:9F:1F:79:E2
+RS310 RSP_0 cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
 
-IE613 RSP_0 cbt002-10GB04 10.220.81.102 A0:36:9F:1F:79:A2
+CS401 RSP_0 cbt205-10GB04.online.lofar 10.168.164.4 F8:F2:1E:40:CC:10
+CS401 RSP_1 cbt205-10GB04.online.lofar 10.168.164.4 F8:F2:1E:40:CC:10
 
+RS509 RSP_0 cbt205-10GB04.online.lofar 10.168.164.4 F8:F2:1E:40:CC:10
diff --git a/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt_commissioning.dat b/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt_commissioning.dat
new file mode 100644
index 0000000000000000000000000000000000000000..6d3d5964a8a134dbfc64653d8b45d6d17efe0013
--- /dev/null
+++ b/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt_commissioning.dat
@@ -0,0 +1,173 @@
+#
+# RSPConnections_Cobalt
+#
+# $Id: $
+#
+# List of Connections between RSP boards and the Cobalt nodes at CEP.
+#
+# The Core stations have two possible connections: one for 
+# 1x48 HBA tiles, one for 2x24 HBA tiles. These have two separate 
+# entries in this file.
+#
+# International stations have one entry per VLAN. Each set of entries
+# must be duplicated to obtain the settings for the 4 RSP boards that
+# send data.
+#
+#                IMPORTANT !!!!!! BEWARE
+#
+# 	The items in the seperate lines of this file must be seperated by either a SINGLE whitespace or a single tab!!!!
+#	Furthermore, this file is read by PVSS controllers to fill in the database, ANY change could possibly have an impact
+#	on PVSS, so please double check. In case of doubt, contact the PVSS maintainer
+#
+# The network configuration is as follows:
+#
+# RD0 -> cbt207 ... cbt213
+# RD1 -> cbt201 ... cbt206
+#
+# NOTES:
+# - This is a mapping for COMMISSIONING
+
+CS002 RSP_0 cbt207-10GB01.online.lofar 10.168.166.1 E4:43:4B:3E:93:51
+CS002 RSP_1 cbt207-10GB01.online.lofar 10.168.166.1 E4:43:4B:3E:93:51
+
+CS026 RSP_0 cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
+CS026 RSP_1 cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
+
+CS302 RSP_0 cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
+CS302 RSP_1 cbt207-10GB06.online.lofar 10.168.166.6 F8:F2:1E:42:2F:82
+
+DE602 RSP_0 cbt207-10GB06.online.lofar 10.200.41.207 F8:F2:1E:42:2F:82
+
+FR606 RSP_0 cbt207-10GB06.online.lofar 10.211.1.207 F8:F2:1E:42:2F:82
+FR606 RSP_0 cbt207-10GB06.online.lofar 10.212.1.207 F8:F2:1E:42:2F:82
+FR606 RSP_0 cbt207-10GB06.online.lofar 10.213.1.207 F8:F2:1E:42:2F:82
+FR606 RSP_0 cbt207-10GB06.online.lofar 10.214.1.207 F8:F2:1E:42:2F:82
+
+CS003 RSP_0 cbt208-10GB01.online.lofar 10.168.167.1 E4:43:4B:3E:94:11
+CS003 RSP_1 cbt208-10GB01.online.lofar 10.168.167.1 E4:43:4B:3E:94:11
+
+CS028 RSP_0 cbt208-10GB04.online.lofar 10.168.167.4 F8:F2:1E:42:34:B0
+CS028 RSP_1 cbt208-10GB04.online.lofar 10.168.167.4 F8:F2:1E:42:34:B0
+
+PL610 RSP_0 cbt208-10GB06.online.lofar 10.220.11.208 F8:F2:1E:42:34:B2
+
+DE601 RSP_0 cbt208-10GB06.online.lofar 10.211.1.208 F8:F2:1E:42:34:B2
+DE601 RSP_0 cbt208-10GB06.online.lofar 10.212.1.208 F8:F2:1E:42:34:B2
+DE601 RSP_0 cbt208-10GB06.online.lofar 10.213.1.208 F8:F2:1E:42:34:B2
+DE601 RSP_0 cbt208-10GB06.online.lofar 10.214.1.208 F8:F2:1E:42:34:B2
+
+RS106 RSP_0 cbt208-10GB06.online.lofar 10.168.167.6 F8:F2:1E:42:34:B2
+
+CS004 RSP_0 cbt209-10GB01.online.lofar 10.168.168.1 E4:43:4B:3E:5F:61
+CS004 RSP_1 cbt209-10GB01.online.lofar 10.168.168.1 E4:43:4B:3E:5F:61
+
+CS031 RSP_0 cbt209-10GB04.online.lofar 10.168.168.4 F8:F2:1E:42:30:E0
+CS031 RSP_1 cbt209-10GB04.online.lofar 10.168.168.4 F8:F2:1E:42:30:E0
+
+DE604 RSP_0 cbt209-10GB06.online.lofar 10.200.81.209 F8:F2:1E:42:30:E2
+
+SE607 RSP_0 cbt209-10GB06.online.lofar 10.211.1.209 F8:F2:1E:42:30:E2
+SE607 RSP_0 cbt209-10GB06.online.lofar 10.212.1.209 F8:F2:1E:42:30:E2
+SE607 RSP_0 cbt209-10GB06.online.lofar 10.213.1.209 F8:F2:1E:42:30:E2
+SE607 RSP_0 cbt209-10GB06.online.lofar 10.214.1.209 F8:F2:1E:42:30:E2
+
+RS210 RSP_0 cbt209-10GB06.online.lofar 10.168.168.6 F8:F2:1E:42:30:E2
+
+CS006 RSP_0 cbt210-10GB01.online.lofar 10.168.169.1 E4:43:4B:3E:A2:21
+CS006 RSP_1 cbt210-10GB01.online.lofar 10.168.169.1 E4:43:4B:3E:A2:21
+
+CS103 RSP_0 cbt210-10GB04.online.lofar 10.168.169.4 F8:F2:1E:42:2F:30
+CS103 RSP_1 cbt210-10GB04.online.lofar 10.168.169.4 F8:F2:1E:42:2F:30
+
+DE603 RSP_0 cbt210-10GB06.online.lofar 10.211.1.210 F8:F2:1E:42:2F:32
+DE603 RSP_0 cbt210-10GB06.online.lofar 10.212.1.210 F8:F2:1E:42:2F:32
+DE603 RSP_0 cbt210-10GB06.online.lofar 10.213.1.210 F8:F2:1E:42:2F:32
+DE603 RSP_0 cbt210-10GB06.online.lofar 10.214.1.210 F8:F2:1E:42:2F:32
+
+PL611 RSP_0 cbt210-10GB06.online.lofar 10.220.41.210 F8:F2:1E:42:2F:32
+
+RS306 RSP_0 cbt210-10GB06.online.lofar 10.168.169.6 F8:F2:1E:42:2F:32
+
+CS011 RSP_0 cbt211-10GB01.online.lofar 10.168.170.1 E4:43:4B:3E:91:81
+CS011 RSP_1 cbt211-10GB01.online.lofar 10.168.170.1 E4:43:4B:3E:91:81
+
+CS201 RSP_0 cbt211-10GB04.online.lofar 10.168.170.4 F8:F2:1E:42:39:70
+CS201 RSP_1 cbt211-10GB04.online.lofar 10.168.170.4 F8:F2:1E:42:39:70
+
+DE609 RSP_0 cbt211-10GB06.online.lofar 10.200.91.211 F8:F2:1E:42:39:72
+DE609 RSP_0 cbt211-10GB06.online.lofar 10.200.92.211 F8:F2:1E:42:39:72
+
+UK608 RSP_0 cbt211-10GB06.online.lofar 10.211.1.211 F8:F2:1E:42:39:72
+UK608 RSP_0 cbt211-10GB06.online.lofar 10.212.1.211 F8:F2:1E:42:39:72
+UK608 RSP_0 cbt211-10GB06.online.lofar 10.213.1.211 F8:F2:1E:42:39:72
+UK608 RSP_0 cbt211-10GB06.online.lofar 10.214.1.211 F8:F2:1E:42:39:72
+
+RS307 RSP_0 cbt211-10GB06.online.lofar 10.168.170.6 F8:F2:1E:42:39:72
+
+CS013 RSP_0 cbt212-10GB01.online.lofar 10.168.171.1 E4:43:4B:3E:A1:A1
+CS013 RSP_1 cbt212-10GB01.online.lofar 10.168.171.1 E4:43:4B:3E:A1:A1
+
+CS301 RSP_0 cbt212-10GB04.online.lofar 10.168.171.4 F8:F2:1E:42:2C:C0
+CS301 RSP_1 cbt212-10GB04.online.lofar 10.168.171.4 F8:F2:1E:42:2C:C0
+
+DE605 RSP_0 cbt212-10GB06.online.lofar 10.211.1.212 F8:F2:1E:42:2C:C2
+DE605 RSP_0 cbt212-10GB06.online.lofar 10.212.1.212 F8:F2:1E:42:2C:C2
+DE605 RSP_0 cbt212-10GB06.online.lofar 10.213.1.212 F8:F2:1E:42:2C:C2
+DE605 RSP_0 cbt212-10GB06.online.lofar 10.214.1.212 F8:F2:1E:42:2C:C2
+
+PL612 RSP_0 cbt212-10GB06.online.lofar 10.220.61.212 F8:F2:1E:42:2C:C2
+
+RS508 RSP_0 cbt212-10GB06.online.lofar 10.168.171.6 F8:F2:1E:42:2C:C2
+
+CS001 RSP_0 cbt201-10GB01.online.lofar 10.168.160.1 E4:43:4B:3D:89:81
+CS001 RSP_1 cbt201-10GB01.online.lofar 10.168.160.1 E4:43:4B:3D:89:81
+
+CS024 RSP_0 cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
+CS024 RSP_1 cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
+
+RS406 RSP_0 cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
+
+CS005 RSP_0 cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
+CS005 RSP_1 cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
+
+RS205 RSP_0 cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
+
+CS501 RSP_0 cbt202-10GB04.online.lofar 10.168.161.4 3C:FD:FE:07:FD:A0
+CS501 RSP_1 cbt202-10GB04.online.lofar 10.168.161.4 3C:FD:FE:07:FD:A0
+
+RS407 RSP_0 cbt202-10GB04.online.lofar 10.168.161.4 3C:FD:FE:07:FD:A0
+
+CS007 RSP_0 cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
+CS007 RSP_1 cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
+
+RS208 RSP_0 cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
+
+CS032 RSP_0 cbt203-10GB04.online.lofar 10.168.162.4 F8:F2:1E:40:DA:50
+CS032 RSP_1 cbt203-10GB04.online.lofar 10.168.162.4 F8:F2:1E:40:DA:50
+
+RS409 RSP_0 cbt203-10GB04.online.lofar 10.168.162.4 F8:F2:1E:40:DA:50
+
+CS017 RSP_0 cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
+CS017 RSP_1 cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
+
+RS305 RSP_0 cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
+
+CS101 RSP_0 cbt204-10GB04.online.lofar 10.168.163.4 F8:F2:1E:42:38:50
+CS101 RSP_1 cbt204-10GB04.online.lofar 10.168.163.4 F8:F2:1E:42:38:50
+
+RS503 RSP_0 cbt204-10GB04.online.lofar 10.168.163.4 F8:F2:1E:42:38:50
+
+IE613 RSP_0 cbt204-10GB06.online.lofar 10.220.81.204 F8:F2:1E:42:38:52
+
+CS030 RSP_0 cbt204-10GB06.online.lofar 10.168.163.6 F8:F2:1E:42:38:52
+CS030 RSP_1 cbt204-10GB06.online.lofar 10.168.163.6 F8:F2:1E:42:38:52
+
+CS021 RSP_0 cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
+CS021 RSP_1 cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
+
+RS310 RSP_0 cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
+
+CS401 RSP_0 cbt205-10GB04.online.lofar 10.168.164.4 F8:F2:1E:40:CC:10
+CS401 RSP_1 cbt205-10GB04.online.lofar 10.168.164.4 F8:F2:1E:40:CC:10
+
+RS509 RSP_0 cbt205-10GB04.online.lofar 10.168.164.4 F8:F2:1E:40:CC:10
diff --git a/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt_final.dat b/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt_final.dat
new file mode 100644
index 0000000000000000000000000000000000000000..1a975c6043fc46bab5ab0c9eb0e42072c9a5ebc9
--- /dev/null
+++ b/MAC/Deployment/data/StaticMetaData/RSPConnections_Cobalt_final.dat
@@ -0,0 +1,174 @@
+#
+# RSPConnections_Cobalt
+#
+# $Id: $
+#
+# List of Connections between RSP boards and the Cobalt nodes at CEP.
+#
+# The Core stations have two possible connections: one for 
+# 1x48 HBA tiles, one for 2x24 HBA tiles. These have two separate 
+# entries in this file.
+#
+# International stations have one entry per VLAN. Each set of entries
+# must be duplicated to obtain the settings for the 4 RSP boards that
+# send data.
+#
+#                IMPORTANT !!!!!! BEWARE
+#
+# 	The items in the seperate lines of this file must be seperated by either a SINGLE whitespace or a single tab!!!!
+#	Furthermore, this file is read by PVSS controllers to fill in the database, ANY change could possibly have an impact
+#	on PVSS, so please double check. In case of doubt, contact the PVSS maintainer
+#
+# The network configuration is as follows:
+#
+# RD0 -> cbt207 ... cbt213
+# RD1 -> cbt201 ... cbt206
+#
+# NOTES:
+# - This is a mapping for FULL CONNECTIVITY after commissioning, ready for DUPLLO
+
+CS002 RSP_0 cbt207-10GB01.online.lofar 10.168.166.1 E4:43:4B:3E:93:51
+CS002 RSP_1 cbt207-10GB01.online.lofar 10.168.166.1 E4:43:4B:3E:93:51
+
+CS302 RSP_0 cbt207-10GB02.online.lofar 10.168.166.2 E4:43:4B:3E:93:52
+CS302 RSP_1 cbt207-10GB02.online.lofar 10.168.166.2 E4:43:4B:3E:93:52
+
+CS026 RSP_0 cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
+CS026 RSP_1 cbt207-10GB04.online.lofar 10.168.166.4 F8:F2:1E:42:2F:80
+
+FR606 RSP_0 cbt207-10GB05.online.lofar 10.211.1.207 F8:F2:1E:42:2F:81
+FR606 RSP_0 cbt207-10GB05.online.lofar 10.212.1.207 F8:F2:1E:42:2F:81
+FR606 RSP_0 cbt207-10GB05.online.lofar 10.213.1.207 F8:F2:1E:42:2F:81
+FR606 RSP_0 cbt207-10GB05.online.lofar 10.214.1.207 F8:F2:1E:42:2F:81
+
+DE602 RSP_0 cbt207-10GB06.online.lofar 10.200.41.207 F8:F2:1E:42:2F:82
+
+CS003 RSP_0 cbt208-10GB01.online.lofar 10.168.167.1 E4:43:4B:3E:94:11
+CS003 RSP_1 cbt208-10GB01.online.lofar 10.168.167.1 E4:43:4B:3E:94:11
+
+CS028 RSP_0 cbt208-10GB02.online.lofar 10.168.167.2 E4:43:4B:3E:94:12
+CS028 RSP_1 cbt208-10GB02.online.lofar 10.168.167.2 E4:43:4B:3E:94:12
+
+RS106 RSP_0 cbt208-10GB04.online.lofar 10.168.167.4 F8:F2:1E:42:34:B0
+
+DE601 RSP_0 cbt208-10GB05.online.lofar 10.211.1.208 F8:F2:1E:42:34:B1
+DE601 RSP_0 cbt208-10GB05.online.lofar 10.212.1.208 F8:F2:1E:42:34:B1
+DE601 RSP_0 cbt208-10GB05.online.lofar 10.213.1.208 F8:F2:1E:42:34:B1
+DE601 RSP_0 cbt208-10GB05.online.lofar 10.214.1.208 F8:F2:1E:42:34:B1
+
+PL610 RSP_0 cbt208-10GB06.online.lofar 10.220.11.208 F8:F2:1E:42:34:B2
+
+CS004 RSP_0 cbt209-10GB01.online.lofar 10.168.168.1 E4:43:4B:3E:5F:61
+CS004 RSP_1 cbt209-10GB01.online.lofar 10.168.168.1 E4:43:4B:3E:5F:61
+
+CS031 RSP_0 cbt209-10GB02.online.lofar 10.168.168.2 E4:43:4B:3E:5F:62
+CS031 RSP_1 cbt209-10GB02.online.lofar 10.168.168.2 E4:43:4B:3E:5F:62
+
+RS210 RSP_0 cbt209-10GB04.online.lofar 10.168.168.4 F8:F2:1E:42:30:E0
+
+SE607 RSP_0 cbt209-10GB05.online.lofar 10.211.1.209 F8:F2:1E:42:30:E1
+SE607 RSP_0 cbt209-10GB05.online.lofar 10.212.1.209 F8:F2:1E:42:30:E1
+SE607 RSP_0 cbt209-10GB05.online.lofar 10.213.1.209 F8:F2:1E:42:30:E1
+SE607 RSP_0 cbt209-10GB05.online.lofar 10.214.1.209 F8:F2:1E:42:30:E1
+
+DE604 RSP_0 cbt209-10GB06.online.lofar 10.200.81.209 F8:F2:1E:42:30:E2
+
+CS006 RSP_0 cbt210-10GB01.online.lofar 10.168.169.1 E4:43:4B:3E:A2:21
+CS006 RSP_1 cbt210-10GB01.online.lofar 10.168.169.1 E4:43:4B:3E:A2:21
+
+CS103 RSP_0 cbt210-10GB02.online.lofar 10.168.169.2 E4:43:4B:3E:A2:22
+CS103 RSP_1 cbt210-10GB02.online.lofar 10.168.169.2 E4:43:4B:3E:A2:22
+
+RS306 RSP_0 cbt210-10GB04.online.lofar 10.168.169.4 F8:F2:1E:42:2F:30
+
+DE603 RSP_0 cbt210-10GB05.online.lofar 10.211.1.210 F8:F2:1E:42:2F:31
+DE603 RSP_0 cbt210-10GB05.online.lofar 10.212.1.210 F8:F2:1E:42:2F:31
+DE603 RSP_0 cbt210-10GB05.online.lofar 10.213.1.210 F8:F2:1E:42:2F:31
+DE603 RSP_0 cbt210-10GB05.online.lofar 10.214.1.210 F8:F2:1E:42:2F:31
+
+PL611 RSP_0 cbt210-10GB06.online.lofar 10.220.41.210 F8:F2:1E:42:2F:32
+
+CS011 RSP_0 cbt211-10GB01.online.lofar 10.168.170.1 E4:43:4B:3E:91:81
+CS011 RSP_1 cbt211-10GB01.online.lofar 10.168.170.1 E4:43:4B:3E:91:81
+
+CS201 RSP_0 cbt211-10GB02.online.lofar 10.168.170.2 E4:43:4B:3E:91:82
+CS201 RSP_1 cbt211-10GB02.online.lofar 10.168.170.2 E4:43:4B:3E:91:82
+
+RS307 RSP_0 cbt211-10GB04.online.lofar 10.168.170.4 F8:F2:1E:42:39:70
+
+UK608 RSP_0 cbt211-10GB05.online.lofar 10.211.1.211 F8:F2:1E:42:39:71
+UK608 RSP_0 cbt211-10GB05.online.lofar 10.212.1.211 F8:F2:1E:42:39:71
+UK608 RSP_0 cbt211-10GB05.online.lofar 10.213.1.211 F8:F2:1E:42:39:71
+UK608 RSP_0 cbt211-10GB05.online.lofar 10.214.1.211 F8:F2:1E:42:39:71
+
+DE609 RSP_0 cbt211-10GB06.online.lofar 10.200.91.211 F8:F2:1E:42:39:72
+DE609 RSP_0 cbt211-10GB06.online.lofar 10.200.92.211 F8:F2:1E:42:39:72
+
+CS013 RSP_0 cbt212-10GB01.online.lofar 10.168.171.1 E4:43:4B:3E:A1:A1
+CS013 RSP_1 cbt212-10GB01.online.lofar 10.168.171.1 E4:43:4B:3E:A1:A1
+
+CS301 RSP_0 cbt212-10GB02.online.lofar 10.168.171.2 E4:43:4B:3E:A1:A2
+CS301 RSP_1 cbt212-10GB02.online.lofar 10.168.171.2 E4:43:4B:3E:A1:A2
+
+RS508 RSP_0 cbt212-10GB04.online.lofar 10.168.171.4 F8:F2:1E:42:2C:C0
+
+DE605 RSP_0 cbt212-10GB05.online.lofar 10.211.1.212 F8:F2:1E:42:2C:C1
+DE605 RSP_0 cbt212-10GB05.online.lofar 10.212.1.212 F8:F2:1E:42:2C:C1
+DE605 RSP_0 cbt212-10GB05.online.lofar 10.213.1.212 F8:F2:1E:42:2C:C1
+DE605 RSP_0 cbt212-10GB05.online.lofar 10.214.1.212 F8:F2:1E:42:2C:C1
+
+PL612 RSP_0 cbt212-10GB06.online.lofar 10.220.61.212 F8:F2:1E:42:2C:C2
+
+CS001 RSP_0 cbt201-10GB01.online.lofar 10.168.160.1 E4:43:4B:3D:89:81
+CS001 RSP_1 cbt201-10GB01.online.lofar 10.168.160.1 E4:43:4B:3D:89:81
+
+CS501 RSP_0 cbt201-10GB02.online.lofar 10.168.160.2 E4:43:4B:3D:89:82
+CS501 RSP_1 cbt201-10GB02.online.lofar 10.168.160.2 E4:43:4B:3D:89:82
+
+CS024 RSP_0 cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
+CS024 RSP_1 cbt201-10GB04.online.lofar 10.168.160.4 F8:F2:1E:40:D9:30
+
+RS406 RSP_0 cbt201-10GB05.online.lofar 10.168.160.5 F8:F2:1E:40:D9:31
+
+RS509 RSP_0 cbt201-10GB06.online.lofar 10.168.160.6 F8:F2:1E:40:D9:32
+
+CS005 RSP_0 cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
+CS005 RSP_1 cbt202-10GB01.online.lofar 10.168.161.1 E4:43:4B:3E:5E:91
+
+CS030 RSP_0 cbt202-10GB02.online.lofar 10.168.161.2 E4:43:4B:3E:5E:92
+CS030 RSP_1 cbt202-10GB02.online.lofar 10.168.161.2 E4:43:4B:3E:5E:92
+
+RS205 RSP_0 cbt202-10GB04.online.lofar 10.168.161.4 3C:FD:FE:07:FD:A0
+
+RS407 RSP_0 cbt202-10GB05.online.lofar 10.168.161.5 3C:FD:FE:07:FD:A2
+
+CS007 RSP_0 cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
+CS007 RSP_1 cbt203-10GB01.online.lofar 10.168.162.1 E4:43:4B:3D:86:E1
+
+CS032 RSP_0 cbt203-10GB02.online.lofar 10.168.162.2 E4:43:4B:3D:86:E2
+CS032 RSP_1 cbt203-10GB02.online.lofar 10.168.162.2 E4:43:4B:3D:86:E2
+
+RS208 RSP_0 cbt203-10GB04.online.lofar 10.168.162.4 F8:F2:1E:40:DA:50
+
+RS409 RSP_0 cbt203-10GB05.online.lofar 10.168.162.5 F8:F2:1E:40:DA:51
+
+CS017 RSP_0 cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
+CS017 RSP_1 cbt204-10GB01.online.lofar 10.168.163.1 E4:43:4B:3E:A1:91
+
+CS101 RSP_0 cbt204-10GB02.online.lofar 10.168.163.2 E4:43:4B:3E:A1:92
+CS101 RSP_1 cbt204-10GB02.online.lofar 10.168.163.2 E4:43:4B:3E:A1:92
+
+RS305 RSP_0 cbt204-10GB04.online.lofar 10.168.163.4 F8:F2:1E:42:38:50
+
+RS503 RSP_0 cbt204-10GB05.online.lofar 10.168.163.5 F8:F2:1E:42:38:51
+
+IE613 RSP_0 cbt204-10GB06.online.lofar 10.220.81.204 F8:F2:1E:42:38:52
+
+CS021 RSP_0 cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
+CS021 RSP_1 cbt205-10GB01.online.lofar 10.168.164.1 E4:43:4B:3D:C4:01
+
+CS401 RSP_0 cbt205-10GB02.online.lofar 10.168.164.2 E4:43:4B:3D:C4:02
+CS401 RSP_1 cbt205-10GB02.online.lofar 10.168.164.2 E4:43:4B:3D:C4:02
+
+RS310 RSP_0 cbt205-10GB04.online.lofar 10.168.164.4 F8:F2:1E:40:CC:10
+
diff --git a/MAC/Deployment/data/StaticMetaData/createCobaltConfig b/MAC/Deployment/data/StaticMetaData/createCobaltConfig
index a99b3fcb4a38178f62ce540ea441b275185b22a4..8aaebd3a0f37b8274c33653aa571e15f17daa6e0 100755
--- a/MAC/Deployment/data/StaticMetaData/createCobaltConfig
+++ b/MAC/Deployment/data/StaticMetaData/createCobaltConfig
@@ -45,19 +45,19 @@ $portstr = sprintf "[udp:%s:%d, udp:%s:%d, udp:%s:%d, udp:%s:%d]",
   $host, $baseport + ($board * 6) + 3;
 
 if ($board == 0) {
-  printf "PIC.Core.Station.%sLBA.RSP.ports = %s\n",$station,$portstr;
+  printf "PIC.Core.Station.%sLBA.RSP.sources = %s\n",$station,$portstr;
 
-  printf "PIC.Core.Station.%sHBA.RSP.ports = %s\n",$station,$portstr;
+  printf "PIC.Core.Station.%sHBA.RSP.sources = %s\n",$station,$portstr;
 
   if ($station =~ /^CS/) {
-    printf "PIC.Core.Station.%sHBA0.RSP.ports = %s\n",$station,$portstr;
+    printf "PIC.Core.Station.%sHBA0.RSP.sources = %s\n",$station,$portstr;
   } else {
     print "\n";
   }
 }
 
 if ($board == 1) {
-  printf "PIC.Core.Station.%sHBA1.RSP.ports = %s\n",$station,$portstr;
+  printf "PIC.Core.Station.%sHBA1.RSP.sources = %s\n",$station,$portstr;
   print "\n";
 }
 
diff --git a/MAC/GCF/TM/src/GCF_Scheduler.cc b/MAC/GCF/TM/src/GCF_Scheduler.cc
index 2747767507afa562c5dfe94aee1a35bd2f39d7e6..22f9b0f95a1634b686b05a8ccddfc8148f1c32f1 100644
--- a/MAC/GCF/TM/src/GCF_Scheduler.cc
+++ b/MAC/GCF/TM/src/GCF_Scheduler.cc
@@ -283,6 +283,9 @@ GCFEvent::TResult GCFScheduler::_sendEvent(GCFFsm* task, GCFEvent& event, GCFPor
 //
 void GCFScheduler::queueTransition(GCFFsm* task, State	target, const char* from, const char* to)
 {
+  (void)from; //prevent unused var warning in release mode
+  (void)to; //prevent unused var warning in release mode
+
 	LOG_TRACE_CALC_STR("queueTransition from " << from << " to " << to);
 	if (!itsUseQueue) {
 		// when the queues are not used send them directly (in the right order).
diff --git a/MAC/GCF/TM/src/Port/GCF_RawPort.cc b/MAC/GCF/TM/src/Port/GCF_RawPort.cc
index ca79d25f8bba7c88277f69139972ccae6d61605e..ca8302595d98fe5915c31fd736a080710e1ef757 100644
--- a/MAC/GCF/TM/src/Port/GCF_RawPort.cc
+++ b/MAC/GCF/TM/src/Port/GCF_RawPort.cc
@@ -88,7 +88,13 @@ void GCFRawPort::init(GCFTask& 		task,
 GCFRawPort::~GCFRawPort()
 {
 	cancelAllTimers();
-	ASSERT(_pTimerHandler);
+
+	try {
+	  ASSERT(_pTimerHandler);
+        } catch (Exception &ex) {
+	  LOG_ERROR_STR(ex);
+        }
+
 	GTMTimerHandler::release();
 	_pTimerHandler = 0;
 }
diff --git a/MAC/GCF/TM/src/Timer/GTM_TimerHandler.cc b/MAC/GCF/TM/src/Timer/GTM_TimerHandler.cc
index 2f5e287b9e721baa87cf962ca775c4bf8785fa2b..cb4db3896d6516ab2029181a94310f42749f891f 100644
--- a/MAC/GCF/TM/src/Timer/GTM_TimerHandler.cc
+++ b/MAC/GCF/TM/src/Timer/GTM_TimerHandler.cc
@@ -68,8 +68,13 @@ GTMTimerHandler::~GTMTimerHandler()
   GTMTimer* pCurTimer(0);
   for (TTimers::iterator iter = _timers.begin(); iter != _timers.end(); ++iter) {
     pCurTimer = iter->second;
-    ASSERT(pCurTimer);
-    delete pCurTimer;
+
+    try {
+      ASSERT(pCurTimer);
+      delete pCurTimer;
+    } catch (Exception &ex) {
+      LOG_ERROR_STR(ex);
+    }
   }
   _timers.clear();
   _pInstance = 0;
diff --git a/MAC/GCF/TM/test/tEventBinding.cc b/MAC/GCF/TM/test/tEventBinding.cc
index 2f646f1452f5976124f5a0d4195c39cd2f2341c4..d7f9d6f5d7d44c76506506fca8ae2373fc792b22 100644
--- a/MAC/GCF/TM/test/tEventBinding.cc
+++ b/MAC/GCF/TM/test/tEventBinding.cc
@@ -78,7 +78,7 @@ void tEventBinding::handleDiscoEvent(GCFEvent& /*event*/, GCFPortInterface& port
 GCFEvent::TResult tEventBinding::sanityCheck(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("sanityCheck: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
+	LOG_INFO_STR ("sanityCheck: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
 
 	switch (event.signal) {
 	case F_ENTRY:
@@ -130,7 +130,7 @@ GCFEvent::TResult tEventBinding::sanityCheck(GCFEvent& event, GCFPortInterface&
 GCFEvent::TResult tEventBinding::bindFixedOnSignal(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("bindFixedOnSignal: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
+	LOG_INFO_STR ("bindFixedOnSignal: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -189,7 +189,7 @@ GCFEvent::TResult tEventBinding::bindFixedOnSignal(GCFEvent& event, GCFPortInter
 GCFEvent::TResult tEventBinding::bindFixedOnPort(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("bindFixedOnPort: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
+	LOG_INFO_STR ("bindFixedOnPort: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -248,7 +248,7 @@ GCFEvent::TResult tEventBinding::bindFixedOnPort(GCFEvent& event, GCFPortInterfa
 GCFEvent::TResult tEventBinding::bindFixedOnBoth(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("bindFixedOnBoth: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
+	LOG_INFO_STR ("bindFixedOnBoth: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -308,7 +308,7 @@ GCFEvent::TResult tEventBinding::bindFixedOnBoth(GCFEvent& event, GCFPortInterfa
 GCFEvent::TResult tEventBinding::bindDefaultOnSignal(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("bindDefaultOnSignal: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
+	LOG_INFO_STR ("bindDefaultOnSignal: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -365,7 +365,7 @@ GCFEvent::TResult tEventBinding::bindDefaultOnSignal(GCFEvent& event, GCFPortInt
 GCFEvent::TResult tEventBinding::bindPortEvent(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("bindPortEvent: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
+	LOG_INFO_STR ("bindPortEvent: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -448,7 +448,7 @@ void tMultiTask::handleEchoEvent2(GCFEvent& event, GCFPortInterface& /*port*/)
 GCFEvent::TResult tMultiTask::connect(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR (getName() << "-connect: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
+	LOG_INFO_STR (getName() << "-connect: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
 
 	switch (event.signal) {
 	case F_ENTRY:
@@ -500,7 +500,7 @@ GCFEvent::TResult tMultiTask::connect(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tMultiTask::doTest(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR (getName() << "-doTest: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
+	LOG_INFO_STR (getName() << "-doTest: " << eventName(event.signal) << "@" << port.getName() << " : " << &port);
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -550,7 +550,7 @@ GCFEvent::TResult tMultiTask::doTest(GCFEvent& event, GCFPortInterface& port)
 				EchoPingEvent	ping;
 				ping.seqnr = 500 + 10*gCounter1 + itsTaskNr;
 				itsDataPort->send(ping);
-				LOG_DEBUG_STR("SENDING SEQNR: " << ping.seqnr);
+				LOG_INFO_STR("SENDING SEQNR: " << ping.seqnr);
 			}
 			else {
 				itsTimerPort->cancelAllTimers();
diff --git a/MAC/GCF/TM/test/tEventQueue.cc b/MAC/GCF/TM/test/tEventQueue.cc
index 9b78365a01a70985b3857afdd741effbaa924a79..427deae5787243ebde81245b18c3d589a194aeba 100644
--- a/MAC/GCF/TM/test/tEventQueue.cc
+++ b/MAC/GCF/TM/test/tEventQueue.cc
@@ -58,7 +58,7 @@ tEventQueue::~tEventQueue()
 GCFEvent::TResult tEventQueue::timerTest(GCFEvent& event, GCFPortInterface& /*port*/)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("tEventQueue::timerTest: " << eventName(event.signal));
+	LOG_INFO_STR ("tEventQueue::timerTest: " << eventName(event.signal));
 
 	switch (event.signal) {
 	case F_ENTRY:
@@ -69,49 +69,49 @@ GCFEvent::TResult tEventQueue::timerTest(GCFEvent& event, GCFPortInterface& /*po
 	case F_INIT:
 		gTest=1;
 		gTimerID = itsTimerPort->setTimer(1.0);
-		LOG_DEBUG_STR("setTimer(1.0) = " << gTimerID);
+		LOG_INFO_STR("setTimer(1.0) = " << gTimerID);
 		break;
 
 	case F_TIMER: {
 		switch (gTest) {
 			case 1: {	// wait for setTimer(1.0)
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
 
 				gTimerID = itsTimerPort->setTimer(1.0, 2.0);
-				LOG_DEBUG_STR("setTimer(1.0, 2.0) = " << gTimerID);
+				LOG_INFO_STR("setTimer(1.0, 2.0) = " << gTimerID);
 				gTest++;
 			}
 			break;
 
 			case 2: { // wait for first expire of setTimer(1.0, 2.0)
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
 				gTest++;
 			}
 			break;
 
 			case 3: {	// wait for second expire of setTimer(1.0, 2.0)
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
 				itsTimerPort->cancelTimer(gTimerID);
 
 				gTimerID = itsTimerPort->setTimer(1.0, 1.0, (char*)"pietje puk");
-				LOG_DEBUG_STR("setTimer(1.0, 0.0, 'pietje puk') = " << gTimerID);
+				LOG_INFO_STR("setTimer(1.0, 0.0, 'pietje puk') = " << gTimerID);
 				gTest++;
 			}
 			break;
 			case 4: {
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", *arg = " << (char*)timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", *arg = " << (char*)timerEvent.arg);
 				gTest++;
 			}
 			break;
 
 			default: {
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", *arg = " << (char*)timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", *arg = " << (char*)timerEvent.arg);
 				if (gTest++ > 8) {
 					itsTimerPort->cancelTimer(gTimerID);
 					LOG_INFO("Timertest passed, Going to the next statemachine\n\n\n");
@@ -146,7 +146,7 @@ GCFEvent::TResult tEventQueue::timerTest(GCFEvent& event, GCFPortInterface& /*po
 GCFEvent::TResult tEventQueue::tranTest(GCFEvent& event, GCFPortInterface& /*port*/)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("tEventQueue::tranTest: " << eventName(event.signal));
+	LOG_INFO_STR ("tEventQueue::tranTest: " << eventName(event.signal));
 
 	switch (event.signal) {
 	case F_ENTRY:
@@ -179,7 +179,7 @@ GCFEvent::TResult tEventQueue::tranTest(GCFEvent& event, GCFPortInterface& /*por
 GCFEvent::TResult tEventQueue::listenerTest(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("tEventQueue::listenerTest: " << eventName(event.signal));
+	LOG_INFO_STR ("tEventQueue::listenerTest: " << eventName(event.signal));
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -230,7 +230,7 @@ GCFEvent::TResult tEventQueue::listenerTest(GCFEvent& event, GCFPortInterface& p
 GCFEvent::TResult tEventQueue::wait4client2connect(GCFEvent& event, GCFPortInterface& /*port*/)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("tEventQueue::wait4client2connect: " << eventName(event.signal));
+	LOG_INFO_STR ("tEventQueue::wait4client2connect: " << eventName(event.signal));
 
 	switch (event.signal) {
 	case F_ENTRY:
@@ -274,7 +274,7 @@ GCFEvent::TResult tEventQueue::wait4client2connect(GCFEvent& event, GCFPortInter
 GCFEvent::TResult tEventQueue::serverState(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("tEventQueue::serverState: " << eventName(event.signal));
+	LOG_INFO_STR ("tEventQueue::serverState: " << eventName(event.signal));
 
 	switch (event.signal) {
 	case F_ENTRY:
@@ -292,16 +292,16 @@ GCFEvent::TResult tEventQueue::serverState(GCFEvent& event, GCFPortInterface& po
 		echo.seqnr     = ping.seqnr;
 		port.send(echo);
 		itsTimerPort->cancelAllTimers();
-		LOG_DEBUG_STR("YES, ping was received, echo was sent, I'm ready!");
+		LOG_INFO_STR("YES, ping was received, echo was sent, I'm ready!");
 		break;
 	}
 
 	case F_DISCONNECTED:
-		LOG_DEBUG_STR("Closing port because i received a disconnect event");
+		LOG_INFO_STR("Closing port because i received a disconnect event");
 		port.close();
 
 	case F_CLOSED:
-		LOG_DEBUG_STR("Succesfully terminated the test, Stopping program");
+		LOG_INFO_STR("Succesfully terminated the test, Stopping program");
 		GCFScheduler::instance()->stop();
 		break;
 
diff --git a/MAC/GCF/TM/test/tITCPort.cc b/MAC/GCF/TM/test/tITCPort.cc
index d76d63e22cd00f589982957b3deac27411b6461e..95daa7f23598790358aa4503c3bc6a8955f5353d 100644
--- a/MAC/GCF/TM/test/tITCPort.cc
+++ b/MAC/GCF/TM/test/tITCPort.cc
@@ -79,7 +79,7 @@ tClient::tClient(string name) :
 // open ITC
 GCFEvent::TResult	tServer::openITC(GCFEvent&	event, GCFPortInterface&	port)
 {
-	LOG_DEBUG_STR ("Server@openITC: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@openITC: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -119,7 +119,7 @@ GCFEvent::TResult	tServer::openITC(GCFEvent&	event, GCFPortInterface&	port)
 // wait for TCP connection with the client
 GCFEvent::TResult	tServer::wait4TCP(GCFEvent&	event, GCFPortInterface&	port)
 {
-	LOG_DEBUG_STR ("Server@wait4TCP: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@wait4TCP: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -160,7 +160,7 @@ GCFEvent::TResult	tServer::wait4TCP(GCFEvent&	event, GCFPortInterface&	port)
 GCFEvent::TResult tServer::test1(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@test1: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@test1: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -186,7 +186,7 @@ GCFEvent::TResult tServer::test1(GCFEvent& event, GCFPortInterface& port)
     case ECHO_PING: {
 		itsTimerPort->cancelAllTimers();
 		EchoPingEvent ping(event);
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr << endl << ping);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << ping.seqnr << endl << ping);
 		ASSERT_NOT_EQUAL(ping, gPing);
 		LOG_DEBUG ("Server: returned message is OK, going to test2");
 		TRAN(tServer::test2);
@@ -214,7 +214,7 @@ GCFEvent::TResult tServer::test1(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tServer::test2(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@test2: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@test2: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -240,7 +240,7 @@ GCFEvent::TResult tServer::test2(GCFEvent& event, GCFPortInterface& port)
     case ECHO_PING: {
 		itsTimerPort->cancelAllTimers();
 		EchoPingEvent ping(event);
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << ping.seqnr);
 		ASSERT_NOT_EQUAL (ping, gPing);
 		LOG_DEBUG ("Server: returned message is OK, going to TEST 3.");
 		TRAN(tServer::test3A);
@@ -267,7 +267,7 @@ GCFEvent::TResult tServer::test2(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tServer::test3A(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@test3A: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@test3A: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -298,7 +298,7 @@ GCFEvent::TResult tServer::test3A(GCFEvent& event, GCFPortInterface& port)
     case ECHO_PING: {
 		itsTimerPort->cancelAllTimers();
 		EchoPingEvent ping(event);
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << ping.seqnr);
 		if (itsSendCount == 1) {
 			ASSERT_NOT_EQUAL (ping, gPing2);
 			LOG_DEBUG ("Server: returned message is OK, Sending ping3 event");
@@ -342,7 +342,7 @@ GCFEvent::TResult tServer::test3A(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tServer::test3B(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@test3B: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@test3B: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -364,7 +364,7 @@ GCFEvent::TResult tServer::test3B(GCFEvent& event, GCFPortInterface& port)
     case ECHO_PING: {
 		itsTimerPort->cancelAllTimers();
 		EchoPingEvent ping(event);
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << ping.seqnr);
 		if (itsSendCount == 0) {
 			ASSERT_NOT_EQUAL (ping, gPing2);
 			LOG_DEBUG ("Server: returned postphoned message is OK");
@@ -400,7 +400,7 @@ GCFEvent::TResult tServer::test3B(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tServer::test4A(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@test4A: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@test4A: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -431,7 +431,7 @@ GCFEvent::TResult tServer::test4A(GCFEvent& event, GCFPortInterface& port)
     case ECHO_PING: {
 		itsTimerPort->cancelAllTimers();
 		EchoPingEvent ping(event);
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << ping.seqnr);
 		if (itsSendCount == 1) {
 			ASSERT_NOT_EQUAL (ping, gPing2);
 			LOG_DEBUG ("Server: returned message is OK, Sending ping3 event");
@@ -473,7 +473,7 @@ GCFEvent::TResult tServer::test4A(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tServer::test4B(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@test4B: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@test4B: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -495,7 +495,7 @@ GCFEvent::TResult tServer::test4B(GCFEvent& event, GCFPortInterface& port)
     case ECHO_PING: {
 		itsTimerPort->cancelAllTimers();
 		EchoPingEvent ping(event);
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << ping.seqnr);
 		if (itsSendCount == 0) {
 			ASSERT_NOT_EQUAL (ping, gPing2);
 			LOG_DEBUG ("Server: returned postphoned message is OK");
@@ -531,7 +531,7 @@ GCFEvent::TResult tServer::test4B(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tServer::test5A(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@test5A: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@test5A: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -574,7 +574,7 @@ GCFEvent::TResult tServer::test5A(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tServer::test5B(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@test5B: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@test5B: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -587,7 +587,7 @@ GCFEvent::TResult tServer::test5B(GCFEvent& event, GCFPortInterface& port)
 		GCFTimerEvent& timerEvent=static_cast<GCFTimerEvent&>(event);
 		EchoPingEvent* pingPtr = (EchoPingEvent*)timerEvent.arg;
 		ASSERTSTR(pingPtr, "Expected an ping event attached to the timer event, bailing out...");
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << pingPtr->seqnr);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << pingPtr->seqnr);
 		if (itsSendCount == 0) {
 			ASSERT_NOT_EQUAL (*pingPtr, gPing2);
 			LOG_DEBUG ("Server: returned postphoned message is OK");
@@ -622,7 +622,7 @@ GCFEvent::TResult tServer::test5B(GCFEvent& event, GCFPortInterface& port)
 GCFEvent::TResult tServer::forwardOverTCP(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@forwardOverTCP: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@forwardOverTCP: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -665,7 +665,7 @@ GCFEvent::TResult tServer::forwardOverTCP(GCFEvent& event, GCFPortInterface& por
 GCFEvent::TResult tServer::delayedOverTCP(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@delayedOverTCP: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@delayedOverTCP: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -678,7 +678,7 @@ GCFEvent::TResult tServer::delayedOverTCP(GCFEvent& event, GCFPortInterface& por
 		GCFTimerEvent& timerEvent=static_cast<GCFTimerEvent&>(event);
 		EchoPingEvent* pingPtr = (EchoPingEvent*)timerEvent.arg;
 		ASSERTSTR(pingPtr, "Expected an ping event attached to the timer event, bailing out...");
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << pingPtr->seqnr);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << pingPtr->seqnr);
 		if (itsSendCount == 0) {
 			ASSERT_NOT_EQUAL (*pingPtr, gPing2);
 			LOG_DEBUG ("Server: returned postphoned message is OK");
@@ -713,7 +713,7 @@ GCFEvent::TResult tServer::delayedOverTCP(GCFEvent& event, GCFPortInterface& por
 GCFEvent::TResult tServer::forwardOverITC(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@forwardOverITC: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@forwardOverITC: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -756,7 +756,7 @@ GCFEvent::TResult tServer::forwardOverITC(GCFEvent& event, GCFPortInterface& por
 GCFEvent::TResult tServer::delayedOverITC(GCFEvent& event, GCFPortInterface& port)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("Server@delayedOverITC: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Server@delayedOverITC: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -769,7 +769,7 @@ GCFEvent::TResult tServer::delayedOverITC(GCFEvent& event, GCFPortInterface& por
 		GCFTimerEvent& timerEvent=static_cast<GCFTimerEvent&>(event);
 		EchoPingEvent* pingPtr = (EchoPingEvent*)timerEvent.arg;
 		ASSERTSTR(pingPtr, "Expected an ping event attached to the timer event, bailing out...");
-		LOG_DEBUG_STR ("Server:PING received, seqnr=" << pingPtr->seqnr);
+		LOG_INFO_STR ("Server:PING received, seqnr=" << pingPtr->seqnr);
 		if (itsSendCount == 0) {
 			ASSERT_NOT_EQUAL (*pingPtr, gPing2);
 			LOG_DEBUG ("Server: returned postphoned message is OK");
@@ -805,7 +805,7 @@ GCFEvent::TResult tServer::delayedOverITC(GCFEvent& event, GCFPortInterface& por
 //
 GCFEvent::TResult	tClient::initial(GCFEvent&	event, GCFPortInterface&	port)
 {
-	LOG_DEBUG_STR ("Client@initial: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Client@initial: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY:
@@ -834,7 +834,7 @@ GCFEvent::TResult	tClient::initial(GCFEvent&	event, GCFPortInterface&	port)
 //
 GCFEvent::TResult	tClient::openTCP(GCFEvent&	event, GCFPortInterface&	port)
 {
-	LOG_DEBUG_STR ("Client@openTCP: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Client@openTCP: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY: {
@@ -875,7 +875,7 @@ GCFEvent::TResult	tClient::openTCP(GCFEvent&	event, GCFPortInterface&	port)
 // Copy messages from ITC to TCP and vice versa
 GCFEvent::TResult tClient::receiverMode(GCFEvent& event, GCFPortInterface& port)
 {
-	LOG_DEBUG_STR ("Client@receiverMode: " << eventName(event.signal) << "@" << port.getName());
+	LOG_INFO_STR ("Client@receiverMode: " << eventName(event.signal) << "@" << port.getName());
 
 	switch (event.signal) {
     case ECHO_PING: {
@@ -883,17 +883,17 @@ GCFEvent::TResult tClient::receiverMode(GCFEvent& event, GCFPortInterface& port)
 			LOG_INFO_STR("Client: PING received, seqnr=" << ping.seqnr << ", time=" << ping.ping_time.tv_sec << "." << ping.ping_time.tv_usec);
 			if (&port == itsTCPPort) {
 				LOG_DEBUG("Client: Sending back message");
-				LOG_DEBUG_STR("event=" << event);
-				LOG_DEBUG_STR("ping=" << ping);
+				LOG_INFO_STR("event=" << event);
+				LOG_INFO_STR("ping=" << ping);
 				EchoPingEvent*	clonedPing = ping.clone();
-				LOG_DEBUG_STR("clonedPing = " << *clonedPing);
+				LOG_INFO_STR("clonedPing = " << *clonedPing);
 				gITCPort->sendBack(*(ping.clone()));
 				LOG_DEBUG("Client: Done");
 			}
 			else {
 				LOG_DEBUG("Client: Sending back message");
-				LOG_DEBUG_STR("event=" << event);
-				LOG_DEBUG_STR("ping=" << ping);
+				LOG_INFO_STR("event=" << event);
+				LOG_INFO_STR("ping=" << ping);
 				itsTCPPort->send(*(ping.clone()));
 				LOG_DEBUG("Client: Done");
 			}
diff --git a/MAC/GCF/TM/test/tServer.cc b/MAC/GCF/TM/test/tServer.cc
index 0c9051ebc412e50f317e2fa82bf810d8961428e1..0e0e067d1c24bcbc20811aec66314576f2deb4bd 100644
--- a/MAC/GCF/TM/test/tServer.cc
+++ b/MAC/GCF/TM/test/tServer.cc
@@ -54,7 +54,7 @@ GCFEvent::TResult tServer::initial(GCFEvent& event, GCFPortInterface& /*port*/)
 	switch (event.signal) {
 	case F_INIT: {
 		int	timerID = itsTimerPort->setTimer(1.0*itsStartupDelay);
-		LOG_DEBUG_STR("WAITING " << itsStartupDelay << " seconds before starting server, timerID=" << timerID);
+		LOG_INFO_STR("WAITING " << itsStartupDelay << " seconds before starting server, timerID=" << timerID);
 	}
 	break;
 
@@ -112,7 +112,7 @@ GCFEvent::TResult tServer::connected(GCFEvent& event, GCFPortInterface& port)
 	}
 
     case F_DISCONNECTED:
-		LOG_DEBUG_STR("SERVER received 'disconnect', closing port");
+		LOG_INFO_STR("SERVER received 'disconnect', closing port");
 		port.close();
 //		TRAN(tServer::initial);	// hope this will work...
 		break;
diff --git a/MAC/GCF/TM/test/tTimer.cc b/MAC/GCF/TM/test/tTimer.cc
index 88803298452cd66c7afa3b8f351f9397fd900ade..c68b55b991c6475a95b953778548496688125334 100644
--- a/MAC/GCF/TM/test/tTimer.cc
+++ b/MAC/GCF/TM/test/tTimer.cc
@@ -56,7 +56,7 @@ tTimer::~tTimer()
 GCFEvent::TResult tTimer::test1(GCFEvent& event, GCFPortInterface& /*port*/)
 {
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("tTimer::test1: " << eventName(event.signal));
+	LOG_INFO_STR ("tTimer::test1: " << eventName(event.signal));
 
 	switch (event.signal) {
 	case F_ENTRY:
@@ -67,49 +67,49 @@ GCFEvent::TResult tTimer::test1(GCFEvent& event, GCFPortInterface& /*port*/)
 	case F_INIT:
 		gTest=1;
 		gTimerID = itsTimerPort->setTimer(1.0);
-		LOG_DEBUG_STR("setTimer(1.0) = " << gTimerID);
+		LOG_INFO_STR("setTimer(1.0) = " << gTimerID);
 		break;
 
 	case F_TIMER: {
 		switch (gTest) {
 			case 1: {	// wait for setTimer(1.0)
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
 
 				gTimerID = itsTimerPort->setTimer(1.0, 2.0);
-				LOG_DEBUG_STR("setTimer(1.0, 2.0) = " << gTimerID);
+				LOG_INFO_STR("setTimer(1.0, 2.0) = " << gTimerID);
 				gTest++;
 			}
 			break;
 
 			case 2: { // wait for first expire of setTimer(1.0, 2.0)
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
 				gTest++;
 			}
 			break;
 
 			case 3: {	// wait for second expire of setTimer(1.0, 2.0)
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
 				itsTimerPort->cancelTimer(gTimerID);
 
 				gTimerID = itsTimerPort->setTimer(1.0, 1.0, (char*)"pietje puk");
-				LOG_DEBUG_STR("setTimer(1.0, 0.0, 'pietje puk') = " << gTimerID);
+				LOG_INFO_STR("setTimer(1.0, 0.0, 'pietje puk') = " << gTimerID);
 				gTest++;
 			}
 			break;
 			case 4: {
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", *arg = " << (char*)timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", arg = " << timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", *arg = " << (char*)timerEvent.arg);
 				gTest++;
 			}
 			break;
 
 			default: {
 				GCFTimerEvent& timerEvent = static_cast<GCFTimerEvent&>(event);
-				LOG_DEBUG_STR("ID = " << timerEvent.id << ", *arg = " << (char*)timerEvent.arg);
+				LOG_INFO_STR("ID = " << timerEvent.id << ", *arg = " << (char*)timerEvent.arg);
 				if (gTest++ > 20) {
 					itsTimerPort->cancelTimer(gTimerID);
 					GCFScheduler::instance()->stop();
diff --git a/MAC/GCF/TM/test/testTask.cc b/MAC/GCF/TM/test/testTask.cc
index 3f40684578094b91537012c6a3d601b38b5c5b88..968fac471ce519b681ad2e0434189ac23ac6d568 100644
--- a/MAC/GCF/TM/test/testTask.cc
+++ b/MAC/GCF/TM/test/testTask.cc
@@ -41,7 +41,7 @@ testTask::testTask(const string&	name, double	timerInterval) :
 	itsTimerInterval(timerInterval),
 	itsStopTimer	(0)
 {
-	LOG_DEBUG_STR("Creation of " << name);
+	LOG_INFO_STR("Creation of " << name);
 }
 
 
@@ -50,7 +50,7 @@ testTask::testTask(const string&	name, double	timerInterval) :
 //
 testTask::~testTask()
 {
-	LOG_DEBUG_STR("Destruction of " << getName());
+	LOG_INFO_STR("Destruction of " << getName());
 
 	if (itsTimerPort) {
 		delete itsTimerPort;
@@ -62,7 +62,7 @@ testTask::~testTask()
 //
 GCFEvent::TResult	testTask::mainTask(GCFEvent&	event, GCFPortInterface&	port)
 {
-	LOG_DEBUG_STR(getName() << ":" << eventName(event) << "@" << port.getName());
+	LOG_INFO_STR(getName() << ":" << eventName(event) << "@" << port.getName());
 
 	switch (event.signal) {
 	case F_ENTRY:
diff --git a/MAC/WinCCPublisher/test/WinCCListener.cc b/MAC/WinCCPublisher/test/WinCCListener.cc
index 3104600d423e06a927b644cacaf960bcfb2678fe..ed1e320570f3437ffe06363a8b9e101b91681a18 100644
--- a/MAC/WinCCPublisher/test/WinCCListener.cc
+++ b/MAC/WinCCPublisher/test/WinCCListener.cc
@@ -24,6 +24,7 @@
 #include <Common/LofarLocators.h>
 #include <Messaging/Message.h>
 #include <Messaging/FromBus.h>
+#include <Messaging/DefaultSettings.h>
 
 int main()
 {
@@ -46,7 +47,7 @@ int main()
         return 1;
     }
 
-    LOFAR::Messaging::FromBus fromBus{queueName, "{create: always, delete: always}"};
+    LOFAR::Messaging::FromBus fromBus{queueName, LOFAR::Messaging:defaultBroker, "{create: always, delete: always}"};
 
     while (1)
     {
@@ -69,4 +70,4 @@ int main()
     }
 
     return 0;
-}
\ No newline at end of file
+}
diff --git a/RTCP/Cobalt/BrokenAntennaInfo/src/FinalMetaDataGatherer.cc b/RTCP/Cobalt/BrokenAntennaInfo/src/FinalMetaDataGatherer.cc
index 6cc778a21bc06cecc1aefbde84f0da1b1561514d..1f1327ed5673c96e062dc621ca232b08a10bdc3b 100644
--- a/RTCP/Cobalt/BrokenAntennaInfo/src/FinalMetaDataGatherer.cc
+++ b/RTCP/Cobalt/BrokenAntennaInfo/src/FinalMetaDataGatherer.cc
@@ -28,6 +28,7 @@
 #include <Common/StringUtil.h>    // needed for split
 #include <Common/Exception.h>     // THROW macro for exceptions
 #include <Common/Exceptions.h>
+#include <Common/LofarLocators.h>
 #include <CoInterface/Exceptions.h>
 #include <CoInterface/Parset.h>
 #include <CoInterface/Stream.h>
@@ -187,27 +188,29 @@ namespace LOFAR {
       bool enabled    = parset.getBool("Cobalt.FinalMetaDataGatherer.enabled", true);
 
       if (!enabled) {
-        LOG_INFO_STR("Retrieval of broken-antenna information was disabled in the parset!");
+        LOG_WARN_STR("Retrieval of broken-antenna information was disabled in the parset!");
         return FinalMetaData();
       }
 
-      string host     = parset.getString("Cobalt.FinalMetaDataGatherer.database.host", "");
+      // Read db configuration
+      ConfigLocator CL;
+      const string filename = CL.locate("FinalMetaDataGatherer.conf");
+
+      ParameterSet config;
+      config.adoptFile(filename);
+
+      string host     = config.getString("FinalMetaDataGatherer.database.host", "");
       if (host.empty())
         host = "sasdb.control.lofar";
 
-      string db       = parset.getString("Cobalt.FinalMetaDataGatherer.database.name", "");
+      string db       = config.getString("FinalMetaDataGatherer.database.name", "");
       if (db.empty())
         db   = "LOFAR_4";
 
-      string user     = parset.getString("Cobalt.FinalMetaDataGatherer.database.username", "");
-      string password; // in the code is bad enough; don't also put it in a config parset (and thus .MS)
-      if (user.empty()) {
-        // When can we finally get rid of this silliness?!?
-        user     = "paulus";
-        password = "boskabouter";
-      }
+      string user     = config.getString("FinalMetaDataGatherer.database.username", "");
+      string password = config.getString("FinalMetaDataGatherer.database.password", "");
 
-      string port     = parset.getString("Cobalt.FinalMetaDataGatherer.database.port", "");
+      string port     = config.getString("FinalMetaDataGatherer.database.port", "");
       if (port.empty())
         port = "5432";
 
diff --git a/RTCP/Cobalt/CMakeLists.txt b/RTCP/Cobalt/CMakeLists.txt
index c6a9b2e529b99ccb534a7032c9be3b1406b45218..312d31f0a173508c10d9edd2bf335801022d1240 100644
--- a/RTCP/Cobalt/CMakeLists.txt
+++ b/RTCP/Cobalt/CMakeLists.txt
@@ -3,7 +3,6 @@
 lofar_add_package(InputProc)   # GPU cluster: Station Input Retrieval and Redistribution applications 
 lofar_add_package(OutputProc)  # GPU cluster: Data Storage applications
 lofar_add_package(GPUProc)     # GPU computation applications
-lofar_add_package(OpenCL_FFT)  # Apple's FFT library for OpenCL
 lofar_add_package(CoInterface) # CoInterface code between Cobalt packages
 lofar_add_package(CobaltTest)  # Overall Cobalt tests
 lofar_add_package(BrokenAntennaInfo)  # Library to provide broken antenna info
diff --git a/RTCP/Cobalt/CoInterface/CMakeLists.txt b/RTCP/Cobalt/CoInterface/CMakeLists.txt
index 9128832b18fe7d4c1184e879e01fd43314d27285..d00426e896ce0e738006a4aec66b87db52105623 100644
--- a/RTCP/Cobalt/CoInterface/CMakeLists.txt
+++ b/RTCP/Cobalt/CoInterface/CMakeLists.txt
@@ -1,12 +1,13 @@
 # $Id$
 
-lofar_package(CoInterface 1.0 DEPENDS ApplCommon Common Stream)
+lofar_package(CoInterface 1.0 DEPENDS ApplCommon Common Stream MessageBus)
 
 include(LofarFindPackage)
 lofar_find_package(Boost REQUIRED COMPONENTS date_time)
 lofar_find_package(UnitTest++)
 lofar_find_package(OpenMP REQUIRED)
 lofar_find_package(Valgrind)
+lofar_find_package(LibNuma)
 
 if(USE_VALGRIND)
   add_definitions(-DUSE_VALGRIND)
diff --git a/RTCP/Cobalt/CoInterface/src/BestEffortQueue.tcc b/RTCP/Cobalt/CoInterface/src/BestEffortQueue.tcc
index 1fa499c00534c96180cc77e704c41281267f02a5..4cbf108924f30bca532f93ffea1e19b41f61dde1 100644
--- a/RTCP/Cobalt/CoInterface/src/BestEffortQueue.tcc
+++ b/RTCP/Cobalt/CoInterface/src/BestEffortQueue.tcc
@@ -42,7 +42,7 @@ template <typename T> inline BestEffortQueue<T>::~BestEffortQueue()
 
 template <typename T> inline bool BestEffortQueue<T>::_overflow() const
 {
-  return this->itsSize > maxSize;
+  return this->itsQueue.size() > maxSize;
 }
 
 
diff --git a/RTCP/Cobalt/CoInterface/src/CMakeLists.txt b/RTCP/Cobalt/CoInterface/src/CMakeLists.txt
index 0f92407c39fffcbe85ba9b622c7432910434d1f8..f059bf193c91b334cac53e0fbfce6162970b57b2 100644
--- a/RTCP/Cobalt/CoInterface/src/CMakeLists.txt
+++ b/RTCP/Cobalt/CoInterface/src/CMakeLists.txt
@@ -9,6 +9,7 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
 
 lofar_add_library(cointerface
   Package__Version.cc
+  cpu_utils.cc
   Allocator.cc
   CorrelatedData.cc
   BlockID.cc
@@ -26,6 +27,12 @@ lofar_add_library(cointerface
 )
 
 lofar_add_bin_program(versioncointerface versioncointerface.cc)
+lofar_add_bin_program(send_state send_state.cc)
+lofar_add_bin_program(getCobaltHosts getCobaltHosts.cc)
 
 lofar_add_sbin_program(cmpfloat cmpfloat.cc)
 lofar_add_sbin_program(createFeedback createFeedback.cc)
+
+# install logprop files
+lofar_add_sysconf_files(
+  getCobaltHosts.log_prop)
diff --git a/RTCP/Cobalt/CoInterface/src/OMPThread.h b/RTCP/Cobalt/CoInterface/src/OMPThread.h
index 2914a0fe5bfc9d0162077558c5ea379c57e5a2c1..7134ed33ce21f8c97c32f3a329453af63d84b10c 100644
--- a/RTCP/Cobalt/CoInterface/src/OMPThread.h
+++ b/RTCP/Cobalt/CoInterface/src/OMPThread.h
@@ -32,15 +32,19 @@
 #include <Common/SystemCallException.h>
 #include <Common/Thread/Mutex.h>
 #include <Common/Thread/Condition.h>
+#include <Common/Thread/Thread.h>
 
 #include <CoInterface/SmartPtr.h>
 #include <CoInterface/TimeFuncs.h>
 #include <CoInterface/Exceptions.h>
+#include <CoInterface/cpu_utils.h>
 
 namespace LOFAR
 {
   namespace Cobalt
   {
+  // forward declare
+  class OMPThreadSet;
 
   /*
    * Represents an OpenMP thread. To use,
@@ -115,10 +119,11 @@ namespace LOFAR
         do {
           sendSIGHUP();
 
+          // Retry in 0.2 seconds
           TimeSpec::inc(deadline, 0.2);
         } while (!wait(deadline));
       } catch(Exception &ex) {
-        LOG_ERROR_STR("Caught exception: " << ex);
+        LOG_ERROR_STR("[Thread] kill: Caught exception: " << ex);
       }
     }
 
@@ -143,48 +148,30 @@ namespace LOFAR
     public:
       ScopedName(const std::string newName)
       :
-        oldName(get())
+        oldName(Thread::getName()),
+        newName(newName)
       {
-        set(newName);
+        rebindCPU(); // hack to do here
+
+        Thread::setMyName(newName);
+
+        LOG_DEBUG_STR("[Thread " << newName << "] Registered");
       }
 
       ~ScopedName() {
-        set(oldName);
+        Thread::setMyName(oldName);
+
+        LOG_DEBUG_STR("[Thread " << newName << "] Unregistered");
       }
 
     private:
       const std::string oldName;
-
-      void set(const std::string &name) const {
-#if defined(_GNU_SOURCE) && __GLIBC_PREREQ(2, 12)
-        // Inform the kernel of the thread name (only first 16 characters are used!)
-        int retval;
-
-        if ((retval = pthread_setname_np(pthread_self(), name.substr(0,15).c_str())) != 0)
-          throw SystemCallException("pthread_setname_np", retval, THROW_ARGS);
-#else
-        (void)name;
-#endif
-      }
-
-      std::string get() const {
-#if defined(_GNU_SOURCE) && __GLIBC_PREREQ(2, 12)
-        char cname[1024];
-
-        // Inform the kernel of the thread name (only first 16 characters are used!)
-        int retval;
-
-        if ((retval = pthread_getname_np(pthread_self(), &cname[0], sizeof cname)) != 0)
-          throw SystemCallException("pthread_getname_np", retval, THROW_ARGS);
-
-        return std::string(cname);
-#else
-        return "<unknown>";
-#endif
-      }
+      const std::string newName;
     };
 
   private:
+    friend class OMPThreadSet;
+
     const pthread_t id;
     bool stopped;
 
@@ -231,7 +218,7 @@ namespace LOFAR
   public:
     EXCEPTION_CLASS(CannotStartException, Exception);
 
-    OMPThreadSet(): stopped(false) {}
+    OMPThreadSet(const std::string &name): stopped(false), name(name) {}
 
     class ScopedRun {
     public:
@@ -266,12 +253,16 @@ namespace LOFAR
       for (size_t i = 0; i < threads.size(); ++i) {
         // Give the thread until `abstime' to finish up
         if (threads[i]->wait(abstime)) {
-          LOG_DEBUG_STR("Thread " << i << ": exited normally");
+          // NOTE: This thread died, so we cannot get its name. So don't request it with Thread::getName.
+          LOG_DEBUG_STR("[ThreadSet " << name << " #" << i << "/" << threads.size() << "] killAll: Thread exited normally");
         } else {
+          // NOTE: The thread may have died by now in case of a race condition. We don't count on the tid to be reused in
+          // this timeframe (we'll send a SIGHUP).
+
           // Kill the thread
-          LOG_DEBUG_STR("Thread " << i << ": killing...");
+          LOG_DEBUG_STR("[ThreadSet " << name << " #" << i << "/" << threads.size() << "] killAll: Killing");
           threads[i]->kill();
-          LOG_DEBUG_STR("Thread " << i << ": killed");
+          LOG_DEBUG_STR("[ThreadSet " << name << " #" << i << "/" << threads.size() << "] killAll: Killed");
 
           killed[i] = true;
         }
@@ -286,13 +277,14 @@ namespace LOFAR
 
     std::vector< SmartPtr<OMPThread> > threads;
     bool stopped;
+    const std::string name;
 
     // Add this thread to the set
     OMPThread &registerMe() {
       ScopedLock sl(mutex);
 
       if (stopped)
-        THROW(CannotStartException, "ThreadSet was ordered to stop before this thread started");
+        THROW(CannotStartException, "ThreadSet " << name << " was ordered to stop before this thread started");
 
       SmartPtr<OMPThread> t = new OMPThread;
 
@@ -320,7 +312,7 @@ namespace LOFAR
         }
       }
 
-      THROW(CoInterfaceException, "Unregistering thread that was not registered");
+      THROW(CoInterfaceException, "ThreadSet " << name << ": Unregistering thread that was not registered");
     }
   };
 
diff --git a/RTCP/Cobalt/CoInterface/src/Parset.cc b/RTCP/Cobalt/CoInterface/src/Parset.cc
index 330b75a6c12177bbf9534af20d60481a7fd5ac89..6473cded1f5a09b560116131f00512718748bc19 100644
--- a/RTCP/Cobalt/CoInterface/src/Parset.cc
+++ b/RTCP/Cobalt/CoInterface/src/Parset.cc
@@ -143,9 +143,12 @@ namespace LOFAR
 
     Parset::Parset(const string &name)
       :
-      ParameterSet(name.c_str()),
+      ParameterSet(),
       itsName(name)
     {
+      // adoptFile "merges" keys, which supresses warnings for duplicate keys, a mechanism (ab)used in many tests
+      adoptFile(name.c_str());
+
       // we check the parset once we can communicate any errors
       //check();
 
@@ -342,6 +345,8 @@ namespace LOFAR
       settings.corrections.bandPass   = getBool("Cobalt.correctBandPass", true);
       settings.corrections.clock      = getBool("Cobalt.correctClocks", true);
       settings.corrections.dedisperse = getBool("Cobalt.BeamFormer.coherentDedisperseChannels", true);
+       
+      settings.writeToDisk = getBool("Cobalt.writeToDisk", true);
 
       settings.delayCompensation.enabled              = getBool("Cobalt.delayCompensation", true);
       settings.delayCompensation.referencePhaseCenter = getDoubleVector("Observation.referencePhaseCenter", vector<double>(3,0), true);
@@ -416,7 +421,7 @@ namespace LOFAR
         struct ObservationSettings::AntennaField &antennaField = settings.antennaFields[i];
 
         antennaField.name            = settings.antennaFieldNames[i].fullName();
-        antennaField.inputStreams    = getStringVector(str(format("PIC.Core.%s.RSP.ports") % antennaField.name), emptyVectorString, true);
+        antennaField.inputStreams    = getStringVector(str(format("PIC.Core.%s.RSP.sources") % antennaField.name), emptyVectorString, true);
         antennaField.receiver        = getString(str(format("PIC.Core.%s.RSP.receiver") % antennaField.name), "");
 
         // NOTE: Support for clockCorrectionTime can be phased out when the
@@ -501,8 +506,9 @@ namespace LOFAR
 
         node.hostName = getString(prefix + "host", "localhost");
         node.cpu      = getInt(prefix + "cpu", -1);
+        node.avoidCores = getUint32Vector(prefix + "avoidCores", emptyVectorUnsigned, true);
         node.mpi_nic  = getString(prefix + "mpi_nic",  "");
-        node.gpus     = getUint32Vector(prefix + "gpus", vector<unsigned>(1,0)); // default to [0]
+        node.gpus     = getUint32Vector(prefix + "gpus", vector<unsigned>(1,0), true); // default to [0]
 
         // format: [CEP4:ib0,DragNet:ib0]
         node.out_nic  = "";
diff --git a/RTCP/Cobalt/CoInterface/src/Parset.h b/RTCP/Cobalt/CoInterface/src/Parset.h
index 4f9f67e11334f80c9bc8903db26d01aa287782be..507b9c51d5bbcb9a49eb0bd881651ea388c3de15 100644
--- a/RTCP/Cobalt/CoInterface/src/Parset.h
+++ b/RTCP/Cobalt/CoInterface/src/Parset.h
@@ -175,6 +175,9 @@ namespace LOFAR
       // key: Observation.bandFilter
       std::string bandFilter;
 
+      // If false, do NOT write output to disk
+      bool writeToDisk;
+
       struct AntennaFieldName {
         std::string station;
         std::string antennaField;
@@ -213,7 +216,7 @@ namespace LOFAR
 
         // The input streams descriptors
         //
-        // key: PIC.Core.CS001LBA.RSP.ports
+        // key: PIC.Core.CS001LBA.RSP.sources
         std::vector<std::string> inputStreams;
 
         // The node name on which this antenna field is received
@@ -300,6 +303,9 @@ namespace LOFAR
         // CPU socket number to bind to, or -1 to not bind to any
         int cpu;
 
+        // Cores to avoid binding to
+        std::vector<unsigned> avoidCores;
+
         // CUDA GPU numbers to bind to
         std::vector<unsigned> gpus;
 
diff --git a/RTCP/Cobalt/CoInterface/src/Pool.h b/RTCP/Cobalt/CoInterface/src/Pool.h
index c652243be2d4246bb72d94da16c117bb1caae48d..af2ef91bbb2bf521043186909737139d00122493 100644
--- a/RTCP/Cobalt/CoInterface/src/Pool.h
+++ b/RTCP/Cobalt/CoInterface/src/Pool.h
@@ -31,6 +31,12 @@ namespace LOFAR
     // The pool operates using a free and a filled queue to cycle through buffers. Producers
     // move elements free->filled, and consumers move elements filled->free. By
     // wrapping the elements in a SmartPtr, memory leaks are prevented.
+    //
+    // If warn_on_bad_performance == True, the queues will log warnings if they are not filled/freed
+    // fast enough (see Queue.h for more details).
+    //
+    // batch_size is the number of elements appended to "filled" in short repetition, too fast for the consumer
+    // to reasonably consume between appends.
     template <typename T>
     struct Pool
     {
@@ -39,10 +45,10 @@ namespace LOFAR
       Queue< SmartPtr<element_type> > free;
       Queue< SmartPtr<element_type> > filled;
 
-      Pool(const std::string &name, bool complain_on_empty_free_queue)
+      Pool(const std::string &name, bool warn_on_bad_performance, int batch_size = 1)
       :
-        free(name + " [.free]", complain_on_empty_free_queue),
-        filled(name + " [.filled]", false)
+        free(name + " [.free]", warn_on_bad_performance ? true : false, -1),
+        filled(name + " [.filled]", false, warn_on_bad_performance ? batch_size : -1)
       {
       }
     };
diff --git a/RTCP/Cobalt/CoInterface/src/Queue.h b/RTCP/Cobalt/CoInterface/src/Queue.h
index a249643746865a2dcd3de4d87af105aef514e9ab..c2c89ec08e1432664a3acaf3f1d875ddc762261a 100644
--- a/RTCP/Cobalt/CoInterface/src/Queue.h
+++ b/RTCP/Cobalt/CoInterface/src/Queue.h
@@ -39,18 +39,22 @@ namespace LOFAR {
 
   namespace Cobalt {
 
+// Double-ended queue, thread-safe
 template <typename T> class Queue
 {
   public:
     // Create a named queue
-    Queue(const std::string &name, bool warnIfEmptyOnRemove = false);
+    //
+    // warn_remove_on_empty_queue: Emit a log warning if remove() is called when the queue is empty.
+    // max_elements_on_append:     Emit a warning if append() overflowed the queue. -1 = disable.
+    Queue(const std::string &name = "", bool warn_remove_on_empty_queue = false, int max_elements_on_append = -1);
 
     // Log queue statistics
     ~Queue();
 
     // Add an element to the back of the queue.
     //
-    // If timed, this element is taken into account for timing statistics.
+    // If timed, this element is taken into account for statistics.
     //
     // Untimed items include:
     //   * Elements added to initially fill the queue, waiting for obs start.
@@ -69,6 +73,9 @@ template <typename T> class Queue
     struct timespec oldest() const;
     std::string name() const;
 
+    // Reset all collected statistics.
+    void reset_statistics();
+
   private:
     Queue(const Queue&);
     Queue& operator=(const Queue&);
@@ -76,10 +83,6 @@ template <typename T> class Queue
   protected:
     const std::string itsName;
 
-    // The number of elements in the queue. We maintain this info
-    // because itsQueue::size() is O(N), at least until C++11.
-    size_t itsSize;
-
     // The time an element spent in a queue
     RunningStatistics retention_time;
 
@@ -92,7 +95,8 @@ template <typename T> class Queue
     // The average queue size on append() (excluding the inserted element)
     RunningStatistics queue_size_on_append;
 
-    const bool warn_if_empty;
+    const bool warn_remove_on_empty_queue;
+    const int max_elements_on_append;
 
     struct Element {
       T value;
@@ -117,15 +121,15 @@ template <typename T> class Queue
 };
 
 
-template <typename T> Queue<T>::Queue(const std::string &name, bool warnIfEmptyOnRemove)
+template <typename T> Queue<T>::Queue(const std::string &name, bool warn_remove_on_empty_queue, int max_elements_on_append)
 :
   itsName(name),
-  itsSize(0),
   retention_time("s"),
   remove_on_empty_queue("%"),
   remove_wait_time("s"),
   queue_size_on_append("elements"),
-  warn_if_empty(warnIfEmptyOnRemove)
+  warn_remove_on_empty_queue(warn_remove_on_empty_queue),
+  max_elements_on_append(max_elements_on_append)
 {
 }
 
@@ -154,8 +158,33 @@ template <typename T> Queue<T>::~Queue()
    *                      Q holding items for processing: 0
    *
    */
-  if (itsName != "")
+  if (itsName != "") {
+    if (max_elements_on_append >= 0 && queue_size_on_append.mean() >= static_cast<size_t>(max_elements_on_append)) {
+      // This is a forward-feeding queue of elements holding data to be processed.
+      //
+      // Each element should disappear before the next one is offered. If not, the consumer of this queue
+      // does not process fast enough. Possible reasons include:
+      //    * The producer is blocked for resources (another queue, network, OS task scheduler, etc)
+      //    * The producer processes too slowly (requested load too high, or need more parallellisation)
+
+      LOG_WARN_STR("Queue " << itsName << " should always hold fewer than << max_elements_on_append << elements on append(). Queue had " << queue_size_on_append.mean() << " elements on append() (mean). At remove(), queue was empty " << remove_on_empty_queue.mean() << "% of the time. Time each element spent in queue: " << retention_time << ". In case of problems, look at the consume rate of this queue.");
+    }
+
+    if (warn_remove_on_empty_queue && remove_on_empty_queue.mean() > 0) {
+      // This is a back-feeding queue of empty elements to be reused.
+      //
+      // If this queue is empty, the consumer wants to process but can't, because it has to wait for this queue.
+      // This can incidentally happen, but is also a hint if performance is an issue. The thread replenishing this
+      // queue (through append()) apparently does not do so fast enough. This in turn could be caused by earlier
+      // problems, so looking for the first WARNING emitted by a remove() on an empty queue is key. Statistics of
+      // queues logically placed earlier in the pipeline can provide insight as well.
+
+      LOG_WARN_STR("Queue " << itsName << " should never be empty on remove(), always ready with data. Queue was empty " << remove_on_empty_queue.mean() << "% of the time. When empty, caller had to wait: " << remove_wait_time);
+    }
+
+    // Always log statistics for debugging, since it is invaluable information to debug incidental performance problems.
     LOG_INFO_STR("Queue " << itsName << ": avg #elements on append = " << queue_size_on_append.mean() << ", queue empty on remove = " << remove_on_empty_queue.mean() << "%, remove wait time = " << remove_wait_time.mean() << " s, element retention time: " << retention_time);
+  }
 }
 
 
@@ -178,7 +207,7 @@ template <typename T> inline void Queue<T>::unlocked_append(const T& element, bo
   e.arrival_time = timed ? TimeSpec::now() : TimeSpec::big_bang;
 
   // Record the queue size
-  queue_size_on_append.push(itsSize);
+  if (timed) queue_size_on_append.push(itsQueue.size());
 
   push_back(e);
 }
@@ -205,7 +234,6 @@ template <typename T> inline void Queue<T>::prepend(const T& element)
 template <typename T> inline void Queue<T>::push_front( const Element &e )
 {
   itsQueue.push_front(e);
-  itsSize++;
 
   itsNewElementAppended.signal();
 }
@@ -214,7 +242,6 @@ template <typename T> inline void Queue<T>::push_front( const Element &e )
 template <typename T> inline void Queue<T>::push_back( const Element &e )
 {
   itsQueue.push_back(e);
-  itsSize++;
 
   itsNewElementAppended.signal();
 }
@@ -224,7 +251,6 @@ template <typename T> inline typename Queue<T>::Element Queue<T>::pop_front()
 {
   Element e = itsQueue.front();
   itsQueue.pop_front();
-  itsSize--;
 
   return e;
 }
@@ -240,10 +266,10 @@ template <typename T> inline T Queue<T>::remove(const struct timespec &deadline,
 
   ScopedLock scopedLock(itsMutex);
 
-  const bool beganEmpty = itsSize == 0;
+  const bool beganEmpty = itsQueue.size() == 0;
   const struct timespec begin = TimeSpec::now();
 
-  if (beganEmpty && warn_if_empty)
+  if (beganEmpty && warn_remove_on_empty_queue)
     LOG_WARN_STR("remove() called on empty queue: " << name());
 
   while (itsQueue.empty())
@@ -274,8 +300,7 @@ template <typename T> inline unsigned Queue<T>::size() const
 {
   ScopedLock scopedLock(itsMutex);
 
-  // Note: list::size() is O(N)
-  return itsSize;
+  return itsQueue.size();
 }
 
 
@@ -298,6 +323,14 @@ template <typename T> inline std::string Queue<T>::name() const
   return itsName;
 }
 
+template <typename T> inline void Queue<T>::reset_statistics()
+{
+  retention_time.reset();
+  remove_on_empty_queue.reset();
+  remove_wait_time.reset();
+  queue_size_on_append.reset();
+}
+
 } // namespace Cobalt
 
 } // namespace LOFAR
diff --git a/RTCP/Cobalt/CoInterface/src/TABTranspose.cc b/RTCP/Cobalt/CoInterface/src/TABTranspose.cc
index e77c3c5f397560d1a258e6aeb7a7c4ddc3358e8f..533bf2f7a2218c51f12cbf92f8e96d88c090af39 100644
--- a/RTCP/Cobalt/CoInterface/src/TABTranspose.cc
+++ b/RTCP/Cobalt/CoInterface/src/TABTranspose.cc
@@ -227,10 +227,11 @@ void Block::write( BeamformedData &output ) {
   }
 
   // Report summary
-  if (complete())
+  if (complete()) {
     LOG_DEBUG_STR("[block " << blockIdx << " stream " << fileIdx << "] [Block] Written " << (nrSubbands - nrSubbandsLeft) << " subbands, lost " << nrSubbandsLeft << " subbands.");
-  else
+  } else {
     LOG_INFO_STR("[block " << blockIdx << " stream " << fileIdx << "] [Block] Written " << (nrSubbands - nrSubbandsLeft) << " subbands, lost " << nrSubbandsLeft << " subbands.");
+  }
 }
 
 
@@ -325,7 +326,7 @@ void BlockCollector::outputLoop() {
     outputPool.filled.append(output);
   }
 
-  outputPool.filled.append(NULL);
+  outputPool.filled.append(NULL, false);
 }
 
 
@@ -708,7 +709,7 @@ MultiSender::~MultiSender()
 void MultiSender::process( OMPThreadSet *threadSet )
 {
   // We need to register our threads somewhere...
-  OMPThreadSet dummySet;
+  OMPThreadSet dummySet("dummy");
 
   if (!threadSet)
     threadSet = &dummySet;
diff --git a/RTCP/Cobalt/CoInterface/src/cpu_utils.cc b/RTCP/Cobalt/CoInterface/src/cpu_utils.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2526cbcc9928d0ab8bbceeb49bb335edd8ebb4b1
--- /dev/null
+++ b/RTCP/Cobalt/CoInterface/src/cpu_utils.cc
@@ -0,0 +1,208 @@
+//# cpu_utils.cc
+//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
+//#
+//# This file is part of the LOFAR software suite.
+//# The LOFAR software suite is free software: you can redistribute it and/or
+//# modify it under the terms of the GNU General Public License as published
+//# by the Free Software Foundation, either version 3 of the License, or
+//# (at your option) any later version.
+//#
+//# The LOFAR software suite is distributed in the hope that it will be useful,
+//# but WITHOUT ANY WARRANTY; without even the implied warranty of
+//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//# GNU General Public License for more details.
+//#
+//# You should have received a copy of the GNU General Public License along
+//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+//#
+//# $Id$
+
+#include <lofar_config.h>
+
+#include <sched.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/mman.h>
+#include <fstream>
+#include <algorithm>
+#include <pthread.h>
+
+#include <Common/LofarLogger.h>
+#include <CoInterface/Parset.h>
+#include <CoInterface/Exceptions.h>
+#include <CoInterface/PrintVector.h>
+
+#ifdef HAVE_LIBNUMA
+#include <numa.h>
+#include <numaif.h>
+#endif
+
+#include <boost/format.hpp>
+#include <boost/lexical_cast.hpp>
+
+using namespace std;
+
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    static cpu_set_t lastRequestedBinding;
+    static bool requestedBinding = false;
+
+    static vector<unsigned> cpusetToVector(const cpu_set_t &cpuSet)
+    {
+       vector<unsigned> cores;
+
+       for (size_t c = 0; c < CPU_SETSIZE; c++)
+         if (CPU_ISSET(c, &cpuSet))
+           cores.push_back(c);
+
+       return cores;
+    }
+
+    vector<unsigned> cpuBinding()
+    {
+      cpu_set_t mask;
+      pthread_t thread = pthread_self();
+
+      if (pthread_getaffinity_np(thread, sizeof(cpu_set_t), &mask) != 0)
+        THROW_SYSCALL("pthread_getaffinity_np");
+
+      return cpusetToVector(mask);
+    }
+
+    void bindCPU(unsigned socket, const std::vector<unsigned> &skipCores)
+    {
+      LOG_DEBUG_STR("[NUMA] Binding to CPU " << socket);
+
+      // Get the number of cores
+      unsigned numCores = sysconf(_SC_NPROCESSORS_ONLN);
+
+      // Determine the cores local to the specified socket
+      vector<unsigned> localCores;
+
+      for (unsigned core = 0; core < numCores; ++core) {
+        // The file below contains an integer indicating the physical CPU
+        // hosting this core.
+        std::ifstream fs(str(boost::format("/sys/devices/system/cpu/cpu%u/topology/physical_package_id") % core).c_str());
+
+        unsigned physical_cpu;
+        fs >> physical_cpu;
+
+        if (!fs.good())
+          continue;
+
+        if (find(skipCores.begin(), skipCores.end(), core) != skipCores.end())
+          continue;
+
+        // Add this core to the mask if it matches the requested CPU
+        if (physical_cpu == socket)
+          localCores.push_back(core);
+      }
+
+      if (localCores.empty())
+        THROW(GPUProcException, "No suitable cores found for CPU: " << socket << " (avoiding cores " << skipCores << ")");
+
+      // put localCores in a cpu_set
+      cpu_set_t maskRequested;
+
+      CPU_ZERO(&maskRequested); 
+
+      for (vector<unsigned>::const_iterator i = localCores.begin(); i != localCores.end(); ++i)
+        CPU_SET(*i, &maskRequested);
+
+      LOG_INFO_STR("[NUMA] Requested core affinity: " << cpusetToVector(maskRequested));
+
+      // assign the mask and set the affinity
+      if (sched_setaffinity(0, sizeof(cpu_set_t), &maskRequested) != 0)
+        THROW_SYSCALL("sched_setaffinity");
+
+      lastRequestedBinding = maskRequested;
+      requestedBinding = true;
+    }
+
+    void rebindCPU() {
+      if (!requestedBinding)
+        // bindCPU() was never called
+        return;
+
+      // assign the mask and set the affinity
+      if (sched_setaffinity(0, sizeof(cpu_set_t), &lastRequestedBinding) != 0)
+        THROW_SYSCALL("sched_setaffinity");
+    }
+
+    void unlimitedLockedMemory() {
+      // Remove limits on locked memory
+      struct rlimit unlimited = { RLIM_INFINITY, RLIM_INFINITY };
+
+      if (setrlimit(RLIMIT_MEMLOCK, &unlimited) < 0)
+        THROW_SYSCALL("setrlimit(RLIMIT_MEMLOCK, unlimited)");
+    }
+
+    void lockAllMemory() {
+      if (mlockall(MCL_CURRENT | MCL_FUTURE) < 0)
+      {
+        THROW_SYSCALL("mlockall(MCL_CURRENT | MCL_FUTURE)");
+      } else {
+        LOG_DEBUG("All memory is now pinned.");
+      }
+    }
+
+    void bindMemory(int socket) {
+    #ifdef HAVE_LIBNUMA
+        if (numa_available() != -1) {
+          // force node + memory binding for future allocations
+          struct bitmask *numa_node = numa_allocate_nodemask();
+          numa_bitmask_clearall(numa_node);
+          numa_bitmask_setbit(numa_node, socket);
+          numa_bind(numa_node);
+          numa_bitmask_free(numa_node);
+
+          // only allow allocation on this node in case
+          // the numa_alloc_* functions are used
+          numa_set_strict(1);
+
+          // retrieve and report memory binding
+          numa_node = numa_get_membind();
+          vector<string> nodestrs;
+          for (size_t i = 0; i < numa_node->size; i++)
+            if (numa_bitmask_isbitset(numa_node, i))
+              nodestrs.push_back(str(boost::format("%s") % i));
+
+          // migrate currently used memory to our node
+          numa_migrate_pages(0, numa_all_nodes_ptr, numa_node);
+
+          numa_bitmask_free(numa_node);
+
+          LOG_DEBUG_STR("[NUMA] Bound to memory on nodes " << nodestrs);
+        } else {
+          LOG_INFO("[NUMA] Cannot bind memory: libnuma reports NUMA is not available");
+        }
+    #else
+        LOG_WARN("[NUMA] Cannot bind memory (no libnuma support)");
+    #endif
+    }
+
+    int socketOfMemory(void *ptr)
+    {
+    #ifdef HAVE_LIBNUMA
+      int status[1];
+      int ret_code;
+
+      status[0] = -1;
+      ret_code = numa_move_pages(0 /*self memory */, 1, &ptr,
+        NULL, status, 0);
+
+      if (ret_code) {
+        THROW_SYSCALL("numa_move_pages");
+      }
+
+      return status[0];
+    #else
+      return -1;
+    #endif
+    }
+  }
+}
+
diff --git a/RTCP/Cobalt/GPUProc/src/cpu_utils.h b/RTCP/Cobalt/CoInterface/src/cpu_utils.h
similarity index 50%
rename from RTCP/Cobalt/GPUProc/src/cpu_utils.h
rename to RTCP/Cobalt/CoInterface/src/cpu_utils.h
index 5bbc2e4f2b84eeeae7d0c396f7496fc70df6a5bf..f3df35427b9073bc5e585c12f843558c122e6765 100644
--- a/RTCP/Cobalt/GPUProc/src/cpu_utils.h
+++ b/RTCP/Cobalt/CoInterface/src/cpu_utils.h
@@ -21,16 +21,40 @@
 // \file
 // Include for processor optimalizetion functionality
 
-#ifndef LOFAR_GPUPROC_CPU_INCL_H
-#define LOFAR_GPUPROC_CPU_INCL_H
+#ifndef LOFAR_COINTERFACE_CPU_UTILS_H
+#define LOFAR_COINTERFACE_CPU_UTILS_H
+
 #include <CoInterface/Parset.h>
+#include <vector>
+
 namespace LOFAR
 {
   namespace Cobalt
   {
-    // Set the correct processer affinity for a COBALT system
-    // This will result in less then optimal performance on NON COBALT SYSTEMS!
-    void setProcessorAffinity(unsigned procId);
+    // Request no limit on amount of locked memory.
+    // Throws a SystemCallException on failure.
+    void unlimitedLockedMemory();
+
+    // Locks all memory, current and future, to prevent it from being swapped.
+    // Throws a SystemCallException on failure.
+    void lockAllMemory();
+
+    // Bind the thread to the specified socket, saves this configuration for rebindCPU()
+    void bindCPU(unsigned socket, const std::vector<unsigned> &skipCores = std::vector<unsigned>());
+
+    // Bind the thread to the same cores specified earlier, to restore the configuration
+    void rebindCPU();
+
+    // Returns all cores we are bound to
+    std::vector<unsigned> cpuBinding();
+
+    // Bind the memory to the specified socket. Moves already allocated memory.
+    //
+    // NOTE: Does NOT move pinned memory, f.e. created by pinAllMemory() or cuMemHostAlloc()
+    void bindMemory(int socket);
+
+    // Return the socket hosting the given memory (or -1 if unknown)
+    int socketOfMemory(void *ptr);
   }
 }
 #endif
diff --git a/RTCP/Cobalt/GPUProc/src/getOutputProcHosts.cc b/RTCP/Cobalt/CoInterface/src/getCobaltHosts.cc
similarity index 52%
rename from RTCP/Cobalt/GPUProc/src/getOutputProcHosts.cc
rename to RTCP/Cobalt/CoInterface/src/getCobaltHosts.cc
index 826027e06f980c67b7fe66d5f6b1520b681d644a..87915d2c507ddbc778d9871d0ee51ecdc621a216 100644
--- a/RTCP/Cobalt/GPUProc/src/getOutputProcHosts.cc
+++ b/RTCP/Cobalt/CoInterface/src/getCobaltHosts.cc
@@ -1,4 +1,4 @@
-//# getOutputProcHosts.cc: Real-Time Central Processor application, GPU cluster version
+//# getCobaltHosts.cc: Real-Time Central Processor application, GPU cluster version
 //# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
@@ -33,14 +33,13 @@ using namespace LOFAR::Cobalt;
 
 static void usage(const char *argv0)
 {
-  cerr << "getOutputProcHosts: Helper program used in combination with rtcp" << endl;
-  cerr << "Outputs a space seperate list of outputProc hosts on the stdout" << endl;
-  cerr << "These hosts are retrieved using the parset (parset) class" << endl;
-
+  cerr << "Helper program used in combination with rtcp" << endl;
+  cerr << "Extracts information from a parset and prints it in a machine-readable format." << endl;
   cerr << endl;
-  cerr << "Usage: " << argv0 << " parset" << endl;
+  cerr << "Usage: " << argv0 << " [-O] [-C] parset" << endl;
   cerr << endl;
-
+  cerr << "  -O  Prints a space seperate list of outputProc hosts" << endl;
+  cerr << "  -C  Prints the host that commands the run (first host GPUProc runs on)." << endl;
 }
 
 int main(int argc, char **argv)
@@ -50,8 +49,18 @@ int main(int argc, char **argv)
   */
 
   int opt;
-  while ((opt = getopt(argc, argv, "h")) != -1) {
+  bool printOutputProcHosts = false;
+  bool printCommandHost = false;
+
+  while ((opt = getopt(argc, argv, "hOC")) != -1) {
     switch (opt) {
+    case 'O':
+      printOutputProcHosts = true;
+      break;
+
+    case 'C':
+      printCommandHost = true;
+      break;
 
     default: /* '?' */
       usage(argv[0]);
@@ -65,21 +74,35 @@ int main(int argc, char **argv)
     exit(1);
   }
 
-  INIT_LOGGER("getOutputProcHosts");
+  INIT_LOGGER("getCobaltHosts");
 
   // Open the parset
   Parset ps(argv[optind]);
 
-  // Get the list of stations and output to stdout space separated
-  std::vector<string>::const_iterator host = ps.settings.outputProcHosts.begin();
-  if (host != ps.settings.outputProcHosts.end()) {
-    cout << *host;
-    ++host;
+  if (printOutputProcHosts) {
+    // Get the list of stations and output to stdout space separated
+    std::vector<string>::const_iterator host = ps.settings.outputProcHosts.begin();
+    if (host != ps.settings.outputProcHosts.end()) {
+      cout << *host;
+      ++host;
 
-    for ( ; host != ps.settings.outputProcHosts.end(); ++host) {
-      cout << ' ' << *host;
+      for ( ; host != ps.settings.outputProcHosts.end(); ++host) {
+        cout << ' ' << *host;
+      }
     }
+
+    return 0;
+  }
+
+  if (printCommandHost) {
+    // Print commanding host, that is, the one that will run on MPI rank 0.
+    ASSERT(ps.settings.nodes.size() > 0);
+
+    cout << ps.settings.nodes[0].hostName << endl;
+    return 0;
   }
 
-  return 0;
+  // Nothing to do -- print usage and fail
+  usage(argv[0]);
+  return 1;
 }
diff --git a/RTCP/Cobalt/GPUProc/src/getOutputProcHosts.log_prop b/RTCP/Cobalt/CoInterface/src/getCobaltHosts.log_prop
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/getOutputProcHosts.log_prop
rename to RTCP/Cobalt/CoInterface/src/getCobaltHosts.log_prop
diff --git a/RTCP/Cobalt/GPUProc/src/send_state.cc b/RTCP/Cobalt/CoInterface/src/send_state.cc
similarity index 97%
rename from RTCP/Cobalt/GPUProc/src/send_state.cc
rename to RTCP/Cobalt/CoInterface/src/send_state.cc
index ffe247badac7ca62a2f04ab93f338b61121cbde0..2f352e9bd6b568aa4bdf8854d7c652e2cc1712fc 100644
--- a/RTCP/Cobalt/GPUProc/src/send_state.cc
+++ b/RTCP/Cobalt/CoInterface/src/send_state.cc
@@ -24,6 +24,7 @@
 #include <CoInterface/Parset.h>
 #include <MessageBus/MessageBus.h>
 #include <MessageBus/ToBus.h>
+#include <MessageBus/Util.h>
 #include <MessageBus/Protocols/TaskFeedbackState.h>
 
 #include <boost/format.hpp>
@@ -84,7 +85,7 @@ int main(int argc, char **argv)
   int success = atoi(argv[optind+1]);
 
   // send status feedback
-  ToBus bus("lofar.task.feedback.state");
+  ToBus bus("mac.task.feedback.state", broker_state());
 
   Protocols::TaskFeedbackState msg(
     "Cobalt/GPUProc/send_state",
diff --git a/RTCP/Cobalt/CoInterface/test/CMakeLists.txt b/RTCP/Cobalt/CoInterface/test/CMakeLists.txt
index b383745ec7777857ed0ffe5b83939f7a0cd369b3..01430e15d4d7c273a74d756c73b47dbf64fb12d3 100644
--- a/RTCP/Cobalt/CoInterface/test/CMakeLists.txt
+++ b/RTCP/Cobalt/CoInterface/test/CMakeLists.txt
@@ -15,6 +15,7 @@ lofar_add_test(tRSP tRSP.cc)
 
 
 if(UNITTEST++_FOUND)
+  lofar_add_test(t_cpu_utils t_cpu_utils.cc)
   lofar_add_test(tAlign tAlign.cc)
   lofar_add_test(tOMPThread tOMPThread.cc)
   lofar_add_test(tParset tParset.cc tParsetDefault.cc)
diff --git a/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/cluster.parset b/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/cluster.parset
index b8cc94121c6ab02278b4be5507cf2f895d5dbd44..d33074c0f69b46b384e372ebfd8277cc8c0fd27c 100644
--- a/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/cluster.parset
+++ b/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/cluster.parset
@@ -6361,293 +6361,293 @@ PIC.Core.UK608LBA.phaseCenter = [4008438.457, -100309.725, 4943735.828]
 PIC.Core.UK608HBA.phaseCenter = [4008461.941, -100376.609, 4943716.874]
 
 # StationStreams.parset  This file is generated by generateStationStreams.sh
-PIC.Core.CS001HBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS001HBA0.RSP.ports    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA0.RSP.sources    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS001HBA1.RSP.ports    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
+PIC.Core.CS001HBA1.RSP.sources    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
 PIC.Core.CS001HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS001LBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001LBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS002HBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS002HBA0.RSP.ports    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA0.RSP.sources    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS002HBA1.RSP.ports    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
+PIC.Core.CS002HBA1.RSP.sources    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
 PIC.Core.CS002HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS002LBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002LBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS003HBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS003HBA0.RSP.ports    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA0.RSP.sources    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS003HBA1.RSP.ports    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
+PIC.Core.CS003HBA1.RSP.sources    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
 PIC.Core.CS003HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS003LBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003LBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS004HBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS004HBA0.RSP.ports    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA0.RSP.sources    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS004HBA1.RSP.ports    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
+PIC.Core.CS004HBA1.RSP.sources    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
 PIC.Core.CS004HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS004LBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004LBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS005HBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS005HBA0.RSP.ports    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA0.RSP.sources    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS005HBA1.RSP.ports    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
+PIC.Core.CS005HBA1.RSP.sources    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
 PIC.Core.CS005HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS005LBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005LBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS006HBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS006HBA0.RSP.ports    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA0.RSP.sources    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS006HBA1.RSP.ports    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
+PIC.Core.CS006HBA1.RSP.sources    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
 PIC.Core.CS006HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS006LBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006LBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS007HBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS007HBA0.RSP.ports    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA0.RSP.sources    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS007HBA1.RSP.ports    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
+PIC.Core.CS007HBA1.RSP.sources    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
 PIC.Core.CS007HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS007LBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007LBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS011HBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS011HBA0.RSP.ports    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA0.RSP.sources    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS011HBA1.RSP.ports    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
+PIC.Core.CS011HBA1.RSP.sources    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
 PIC.Core.CS011HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS011LBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011LBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS013HBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS013HBA0.RSP.ports    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA0.RSP.sources    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS013HBA1.RSP.ports    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
+PIC.Core.CS013HBA1.RSP.sources    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
 PIC.Core.CS013HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS013LBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013LBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS017HBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS017HBA0.RSP.ports    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA0.RSP.sources    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS017HBA1.RSP.ports    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
+PIC.Core.CS017HBA1.RSP.sources    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
 PIC.Core.CS017HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS017LBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017LBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS021HBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS021HBA0.RSP.ports    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA0.RSP.sources    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS021HBA1.RSP.ports    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
+PIC.Core.CS021HBA1.RSP.sources    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
 PIC.Core.CS021HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS021LBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021LBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS024HBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS024HBA0.RSP.ports    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA0.RSP.sources    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS024HBA1.RSP.ports    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
+PIC.Core.CS024HBA1.RSP.sources    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
 PIC.Core.CS024HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS024LBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024LBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS026HBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS026HBA0.RSP.ports    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA0.RSP.sources    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS026HBA1.RSP.ports    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
+PIC.Core.CS026HBA1.RSP.sources    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
 PIC.Core.CS026HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS026LBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026LBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS028HBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA.RSP.receiver  = cbt003_1
-PIC.Core.CS028HBA0.RSP.ports    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA0.RSP.sources    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA0.RSP.receiver = cbt003_1
-PIC.Core.CS028HBA1.RSP.ports    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
+PIC.Core.CS028HBA1.RSP.sources    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
 PIC.Core.CS028HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS028LBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028LBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028LBA.RSP.receiver  = cbt003_1
-PIC.Core.CS030HBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS030HBA0.RSP.ports    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA0.RSP.sources    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS030HBA1.RSP.ports    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
+PIC.Core.CS030HBA1.RSP.sources    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
 PIC.Core.CS030HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS030LBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030LBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS031HBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS031HBA0.RSP.ports    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA0.RSP.sources    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS031HBA1.RSP.ports    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
+PIC.Core.CS031HBA1.RSP.sources    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
 PIC.Core.CS031HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS031LBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031LBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS032HBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS032HBA0.RSP.ports    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA0.RSP.sources    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS032HBA1.RSP.ports    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
+PIC.Core.CS032HBA1.RSP.sources    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
 PIC.Core.CS032HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS032LBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032LBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS101HBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA.RSP.receiver  = cbt001_1
-PIC.Core.CS101HBA0.RSP.ports    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA0.RSP.sources    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA0.RSP.receiver = cbt001_1
-PIC.Core.CS101HBA1.RSP.ports    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
+PIC.Core.CS101HBA1.RSP.sources    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
 PIC.Core.CS101HBA1.RSP.receiver = cbt001_1
-PIC.Core.CS101LBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101LBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101LBA.RSP.receiver  = cbt001_1
-PIC.Core.CS103HBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS103HBA0.RSP.ports    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA0.RSP.sources    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS103HBA1.RSP.ports    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
+PIC.Core.CS103HBA1.RSP.sources    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
 PIC.Core.CS103HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS103LBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103LBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS201HBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS201HBA0.RSP.ports    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA0.RSP.sources    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS201HBA1.RSP.ports    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
+PIC.Core.CS201HBA1.RSP.sources    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
 PIC.Core.CS201HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS201LBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201LBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS301HBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA.RSP.receiver  = cbt005_1
-PIC.Core.CS301HBA0.RSP.ports    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA0.RSP.sources    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA0.RSP.receiver = cbt005_1
-PIC.Core.CS301HBA1.RSP.ports    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
+PIC.Core.CS301HBA1.RSP.sources    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
 PIC.Core.CS301HBA1.RSP.receiver = cbt005_1
-PIC.Core.CS301LBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301LBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301LBA.RSP.receiver  = cbt005_1
-PIC.Core.CS302HBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS302HBA0.RSP.ports    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA0.RSP.sources    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS302HBA1.RSP.ports    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
+PIC.Core.CS302HBA1.RSP.sources    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
 PIC.Core.CS302HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS302LBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302LBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS401HBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA.RSP.receiver  = cbt007_1
-PIC.Core.CS401HBA0.RSP.ports    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA0.RSP.sources    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA0.RSP.receiver = cbt007_1
-PIC.Core.CS401HBA1.RSP.ports    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
+PIC.Core.CS401HBA1.RSP.sources    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
 PIC.Core.CS401HBA1.RSP.receiver = cbt007_1
-PIC.Core.CS401LBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401LBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401LBA.RSP.receiver  = cbt007_1
-PIC.Core.CS501HBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA.RSP.receiver  = cbt006_1
-PIC.Core.CS501HBA0.RSP.ports    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA0.RSP.sources    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA0.RSP.receiver = cbt006_1
-PIC.Core.CS501HBA1.RSP.ports    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
+PIC.Core.CS501HBA1.RSP.sources    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
 PIC.Core.CS501HBA1.RSP.receiver = cbt006_1
-PIC.Core.CS501LBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501LBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501LBA.RSP.receiver  = cbt006_1
-PIC.Core.DE601HBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601HBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE601LBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601LBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601LBA.RSP.receiver  = cbt008_1
-PIC.Core.DE602HBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602HBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE602LBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602LBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE603HBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603HBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603HBA.RSP.receiver  = cbt004_1
-PIC.Core.DE603LBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603LBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603LBA.RSP.receiver  = cbt004_1
-PIC.Core.DE604HBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604HBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE604LBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604LBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE605HBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605HBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE605LBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605LBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605LBA.RSP.receiver  = cbt008_1
-PIC.Core.FR606HBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606HBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606HBA.RSP.receiver  = cbt005_1
-PIC.Core.FR606LBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606LBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS104HBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104HBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS104LBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104LBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS106HBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106HBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS106LBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106LBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS205HBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205HBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS205LBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205LBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS208HBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208HBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS208LBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208LBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS210HBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210HBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210HBA.RSP.receiver  = cbt005_1
-PIC.Core.RS210LBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210LBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS305HBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305HBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS305LBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305LBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS306HBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306HBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306HBA.RSP.receiver  = cbt005_0
-PIC.Core.RS306LBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306LBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306LBA.RSP.receiver  = cbt005_0
-PIC.Core.RS307HBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307HBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS307LBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307LBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS310HBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310HBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS310LBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310LBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS406HBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406HBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS406LBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406LBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS407HBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407HBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS407LBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407LBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS409HBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409HBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS409LBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409LBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410HBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410HBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410LBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410LBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS503HBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503HBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS503LBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503LBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS508HBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508HBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS508LBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508LBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS509HBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509HBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS509LBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509LBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509LBA.RSP.receiver  = cbt007_1
-PIC.Core.SE607HBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607HBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607HBA.RSP.receiver  = cbt006_1
-PIC.Core.SE607LBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607LBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607LBA.RSP.receiver  = cbt006_1
-PIC.Core.UK608HBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608HBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608HBA.RSP.receiver  = cbt005_1
-PIC.Core.UK608LBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608LBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608LBA.RSP.receiver  = cbt005_1
 ApplCtrl.application=CorrAppl
 ApplCtrl.processes=[CorrProc]
diff --git a/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/correlated.parset b/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/correlated.parset
index 096dee07523092196eafae26ac3fadf766085bc4..947ead7d04bededc3cd4fc1c801addb43a00a64b 100644
--- a/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/correlated.parset
+++ b/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/correlated.parset
@@ -6361,293 +6361,293 @@ PIC.Core.UK608LBA.phaseCenter = [4008438.457, -100309.725, 4943735.828]
 PIC.Core.UK608HBA.phaseCenter = [4008461.941, -100376.609, 4943716.874]
 
 # StationStreams.parset  This file is generated by generateStationStreams.sh
-PIC.Core.CS001HBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS001HBA0.RSP.ports    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA0.RSP.sources    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS001HBA1.RSP.ports    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
+PIC.Core.CS001HBA1.RSP.sources    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
 PIC.Core.CS001HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS001LBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001LBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS002HBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS002HBA0.RSP.ports    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA0.RSP.sources    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS002HBA1.RSP.ports    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
+PIC.Core.CS002HBA1.RSP.sources    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
 PIC.Core.CS002HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS002LBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002LBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS003HBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS003HBA0.RSP.ports    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA0.RSP.sources    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS003HBA1.RSP.ports    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
+PIC.Core.CS003HBA1.RSP.sources    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
 PIC.Core.CS003HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS003LBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003LBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS004HBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS004HBA0.RSP.ports    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA0.RSP.sources    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS004HBA1.RSP.ports    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
+PIC.Core.CS004HBA1.RSP.sources    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
 PIC.Core.CS004HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS004LBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004LBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS005HBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS005HBA0.RSP.ports    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA0.RSP.sources    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS005HBA1.RSP.ports    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
+PIC.Core.CS005HBA1.RSP.sources    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
 PIC.Core.CS005HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS005LBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005LBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS006HBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS006HBA0.RSP.ports    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA0.RSP.sources    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS006HBA1.RSP.ports    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
+PIC.Core.CS006HBA1.RSP.sources    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
 PIC.Core.CS006HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS006LBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006LBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS007HBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS007HBA0.RSP.ports    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA0.RSP.sources    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS007HBA1.RSP.ports    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
+PIC.Core.CS007HBA1.RSP.sources    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
 PIC.Core.CS007HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS007LBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007LBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS011HBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS011HBA0.RSP.ports    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA0.RSP.sources    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS011HBA1.RSP.ports    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
+PIC.Core.CS011HBA1.RSP.sources    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
 PIC.Core.CS011HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS011LBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011LBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS013HBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS013HBA0.RSP.ports    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA0.RSP.sources    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS013HBA1.RSP.ports    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
+PIC.Core.CS013HBA1.RSP.sources    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
 PIC.Core.CS013HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS013LBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013LBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS017HBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS017HBA0.RSP.ports    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA0.RSP.sources    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS017HBA1.RSP.ports    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
+PIC.Core.CS017HBA1.RSP.sources    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
 PIC.Core.CS017HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS017LBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017LBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS021HBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS021HBA0.RSP.ports    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA0.RSP.sources    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS021HBA1.RSP.ports    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
+PIC.Core.CS021HBA1.RSP.sources    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
 PIC.Core.CS021HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS021LBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021LBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS024HBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS024HBA0.RSP.ports    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA0.RSP.sources    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS024HBA1.RSP.ports    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
+PIC.Core.CS024HBA1.RSP.sources    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
 PIC.Core.CS024HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS024LBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024LBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS026HBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS026HBA0.RSP.ports    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA0.RSP.sources    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS026HBA1.RSP.ports    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
+PIC.Core.CS026HBA1.RSP.sources    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
 PIC.Core.CS026HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS026LBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026LBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS028HBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA.RSP.receiver  = cbt003_1
-PIC.Core.CS028HBA0.RSP.ports    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA0.RSP.sources    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA0.RSP.receiver = cbt003_1
-PIC.Core.CS028HBA1.RSP.ports    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
+PIC.Core.CS028HBA1.RSP.sources    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
 PIC.Core.CS028HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS028LBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028LBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028LBA.RSP.receiver  = cbt003_1
-PIC.Core.CS030HBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS030HBA0.RSP.ports    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA0.RSP.sources    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS030HBA1.RSP.ports    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
+PIC.Core.CS030HBA1.RSP.sources    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
 PIC.Core.CS030HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS030LBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030LBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS031HBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS031HBA0.RSP.ports    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA0.RSP.sources    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS031HBA1.RSP.ports    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
+PIC.Core.CS031HBA1.RSP.sources    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
 PIC.Core.CS031HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS031LBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031LBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS032HBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS032HBA0.RSP.ports    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA0.RSP.sources    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS032HBA1.RSP.ports    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
+PIC.Core.CS032HBA1.RSP.sources    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
 PIC.Core.CS032HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS032LBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032LBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS101HBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA.RSP.receiver  = cbt001_1
-PIC.Core.CS101HBA0.RSP.ports    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA0.RSP.sources    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA0.RSP.receiver = cbt001_1
-PIC.Core.CS101HBA1.RSP.ports    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
+PIC.Core.CS101HBA1.RSP.sources    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
 PIC.Core.CS101HBA1.RSP.receiver = cbt001_1
-PIC.Core.CS101LBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101LBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101LBA.RSP.receiver  = cbt001_1
-PIC.Core.CS103HBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS103HBA0.RSP.ports    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA0.RSP.sources    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS103HBA1.RSP.ports    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
+PIC.Core.CS103HBA1.RSP.sources    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
 PIC.Core.CS103HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS103LBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103LBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS201HBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS201HBA0.RSP.ports    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA0.RSP.sources    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS201HBA1.RSP.ports    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
+PIC.Core.CS201HBA1.RSP.sources    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
 PIC.Core.CS201HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS201LBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201LBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS301HBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA.RSP.receiver  = cbt005_1
-PIC.Core.CS301HBA0.RSP.ports    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA0.RSP.sources    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA0.RSP.receiver = cbt005_1
-PIC.Core.CS301HBA1.RSP.ports    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
+PIC.Core.CS301HBA1.RSP.sources    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
 PIC.Core.CS301HBA1.RSP.receiver = cbt005_1
-PIC.Core.CS301LBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301LBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301LBA.RSP.receiver  = cbt005_1
-PIC.Core.CS302HBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS302HBA0.RSP.ports    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA0.RSP.sources    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS302HBA1.RSP.ports    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
+PIC.Core.CS302HBA1.RSP.sources    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
 PIC.Core.CS302HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS302LBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302LBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS401HBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA.RSP.receiver  = cbt007_1
-PIC.Core.CS401HBA0.RSP.ports    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA0.RSP.sources    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA0.RSP.receiver = cbt007_1
-PIC.Core.CS401HBA1.RSP.ports    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
+PIC.Core.CS401HBA1.RSP.sources    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
 PIC.Core.CS401HBA1.RSP.receiver = cbt007_1
-PIC.Core.CS401LBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401LBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401LBA.RSP.receiver  = cbt007_1
-PIC.Core.CS501HBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA.RSP.receiver  = cbt006_1
-PIC.Core.CS501HBA0.RSP.ports    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA0.RSP.sources    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA0.RSP.receiver = cbt006_1
-PIC.Core.CS501HBA1.RSP.ports    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
+PIC.Core.CS501HBA1.RSP.sources    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
 PIC.Core.CS501HBA1.RSP.receiver = cbt006_1
-PIC.Core.CS501LBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501LBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501LBA.RSP.receiver  = cbt006_1
-PIC.Core.DE601HBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601HBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE601LBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601LBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601LBA.RSP.receiver  = cbt008_1
-PIC.Core.DE602HBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602HBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE602LBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602LBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE603HBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603HBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603HBA.RSP.receiver  = cbt004_1
-PIC.Core.DE603LBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603LBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603LBA.RSP.receiver  = cbt004_1
-PIC.Core.DE604HBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604HBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE604LBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604LBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE605HBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605HBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE605LBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605LBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605LBA.RSP.receiver  = cbt008_1
-PIC.Core.FR606HBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606HBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606HBA.RSP.receiver  = cbt005_1
-PIC.Core.FR606LBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606LBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS104HBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104HBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS104LBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104LBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS106HBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106HBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS106LBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106LBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS205HBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205HBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS205LBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205LBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS208HBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208HBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS208LBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208LBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS210HBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210HBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210HBA.RSP.receiver  = cbt005_1
-PIC.Core.RS210LBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210LBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS305HBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305HBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS305LBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305LBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS306HBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306HBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306HBA.RSP.receiver  = cbt005_0
-PIC.Core.RS306LBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306LBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306LBA.RSP.receiver  = cbt005_0
-PIC.Core.RS307HBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307HBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS307LBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307LBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS310HBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310HBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS310LBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310LBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS406HBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406HBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS406LBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406LBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS407HBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407HBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS407LBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407LBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS409HBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409HBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS409LBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409LBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410HBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410HBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410LBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410LBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS503HBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503HBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS503LBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503LBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS508HBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508HBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS508LBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508LBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS509HBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509HBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS509LBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509LBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509LBA.RSP.receiver  = cbt007_1
-PIC.Core.SE607HBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607HBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607HBA.RSP.receiver  = cbt006_1
-PIC.Core.SE607LBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607LBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607LBA.RSP.receiver  = cbt006_1
-PIC.Core.UK608HBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608HBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608HBA.RSP.receiver  = cbt005_1
-PIC.Core.UK608LBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608LBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608LBA.RSP.receiver  = cbt005_1
 ApplCtrl.application=CorrAppl
 ApplCtrl.processes=[CorrProc]
diff --git a/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/cs+is.parset b/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/cs+is.parset
index 4b84d95498d3dec9b9c561a0bf6addd3653c8c61..936f6a5db854dac27230baa403f6ea1548745fc4 100644
--- a/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/cs+is.parset
+++ b/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/cs+is.parset
@@ -6361,293 +6361,293 @@ PIC.Core.UK608LBA.phaseCenter = [4008438.457, -100309.725, 4943735.828]
 PIC.Core.UK608HBA.phaseCenter = [4008461.941, -100376.609, 4943716.874]
 
 # StationStreams.parset  This file is generated by generateStationStreams.sh
-PIC.Core.CS001HBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS001HBA0.RSP.ports    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA0.RSP.sources    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS001HBA1.RSP.ports    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
+PIC.Core.CS001HBA1.RSP.sources    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
 PIC.Core.CS001HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS001LBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001LBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS002HBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS002HBA0.RSP.ports    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA0.RSP.sources    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS002HBA1.RSP.ports    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
+PIC.Core.CS002HBA1.RSP.sources    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
 PIC.Core.CS002HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS002LBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002LBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS003HBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS003HBA0.RSP.ports    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA0.RSP.sources    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS003HBA1.RSP.ports    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
+PIC.Core.CS003HBA1.RSP.sources    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
 PIC.Core.CS003HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS003LBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003LBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS004HBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS004HBA0.RSP.ports    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA0.RSP.sources    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS004HBA1.RSP.ports    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
+PIC.Core.CS004HBA1.RSP.sources    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
 PIC.Core.CS004HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS004LBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004LBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS005HBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS005HBA0.RSP.ports    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA0.RSP.sources    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS005HBA1.RSP.ports    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
+PIC.Core.CS005HBA1.RSP.sources    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
 PIC.Core.CS005HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS005LBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005LBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS006HBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS006HBA0.RSP.ports    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA0.RSP.sources    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS006HBA1.RSP.ports    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
+PIC.Core.CS006HBA1.RSP.sources    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
 PIC.Core.CS006HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS006LBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006LBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS007HBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS007HBA0.RSP.ports    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA0.RSP.sources    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS007HBA1.RSP.ports    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
+PIC.Core.CS007HBA1.RSP.sources    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
 PIC.Core.CS007HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS007LBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007LBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS011HBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS011HBA0.RSP.ports    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA0.RSP.sources    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS011HBA1.RSP.ports    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
+PIC.Core.CS011HBA1.RSP.sources    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
 PIC.Core.CS011HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS011LBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011LBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS013HBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS013HBA0.RSP.ports    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA0.RSP.sources    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS013HBA1.RSP.ports    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
+PIC.Core.CS013HBA1.RSP.sources    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
 PIC.Core.CS013HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS013LBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013LBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS017HBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS017HBA0.RSP.ports    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA0.RSP.sources    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS017HBA1.RSP.ports    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
+PIC.Core.CS017HBA1.RSP.sources    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
 PIC.Core.CS017HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS017LBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017LBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS021HBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS021HBA0.RSP.ports    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA0.RSP.sources    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS021HBA1.RSP.ports    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
+PIC.Core.CS021HBA1.RSP.sources    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
 PIC.Core.CS021HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS021LBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021LBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS024HBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS024HBA0.RSP.ports    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA0.RSP.sources    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS024HBA1.RSP.ports    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
+PIC.Core.CS024HBA1.RSP.sources    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
 PIC.Core.CS024HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS024LBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024LBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS026HBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS026HBA0.RSP.ports    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA0.RSP.sources    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS026HBA1.RSP.ports    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
+PIC.Core.CS026HBA1.RSP.sources    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
 PIC.Core.CS026HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS026LBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026LBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS028HBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA.RSP.receiver  = cbt003_1
-PIC.Core.CS028HBA0.RSP.ports    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA0.RSP.sources    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA0.RSP.receiver = cbt003_1
-PIC.Core.CS028HBA1.RSP.ports    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
+PIC.Core.CS028HBA1.RSP.sources    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
 PIC.Core.CS028HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS028LBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028LBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028LBA.RSP.receiver  = cbt003_1
-PIC.Core.CS030HBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS030HBA0.RSP.ports    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA0.RSP.sources    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS030HBA1.RSP.ports    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
+PIC.Core.CS030HBA1.RSP.sources    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
 PIC.Core.CS030HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS030LBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030LBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS031HBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS031HBA0.RSP.ports    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA0.RSP.sources    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS031HBA1.RSP.ports    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
+PIC.Core.CS031HBA1.RSP.sources    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
 PIC.Core.CS031HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS031LBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031LBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS032HBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS032HBA0.RSP.ports    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA0.RSP.sources    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS032HBA1.RSP.ports    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
+PIC.Core.CS032HBA1.RSP.sources    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
 PIC.Core.CS032HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS032LBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032LBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS101HBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA.RSP.receiver  = cbt001_1
-PIC.Core.CS101HBA0.RSP.ports    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA0.RSP.sources    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA0.RSP.receiver = cbt001_1
-PIC.Core.CS101HBA1.RSP.ports    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
+PIC.Core.CS101HBA1.RSP.sources    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
 PIC.Core.CS101HBA1.RSP.receiver = cbt001_1
-PIC.Core.CS101LBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101LBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101LBA.RSP.receiver  = cbt001_1
-PIC.Core.CS103HBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS103HBA0.RSP.ports    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA0.RSP.sources    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS103HBA1.RSP.ports    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
+PIC.Core.CS103HBA1.RSP.sources    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
 PIC.Core.CS103HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS103LBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103LBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS201HBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS201HBA0.RSP.ports    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA0.RSP.sources    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS201HBA1.RSP.ports    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
+PIC.Core.CS201HBA1.RSP.sources    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
 PIC.Core.CS201HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS201LBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201LBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS301HBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA.RSP.receiver  = cbt005_1
-PIC.Core.CS301HBA0.RSP.ports    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA0.RSP.sources    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA0.RSP.receiver = cbt005_1
-PIC.Core.CS301HBA1.RSP.ports    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
+PIC.Core.CS301HBA1.RSP.sources    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
 PIC.Core.CS301HBA1.RSP.receiver = cbt005_1
-PIC.Core.CS301LBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301LBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301LBA.RSP.receiver  = cbt005_1
-PIC.Core.CS302HBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS302HBA0.RSP.ports    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA0.RSP.sources    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS302HBA1.RSP.ports    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
+PIC.Core.CS302HBA1.RSP.sources    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
 PIC.Core.CS302HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS302LBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302LBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS401HBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA.RSP.receiver  = cbt007_1
-PIC.Core.CS401HBA0.RSP.ports    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA0.RSP.sources    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA0.RSP.receiver = cbt007_1
-PIC.Core.CS401HBA1.RSP.ports    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
+PIC.Core.CS401HBA1.RSP.sources    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
 PIC.Core.CS401HBA1.RSP.receiver = cbt007_1
-PIC.Core.CS401LBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401LBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401LBA.RSP.receiver  = cbt007_1
-PIC.Core.CS501HBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA.RSP.receiver  = cbt006_1
-PIC.Core.CS501HBA0.RSP.ports    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA0.RSP.sources    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA0.RSP.receiver = cbt006_1
-PIC.Core.CS501HBA1.RSP.ports    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
+PIC.Core.CS501HBA1.RSP.sources    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
 PIC.Core.CS501HBA1.RSP.receiver = cbt006_1
-PIC.Core.CS501LBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501LBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501LBA.RSP.receiver  = cbt006_1
-PIC.Core.DE601HBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601HBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE601LBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601LBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601LBA.RSP.receiver  = cbt008_1
-PIC.Core.DE602HBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602HBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE602LBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602LBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE603HBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603HBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603HBA.RSP.receiver  = cbt004_1
-PIC.Core.DE603LBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603LBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603LBA.RSP.receiver  = cbt004_1
-PIC.Core.DE604HBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604HBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE604LBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604LBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE605HBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605HBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE605LBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605LBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605LBA.RSP.receiver  = cbt008_1
-PIC.Core.FR606HBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606HBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606HBA.RSP.receiver  = cbt005_1
-PIC.Core.FR606LBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606LBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS104HBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104HBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS104LBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104LBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS106HBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106HBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS106LBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106LBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS205HBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205HBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS205LBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205LBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS208HBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208HBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS208LBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208LBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS210HBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210HBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210HBA.RSP.receiver  = cbt005_1
-PIC.Core.RS210LBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210LBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS305HBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305HBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS305LBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305LBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS306HBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306HBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306HBA.RSP.receiver  = cbt005_0
-PIC.Core.RS306LBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306LBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306LBA.RSP.receiver  = cbt005_0
-PIC.Core.RS307HBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307HBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS307LBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307LBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS310HBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310HBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS310LBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310LBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS406HBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406HBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS406LBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406LBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS407HBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407HBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS407LBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407LBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS409HBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409HBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS409LBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409LBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410HBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410HBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410LBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410LBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS503HBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503HBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS503LBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503LBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS508HBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508HBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS508LBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508LBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS509HBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509HBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS509LBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509LBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509LBA.RSP.receiver  = cbt007_1
-PIC.Core.SE607HBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607HBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607HBA.RSP.receiver  = cbt006_1
-PIC.Core.SE607LBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607LBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607LBA.RSP.receiver  = cbt006_1
-PIC.Core.UK608HBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608HBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608HBA.RSP.receiver  = cbt005_1
-PIC.Core.UK608LBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608LBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608LBA.RSP.receiver  = cbt005_1
 ApplCtrl.application=CorrAppl
 ApplCtrl.processes=[CorrProc]
diff --git a/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/flyseye.parset b/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/flyseye.parset
index 648f88c18e51112d9085932e6f9aa79c90d6aea3..59ac43ed5206d5acb7c812cb1706dbb4585a4b6a 100644
--- a/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/flyseye.parset
+++ b/RTCP/Cobalt/CoInterface/test/tLTAFeedback.in_parsets/flyseye.parset
@@ -6361,293 +6361,293 @@ PIC.Core.UK608LBA.phaseCenter = [4008438.457, -100309.725, 4943735.828]
 PIC.Core.UK608HBA.phaseCenter = [4008461.941, -100376.609, 4943716.874]
 
 # StationStreams.parset  This file is generated by generateStationStreams.sh
-PIC.Core.CS001HBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS001HBA0.RSP.ports    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA0.RSP.sources    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS001HBA1.RSP.ports    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
+PIC.Core.CS001HBA1.RSP.sources    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
 PIC.Core.CS001HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS001LBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001LBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS002HBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS002HBA0.RSP.ports    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA0.RSP.sources    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS002HBA1.RSP.ports    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
+PIC.Core.CS002HBA1.RSP.sources    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
 PIC.Core.CS002HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS002LBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002LBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS003HBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS003HBA0.RSP.ports    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA0.RSP.sources    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS003HBA1.RSP.ports    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
+PIC.Core.CS003HBA1.RSP.sources    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
 PIC.Core.CS003HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS003LBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003LBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS004HBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS004HBA0.RSP.ports    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA0.RSP.sources    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS004HBA1.RSP.ports    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
+PIC.Core.CS004HBA1.RSP.sources    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
 PIC.Core.CS004HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS004LBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004LBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS005HBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS005HBA0.RSP.ports    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA0.RSP.sources    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS005HBA1.RSP.ports    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
+PIC.Core.CS005HBA1.RSP.sources    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
 PIC.Core.CS005HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS005LBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005LBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS006HBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS006HBA0.RSP.ports    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA0.RSP.sources    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS006HBA1.RSP.ports    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
+PIC.Core.CS006HBA1.RSP.sources    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
 PIC.Core.CS006HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS006LBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006LBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS007HBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS007HBA0.RSP.ports    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA0.RSP.sources    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS007HBA1.RSP.ports    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
+PIC.Core.CS007HBA1.RSP.sources    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
 PIC.Core.CS007HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS007LBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007LBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS011HBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS011HBA0.RSP.ports    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA0.RSP.sources    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS011HBA1.RSP.ports    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
+PIC.Core.CS011HBA1.RSP.sources    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
 PIC.Core.CS011HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS011LBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011LBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS013HBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS013HBA0.RSP.ports    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA0.RSP.sources    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS013HBA1.RSP.ports    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
+PIC.Core.CS013HBA1.RSP.sources    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
 PIC.Core.CS013HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS013LBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013LBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS017HBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS017HBA0.RSP.ports    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA0.RSP.sources    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS017HBA1.RSP.ports    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
+PIC.Core.CS017HBA1.RSP.sources    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
 PIC.Core.CS017HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS017LBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017LBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS021HBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS021HBA0.RSP.ports    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA0.RSP.sources    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS021HBA1.RSP.ports    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
+PIC.Core.CS021HBA1.RSP.sources    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
 PIC.Core.CS021HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS021LBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021LBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS024HBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS024HBA0.RSP.ports    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA0.RSP.sources    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS024HBA1.RSP.ports    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
+PIC.Core.CS024HBA1.RSP.sources    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
 PIC.Core.CS024HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS024LBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024LBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS026HBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS026HBA0.RSP.ports    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA0.RSP.sources    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS026HBA1.RSP.ports    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
+PIC.Core.CS026HBA1.RSP.sources    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
 PIC.Core.CS026HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS026LBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026LBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS028HBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA.RSP.receiver  = cbt003_1
-PIC.Core.CS028HBA0.RSP.ports    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA0.RSP.sources    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA0.RSP.receiver = cbt003_1
-PIC.Core.CS028HBA1.RSP.ports    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
+PIC.Core.CS028HBA1.RSP.sources    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
 PIC.Core.CS028HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS028LBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028LBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028LBA.RSP.receiver  = cbt003_1
-PIC.Core.CS030HBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS030HBA0.RSP.ports    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA0.RSP.sources    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS030HBA1.RSP.ports    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
+PIC.Core.CS030HBA1.RSP.sources    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
 PIC.Core.CS030HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS030LBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030LBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS031HBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS031HBA0.RSP.ports    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA0.RSP.sources    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS031HBA1.RSP.ports    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
+PIC.Core.CS031HBA1.RSP.sources    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
 PIC.Core.CS031HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS031LBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031LBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS032HBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS032HBA0.RSP.ports    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA0.RSP.sources    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS032HBA1.RSP.ports    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
+PIC.Core.CS032HBA1.RSP.sources    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
 PIC.Core.CS032HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS032LBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032LBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS101HBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA.RSP.receiver  = cbt001_1
-PIC.Core.CS101HBA0.RSP.ports    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA0.RSP.sources    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA0.RSP.receiver = cbt001_1
-PIC.Core.CS101HBA1.RSP.ports    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
+PIC.Core.CS101HBA1.RSP.sources    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
 PIC.Core.CS101HBA1.RSP.receiver = cbt001_1
-PIC.Core.CS101LBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101LBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101LBA.RSP.receiver  = cbt001_1
-PIC.Core.CS103HBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS103HBA0.RSP.ports    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA0.RSP.sources    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS103HBA1.RSP.ports    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
+PIC.Core.CS103HBA1.RSP.sources    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
 PIC.Core.CS103HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS103LBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103LBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS201HBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS201HBA0.RSP.ports    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA0.RSP.sources    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS201HBA1.RSP.ports    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
+PIC.Core.CS201HBA1.RSP.sources    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
 PIC.Core.CS201HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS201LBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201LBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS301HBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA.RSP.receiver  = cbt005_1
-PIC.Core.CS301HBA0.RSP.ports    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA0.RSP.sources    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA0.RSP.receiver = cbt005_1
-PIC.Core.CS301HBA1.RSP.ports    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
+PIC.Core.CS301HBA1.RSP.sources    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
 PIC.Core.CS301HBA1.RSP.receiver = cbt005_1
-PIC.Core.CS301LBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301LBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301LBA.RSP.receiver  = cbt005_1
-PIC.Core.CS302HBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS302HBA0.RSP.ports    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA0.RSP.sources    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS302HBA1.RSP.ports    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
+PIC.Core.CS302HBA1.RSP.sources    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
 PIC.Core.CS302HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS302LBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302LBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS401HBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA.RSP.receiver  = cbt007_1
-PIC.Core.CS401HBA0.RSP.ports    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA0.RSP.sources    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA0.RSP.receiver = cbt007_1
-PIC.Core.CS401HBA1.RSP.ports    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
+PIC.Core.CS401HBA1.RSP.sources    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
 PIC.Core.CS401HBA1.RSP.receiver = cbt007_1
-PIC.Core.CS401LBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401LBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401LBA.RSP.receiver  = cbt007_1
-PIC.Core.CS501HBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA.RSP.receiver  = cbt006_1
-PIC.Core.CS501HBA0.RSP.ports    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA0.RSP.sources    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA0.RSP.receiver = cbt006_1
-PIC.Core.CS501HBA1.RSP.ports    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
+PIC.Core.CS501HBA1.RSP.sources    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
 PIC.Core.CS501HBA1.RSP.receiver = cbt006_1
-PIC.Core.CS501LBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501LBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501LBA.RSP.receiver  = cbt006_1
-PIC.Core.DE601HBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601HBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE601LBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601LBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601LBA.RSP.receiver  = cbt008_1
-PIC.Core.DE602HBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602HBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE602LBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602LBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE603HBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603HBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603HBA.RSP.receiver  = cbt004_1
-PIC.Core.DE603LBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603LBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603LBA.RSP.receiver  = cbt004_1
-PIC.Core.DE604HBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604HBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE604LBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604LBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE605HBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605HBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE605LBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605LBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605LBA.RSP.receiver  = cbt008_1
-PIC.Core.FR606HBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606HBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606HBA.RSP.receiver  = cbt005_1
-PIC.Core.FR606LBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606LBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS104HBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104HBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS104LBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104LBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS106HBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106HBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS106LBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106LBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS205HBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205HBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS205LBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205LBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS208HBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208HBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS208LBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208LBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS210HBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210HBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210HBA.RSP.receiver  = cbt005_1
-PIC.Core.RS210LBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210LBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS305HBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305HBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS305LBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305LBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS306HBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306HBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306HBA.RSP.receiver  = cbt005_0
-PIC.Core.RS306LBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306LBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306LBA.RSP.receiver  = cbt005_0
-PIC.Core.RS307HBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307HBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS307LBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307LBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS310HBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310HBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS310LBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310LBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS406HBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406HBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS406LBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406LBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS407HBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407HBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS407LBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407LBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS409HBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409HBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS409LBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409LBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410HBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410HBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410LBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410LBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS503HBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503HBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS503LBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503LBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS508HBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508HBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS508LBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508LBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS509HBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509HBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS509LBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509LBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509LBA.RSP.receiver  = cbt007_1
-PIC.Core.SE607HBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607HBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607HBA.RSP.receiver  = cbt006_1
-PIC.Core.SE607LBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607LBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607LBA.RSP.receiver  = cbt006_1
-PIC.Core.UK608HBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608HBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608HBA.RSP.receiver  = cbt005_1
-PIC.Core.UK608LBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608LBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608LBA.RSP.receiver  = cbt005_1
 ApplCtrl.application=CorrAppl
 ApplCtrl.processes=[CorrProc]
diff --git a/RTCP/Cobalt/CoInterface/test/tOMPThread.cc b/RTCP/Cobalt/CoInterface/test/tOMPThread.cc
index 1cc4b450f55b8fb6398aeb3777f867d33a2834c4..0ceffd8837c7d2c360129f7adcbb3a09b737d1c0 100644
--- a/RTCP/Cobalt/CoInterface/test/tOMPThread.cc
+++ b/RTCP/Cobalt/CoInterface/test/tOMPThread.cc
@@ -96,13 +96,13 @@ SUITE(OMPThread) {
 
 SUITE(OMPThreadSet) {
   TEST(EmptySet) {
-    OMPThreadSet set;
+    OMPThreadSet set("EmptySet");
 
     CHECK_EQUAL(0UL, set.killAll());
   }
 
   TEST(KillRunning) {
-    OMPThreadSet set;
+    OMPThreadSet set("KillRunning");
     Semaphore constructed;
 
 #   pragma omp parallel sections num_threads(2)
@@ -127,7 +127,7 @@ SUITE(OMPThreadSet) {
   }
 
   TEST(KillUnstarted) {
-    OMPThreadSet set;
+    OMPThreadSet set("KillUnstarted");
     Semaphore killed;
 
     set.killAll();
@@ -135,7 +135,7 @@ SUITE(OMPThreadSet) {
   }
 
   TEST(KillStopped) {
-    OMPThreadSet set;
+    OMPThreadSet set("KillStopped");
 
     {
       OMPThreadSet::ScopedRun sr(set);
@@ -145,7 +145,7 @@ SUITE(OMPThreadSet) {
   }
 
   TEST(PidReuse) {
-    OMPThreadSet set;
+    OMPThreadSet set("PidReuse");
 
     { OMPThreadSet::ScopedRun sr(set); }
     { OMPThreadSet::ScopedRun sr(set); }
diff --git a/RTCP/Cobalt/CoInterface/test/tParset.cc b/RTCP/Cobalt/CoInterface/test/tParset.cc
index 2dcba33aa302870551ca340f2142cb6392708745..f169bc96e1159b4cf2463b1d535e54f271b6b91b 100644
--- a/RTCP/Cobalt/CoInterface/test/tParset.cc
+++ b/RTCP/Cobalt/CoInterface/test/tParset.cc
@@ -584,6 +584,7 @@ SUITE(StationStreams) {
     ps.replace("Cobalt.Nodes", "[node01_0, node01_1, node02_0, node02_1, node03_0, node03_1, node04_0, node04_1]");
     ps.replace("PIC.Core.Cobalt.node01_0.host", "node01_0");
     ps.replace("PIC.Core.Cobalt.node01_0.cpu", "0");
+    ps.replace("PIC.Core.Cobalt.node01_0.avoidCores", "[0..3]");
     ps.replace("PIC.Core.Cobalt.node01_0.nic", "mlx4_0");
     ps.replace("PIC.Core.Cobalt.node01_0.gpus", "[0, 1]");
     ps.replace("PIC.Core.Cobalt.node01_1.host", "node01_1");
@@ -626,14 +627,14 @@ SUITE(StationStreams) {
     CHECK_EQUAL(0u, ps.settings.nodes.size());
 
 
-    ps.replace("PIC.Core.CS001HBA0.RSP.ports", "[udp:node02-10GB01:10010, udp:node02-10GB01:10011, udp:node02-10GB01:10012, udp:node02-10GB01:10013]");
+    ps.replace("PIC.Core.CS001HBA0.RSP.sources", "[udp:node02-10GB01:10010, udp:node02-10GB01:10011, udp:node02-10GB01:10012, udp:node02-10GB01:10013]");
     ps.replace("PIC.Core.CS001HBA0.RSP.receiver", "node02_0");
-    ps.replace("PIC.Core.CS001HBA1.RSP.ports", "[udp:node04-10GB01:10016, udp:node04-10GB01:10017, udp:node04-10GB01:10018, udp:node04-10GB01:10019]");
+    ps.replace("PIC.Core.CS001HBA1.RSP.sources", "[udp:node04-10GB01:10016, udp:node04-10GB01:10017, udp:node04-10GB01:10018, udp:node04-10GB01:10019]");
     ps.replace("PIC.Core.CS001HBA1.RSP.receiver", "node04_1");
     // add some irrelevant streams (see if it takes ant set into account)
-    ps.replace("PIC.Core.CS001HBA.RSP.ports", "[udp:node01-10GB01:10010, udp:node01-10GB01:10011, udp:node01-10GB01:10012, udp:node01-10GB01:10013]");
+    ps.replace("PIC.Core.CS001HBA.RSP.sources", "[udp:node01-10GB01:10010, udp:node01-10GB01:10011, udp:node01-10GB01:10012, udp:node01-10GB01:10013]");
     ps.replace("PIC.Core.CS001HBA.RSP.receiver", "node01_1");
-    ps.replace("PIC.Core.CS001LBA.RSP.ports", "[udp:node03-10GB01:10010, udp:node03-10GB01:10011, udp:node03-10GB01:10012, udp:node03-10GB01:10013]");
+    ps.replace("PIC.Core.CS001LBA.RSP.sources", "[udp:node03-10GB01:10010, udp:node03-10GB01:10011, udp:node03-10GB01:10012, udp:node03-10GB01:10013]");
     ps.replace("PIC.Core.CS001LBA.RSP.receiver", "node03_0");
     ps.updateSettings();
 
diff --git a/RTCP/Cobalt/CoInterface/test/tParset.parset_obs228591 b/RTCP/Cobalt/CoInterface/test/tParset.parset_obs228591
index 61a5948e52ee2a506149348afa11a4f5d63a962a..14e37fb7ce19e17dcc29eb50d20acdf1868aef97 100644
--- a/RTCP/Cobalt/CoInterface/test/tParset.parset_obs228591
+++ b/RTCP/Cobalt/CoInterface/test/tParset.parset_obs228591
@@ -5209,293 +5209,293 @@ PIC.Core.UK608LBA.phaseCenter = [4008438.457, -100309.725, 4943735.828]
 PIC.Core.UK608HBA.phaseCenter = [4008461.941, -100376.609, 4943716.874]
 
 # StationStreams.parset  This file is generated by generateStationStreams.sh
-PIC.Core.CS001HBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS001HBA0.RSP.ports    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001HBA0.RSP.sources    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS001HBA1.RSP.ports    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
+PIC.Core.CS001HBA1.RSP.sources    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
 PIC.Core.CS001HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS001LBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
+PIC.Core.CS001LBA.RSP.sources     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
 PIC.Core.CS001LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS002HBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS002HBA0.RSP.ports    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002HBA0.RSP.sources    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS002HBA1.RSP.ports    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
+PIC.Core.CS002HBA1.RSP.sources    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
 PIC.Core.CS002HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS002LBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
+PIC.Core.CS002LBA.RSP.sources     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
 PIC.Core.CS002LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS003HBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS003HBA0.RSP.ports    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003HBA0.RSP.sources    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS003HBA1.RSP.ports    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
+PIC.Core.CS003HBA1.RSP.sources    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
 PIC.Core.CS003HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS003LBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
+PIC.Core.CS003LBA.RSP.sources     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
 PIC.Core.CS003LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS004HBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS004HBA0.RSP.ports    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004HBA0.RSP.sources    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS004HBA1.RSP.ports    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
+PIC.Core.CS004HBA1.RSP.sources    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
 PIC.Core.CS004HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS004LBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
+PIC.Core.CS004LBA.RSP.sources     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
 PIC.Core.CS004LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS005HBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS005HBA0.RSP.ports    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005HBA0.RSP.sources    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS005HBA1.RSP.ports    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
+PIC.Core.CS005HBA1.RSP.sources    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
 PIC.Core.CS005HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS005LBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
+PIC.Core.CS005LBA.RSP.sources     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
 PIC.Core.CS005LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS006HBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS006HBA0.RSP.ports    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006HBA0.RSP.sources    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS006HBA1.RSP.ports    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
+PIC.Core.CS006HBA1.RSP.sources    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
 PIC.Core.CS006HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS006LBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
+PIC.Core.CS006LBA.RSP.sources     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
 PIC.Core.CS006LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS007HBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS007HBA0.RSP.ports    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007HBA0.RSP.sources    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS007HBA1.RSP.ports    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
+PIC.Core.CS007HBA1.RSP.sources    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
 PIC.Core.CS007HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS007LBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
+PIC.Core.CS007LBA.RSP.sources     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
 PIC.Core.CS007LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS011HBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS011HBA0.RSP.ports    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA0.RSP.sources    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS011HBA1.RSP.ports    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
+PIC.Core.CS011HBA1.RSP.sources    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
 PIC.Core.CS011HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS011LBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011LBA.RSP.sources     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS013HBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS013HBA0.RSP.ports    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA0.RSP.sources    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS013HBA1.RSP.ports    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
+PIC.Core.CS013HBA1.RSP.sources    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
 PIC.Core.CS013HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS013LBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013LBA.RSP.sources     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS017HBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS017HBA0.RSP.ports    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017HBA0.RSP.sources    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS017HBA1.RSP.ports    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
+PIC.Core.CS017HBA1.RSP.sources    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
 PIC.Core.CS017HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS017LBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
+PIC.Core.CS017LBA.RSP.sources     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
 PIC.Core.CS017LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS021HBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS021HBA0.RSP.ports    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021HBA0.RSP.sources    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS021HBA1.RSP.ports    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
+PIC.Core.CS021HBA1.RSP.sources    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
 PIC.Core.CS021HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS021LBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
+PIC.Core.CS021LBA.RSP.sources     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
 PIC.Core.CS021LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS024HBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS024HBA0.RSP.ports    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024HBA0.RSP.sources    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS024HBA1.RSP.ports    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
+PIC.Core.CS024HBA1.RSP.sources    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
 PIC.Core.CS024HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS024LBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
+PIC.Core.CS024LBA.RSP.sources     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
 PIC.Core.CS024LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS026HBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS026HBA0.RSP.ports    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026HBA0.RSP.sources    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS026HBA1.RSP.ports    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
+PIC.Core.CS026HBA1.RSP.sources    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
 PIC.Core.CS026HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS026LBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
+PIC.Core.CS026LBA.RSP.sources     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
 PIC.Core.CS026LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS028HBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA.RSP.receiver  = cbt003_1
-PIC.Core.CS028HBA0.RSP.ports    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028HBA0.RSP.sources    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028HBA0.RSP.receiver = cbt003_1
-PIC.Core.CS028HBA1.RSP.ports    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
+PIC.Core.CS028HBA1.RSP.sources    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
 PIC.Core.CS028HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS028LBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
+PIC.Core.CS028LBA.RSP.sources     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
 PIC.Core.CS028LBA.RSP.receiver  = cbt003_1
-PIC.Core.CS030HBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS030HBA0.RSP.ports    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030HBA0.RSP.sources    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS030HBA1.RSP.ports    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
+PIC.Core.CS030HBA1.RSP.sources    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
 PIC.Core.CS030HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS030LBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
+PIC.Core.CS030LBA.RSP.sources     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
 PIC.Core.CS030LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS031HBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS031HBA0.RSP.ports    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031HBA0.RSP.sources    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS031HBA1.RSP.ports    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
+PIC.Core.CS031HBA1.RSP.sources    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
 PIC.Core.CS031HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS031LBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
+PIC.Core.CS031LBA.RSP.sources     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
 PIC.Core.CS031LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS032HBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS032HBA0.RSP.ports    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032HBA0.RSP.sources    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS032HBA1.RSP.ports    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
+PIC.Core.CS032HBA1.RSP.sources    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
 PIC.Core.CS032HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS032LBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
+PIC.Core.CS032LBA.RSP.sources     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
 PIC.Core.CS032LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS101HBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA.RSP.receiver  = cbt001_1
-PIC.Core.CS101HBA0.RSP.ports    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101HBA0.RSP.sources    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101HBA0.RSP.receiver = cbt001_1
-PIC.Core.CS101HBA1.RSP.ports    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
+PIC.Core.CS101HBA1.RSP.sources    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
 PIC.Core.CS101HBA1.RSP.receiver = cbt001_1
-PIC.Core.CS101LBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
+PIC.Core.CS101LBA.RSP.sources     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
 PIC.Core.CS101LBA.RSP.receiver  = cbt001_1
-PIC.Core.CS103HBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS103HBA0.RSP.ports    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103HBA0.RSP.sources    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS103HBA1.RSP.ports    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
+PIC.Core.CS103HBA1.RSP.sources    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
 PIC.Core.CS103HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS103LBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
+PIC.Core.CS103LBA.RSP.sources     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
 PIC.Core.CS103LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS201HBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS201HBA0.RSP.ports    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201HBA0.RSP.sources    = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS201HBA1.RSP.ports    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
+PIC.Core.CS201HBA1.RSP.sources    = [udp:cbt003-10GB04:12016, udp:cbt003-10GB04:12017, udp:cbt003-10GB04:12018, udp:cbt003-10GB04:12019]
 PIC.Core.CS201HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS201LBA.RSP.ports     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
+PIC.Core.CS201LBA.RSP.sources     = [udp:cbt003-10GB02:12010, udp:cbt003-10GB02:12011, udp:cbt003-10GB02:12012, udp:cbt003-10GB02:12013]
 PIC.Core.CS201LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS301HBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA.RSP.receiver  = cbt005_1
-PIC.Core.CS301HBA0.RSP.ports    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301HBA0.RSP.sources    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301HBA0.RSP.receiver = cbt005_1
-PIC.Core.CS301HBA1.RSP.ports    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
+PIC.Core.CS301HBA1.RSP.sources    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
 PIC.Core.CS301HBA1.RSP.receiver = cbt005_1
-PIC.Core.CS301LBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
+PIC.Core.CS301LBA.RSP.sources     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
 PIC.Core.CS301LBA.RSP.receiver  = cbt005_1
-PIC.Core.CS302HBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS302HBA0.RSP.ports    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302HBA0.RSP.sources    = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS302HBA1.RSP.ports    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
+PIC.Core.CS302HBA1.RSP.sources    = [udp:cbt004-10GB04:13026, udp:cbt004-10GB04:13027, udp:cbt004-10GB04:13028, udp:cbt004-10GB04:13029]
 PIC.Core.CS302HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS302LBA.RSP.ports     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
+PIC.Core.CS302LBA.RSP.sources     = [udp:cbt004-10GB04:13020, udp:cbt004-10GB04:13021, udp:cbt004-10GB04:13022, udp:cbt004-10GB04:13023]
 PIC.Core.CS302LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS401HBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA.RSP.receiver  = cbt007_1
-PIC.Core.CS401HBA0.RSP.ports    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401HBA0.RSP.sources    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401HBA0.RSP.receiver = cbt007_1
-PIC.Core.CS401HBA1.RSP.ports    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
+PIC.Core.CS401HBA1.RSP.sources    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
 PIC.Core.CS401HBA1.RSP.receiver = cbt007_1
-PIC.Core.CS401LBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
+PIC.Core.CS401LBA.RSP.sources     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
 PIC.Core.CS401LBA.RSP.receiver  = cbt007_1
-PIC.Core.CS501HBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA.RSP.receiver  = cbt006_1
-PIC.Core.CS501HBA0.RSP.ports    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501HBA0.RSP.sources    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501HBA0.RSP.receiver = cbt006_1
-PIC.Core.CS501HBA1.RSP.ports    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
+PIC.Core.CS501HBA1.RSP.sources    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
 PIC.Core.CS501HBA1.RSP.receiver = cbt006_1
-PIC.Core.CS501LBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
+PIC.Core.CS501LBA.RSP.sources     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
 PIC.Core.CS501LBA.RSP.receiver  = cbt006_1
-PIC.Core.DE601HBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601HBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE601LBA.RSP.ports     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
+PIC.Core.DE601LBA.RSP.sources     = [udp:10.211.1.50:16010, udp:10.212.1.50:16011, udp:10.213.1.50:16012, udp:10.214.1.50:16013]
 PIC.Core.DE601LBA.RSP.receiver  = cbt008_1
-PIC.Core.DE602HBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602HBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE602LBA.RSP.ports     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
+PIC.Core.DE602LBA.RSP.sources     = [udp:10.200.41.50:16020, udp:10.200.41.50:16021, udp:10.200.41.50:16022, udp:10.200.41.50:16023]
 PIC.Core.DE602LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE603HBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603HBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603HBA.RSP.receiver  = cbt004_1
-PIC.Core.DE603LBA.RSP.ports     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
+PIC.Core.DE603LBA.RSP.sources     = [udp:10.211.3.50:16030, udp:10.212.3.50:16031, udp:10.213.3.50:16032, udp:10.214.3.50:16033]
 PIC.Core.DE603LBA.RSP.receiver  = cbt004_1
-PIC.Core.DE604HBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604HBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE604LBA.RSP.ports     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
+PIC.Core.DE604LBA.RSP.sources     = [udp:10.200.81.50:16040, udp:10.200.81.50:16041, udp:10.200.81.50:16042, udp:10.200.81.50:16043]
 PIC.Core.DE604LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE605HBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605HBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE605LBA.RSP.ports     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
+PIC.Core.DE605LBA.RSP.sources     = [udp:10.211.5.50:16050, udp:10.212.5.50:16051, udp:10.213.5.50:16052, udp:10.214.5.50:16053]
 PIC.Core.DE605LBA.RSP.receiver  = cbt008_1
-PIC.Core.FR606HBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606HBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606HBA.RSP.receiver  = cbt005_1
-PIC.Core.FR606LBA.RSP.ports     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
+PIC.Core.FR606LBA.RSP.sources     = [udp:10.211.6.50:16060, udp:10.212.6.50:16061, udp:10.213.6.50:16062, udp:10.214.6.50:16063]
 PIC.Core.FR606LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS104HBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104HBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS104LBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
+PIC.Core.RS104LBA.RSP.sources     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
 PIC.Core.RS104LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS106HBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106HBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS106LBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
+PIC.Core.RS106LBA.RSP.sources     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
 PIC.Core.RS106LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS205HBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205HBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS205LBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
+PIC.Core.RS205LBA.RSP.sources     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
 PIC.Core.RS205LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS208HBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208HBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS208LBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
+PIC.Core.RS208LBA.RSP.sources     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
 PIC.Core.RS208LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS210HBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210HBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210HBA.RSP.receiver  = cbt005_1
-PIC.Core.RS210LBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
+PIC.Core.RS210LBA.RSP.sources     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
 PIC.Core.RS210LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS305HBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305HBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS305LBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
+PIC.Core.RS305LBA.RSP.sources     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
 PIC.Core.RS305LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS306HBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306HBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306HBA.RSP.receiver  = cbt005_0
-PIC.Core.RS306LBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
+PIC.Core.RS306LBA.RSP.sources     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
 PIC.Core.RS306LBA.RSP.receiver  = cbt005_0
-PIC.Core.RS307HBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307HBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS307LBA.RSP.ports     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
+PIC.Core.RS307LBA.RSP.sources     = [udp:cbt008-10GB04:13070, udp:cbt008-10GB04:13071, udp:cbt008-10GB04:13072, udp:cbt008-10GB04:13073]
 PIC.Core.RS307LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS310HBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310HBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS310LBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
+PIC.Core.RS310LBA.RSP.sources     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
 PIC.Core.RS310LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS406HBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406HBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS406LBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
+PIC.Core.RS406LBA.RSP.sources     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
 PIC.Core.RS406LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS407HBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407HBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS407LBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
+PIC.Core.RS407LBA.RSP.sources     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
 PIC.Core.RS407LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS409HBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409HBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS409LBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
+PIC.Core.RS409LBA.RSP.sources     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
 PIC.Core.RS409LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410HBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410HBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410LBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
+PIC.Core.RS410LBA.RSP.sources     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
 PIC.Core.RS410LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS503HBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503HBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS503LBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
+PIC.Core.RS503LBA.RSP.sources     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
 PIC.Core.RS503LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS508HBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508HBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS508LBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
+PIC.Core.RS508LBA.RSP.sources     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
 PIC.Core.RS508LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS509HBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509HBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS509LBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
+PIC.Core.RS509LBA.RSP.sources     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
 PIC.Core.RS509LBA.RSP.receiver  = cbt007_1
-PIC.Core.SE607HBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607HBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607HBA.RSP.receiver  = cbt006_1
-PIC.Core.SE607LBA.RSP.ports     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
+PIC.Core.SE607LBA.RSP.sources     = [udp:10.211.7.50:16070, udp:10.212.7.50:16071, udp:10.213.7.50:16072, udp:10.214.7.50:16073]
 PIC.Core.SE607LBA.RSP.receiver  = cbt006_1
-PIC.Core.UK608HBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608HBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608HBA.RSP.receiver  = cbt005_1
-PIC.Core.UK608LBA.RSP.ports     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
+PIC.Core.UK608LBA.RSP.sources     = [udp:10.211.8.50:16080, udp:10.212.8.50:16081, udp:10.213.8.50:16082, udp:10.214.8.50:16083]
 PIC.Core.UK608LBA.RSP.receiver  = cbt005_1
 ApplCtrl.application=CorrAppl
 ApplCtrl.processes=[CorrProc]
diff --git a/RTCP/Cobalt/CoInterface/test/t_cpu_utils.cc b/RTCP/Cobalt/CoInterface/test/t_cpu_utils.cc
new file mode 100644
index 0000000000000000000000000000000000000000..fe506b02cbfbc5b48491d19a07618adb1fb22837
--- /dev/null
+++ b/RTCP/Cobalt/CoInterface/test/t_cpu_utils.cc
@@ -0,0 +1,199 @@
+//# t_cpu_utils.cc: test cpu utilities
+//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
+//#
+//# This file is part of the LOFAR software suite.
+//# The LOFAR software suite is free software: you can redistribute it and/or
+//# modify it under the terms of the GNU General Public License as published
+//# by the Free Software Foundation, either version 3 of the License, or
+//# (at your option) any later version.
+//#
+//# The LOFAR software suite is distributed in the hope that it will be useful,
+//# but WITHOUT ANY WARRANTY; without even the implied warranty of
+//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//# GNU General Public License for more details.
+//#
+//# You should have received a copy of the GNU General Public License along
+//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+//#
+//# $Id$
+
+#include <lofar_config.h>
+
+#include <CoInterface/cpu_utils.h>
+
+#include <cstring>
+#include <cstdio>
+#include <sched.h>
+#include <cstdlib>
+#include <omp.h>
+#include <string>
+#include <iostream>
+
+#include <Common/LofarLogger.h>
+#include <Common/SystemCallException.h>
+#include <Common/SystemUtil.h>
+#include <CoInterface/PrintVector.h>
+
+#include <UnitTest++.h>
+
+using namespace std;
+using namespace LOFAR::Cobalt;
+
+const unsigned nprocs = sysconf( _SC_NPROCESSORS_ONLN );
+
+static void test_cpu(unsigned cpuId)
+{
+  int status = 0;
+
+  bindCPU(cpuId);
+
+  // Validate the correct setting of the affinity
+  cpu_set_t mask;  
+  if (sched_getaffinity(0, sizeof(cpu_set_t), &mask) != 0)
+    THROW_SYSCALL("sched_getaffinity");
+
+  // expect alternating on cbt nodes
+  // (the original test code intended this, but was broken in many ways (still a poor idea to make it so specific))
+  int expect = !cpuId;
+  for (unsigned i = 0; i < nprocs; i++) {
+    if (CPU_ISSET(i, &mask) != expect) {
+      LOG_FATAL_STR("cpuId=" << cpuId << " Found that core " << i << " is" << (!expect ? " " : " NOT ") <<
+                    "in the set while it should" << (expect ? " " : " NOT ") << "be!");
+      status = 1;
+    }
+    expect ^= 1;
+  }
+
+  CHECK(status == 0);
+}
+
+static void test_memory(unsigned cpuId)
+{
+  bindMemory(cpuId);
+
+  void *buffer = malloc(1024);
+  ASSERT(buffer);
+
+  // the buffer will almost surely be on the wrong socket for at least one value of cpuId
+  CHECK_EQUAL(cpuId, socketOfMemory(buffer));
+
+  free(buffer);
+}
+
+TEST(cpu0) {
+  test_cpu(0);
+}
+
+TEST(cpu1) {
+  test_cpu(1);
+}
+
+TEST(cpu_avoid_cores) {
+  bindCPU(0);
+
+  // Check which cores we are bound to
+  cpu_set_t mask;  
+  if (sched_getaffinity(0, sizeof(cpu_set_t), &mask) != 0)
+    THROW_SYSCALL("sched_getaffinity");
+
+  // Need a multi-core machine
+  if(CPU_COUNT(&mask) < 2)
+    return;
+
+  // Find at least two cores we're bound to
+  int first = -1, second = -1;
+
+  for (unsigned i = 0; i < CPU_SETSIZE; i++) {
+    if (CPU_ISSET(i, &mask)) {
+      if (first == -1)
+        first = i;
+      else if (second == -1)
+        second = i;
+      else
+        break;
+    }
+  }
+
+  CHECK(first != -1);
+  CHECK(second != -1);
+
+  // Avoid binding to the first core
+  bindCPU(0, std::vector<unsigned>{ static_cast<unsigned>(first) });
+
+  // Verify binding
+  if (sched_getaffinity(0, sizeof(cpu_set_t), &mask) != 0)
+    THROW_SYSCALL("sched_getaffinity");
+
+  CHECK(!CPU_ISSET(first, &mask));
+  CHECK(CPU_ISSET(second, &mask));
+}
+
+TEST(openmp_binding) {
+  bindCPU(0);
+
+  const vector<unsigned> allCores = cpuBinding();
+
+  CHECK(allCores.size() >= 2);
+
+  // Avoid binding on first core
+  const unsigned forbiddenCore = allCores[0];
+
+  bindCPU(0, vector<unsigned>{ forbiddenCore });
+
+  cout << "Selected forbidden core: " << forbiddenCore << endl;
+
+  #pragma omp parallel for num_threads(16)
+  for(int i = 0; i < 16; ++i)
+  {
+     const vector<unsigned> threadCores = cpuBinding();
+
+     #pragma omp critical (cout)
+     { cout << "Thread is bound to " << threadCores << endl; }
+
+     // forbidden core should NOT be in our list
+     CHECK(find(threadCores.begin(), threadCores.end(), forbiddenCore) == threadCores.end());
+
+     // other cores should be in our list
+     for(size_t i = 0; i < allCores.size(); i++) {
+       unsigned core = allCores[i];
+
+       if (core == forbiddenCore)
+         continue;
+
+       CHECK(find(threadCores.begin(), threadCores.end(), core) != threadCores.end());
+     }
+  }
+} 
+
+TEST(memory0) {
+  test_memory(0);
+}
+
+TEST(memory1) {
+  test_memory(1);
+}
+
+TEST(memorymove) {
+  if(nprocs >= 2) {
+    bindMemory(0);
+
+    void *buffer = malloc(1024);
+    ASSERT(buffer);
+
+    CHECK_EQUAL(0, socketOfMemory(buffer));
+
+    // move the memory
+    bindMemory(1);
+
+    CHECK_EQUAL(1, socketOfMemory(buffer));
+  }
+}
+
+int main()
+{
+  INIT_LOGGER("t_cpu_utils");
+
+  return UnitTest::RunAllTests() > 0;
+}
+
diff --git a/RTCP/Cobalt/GPUProc/test/t_cpu_utils.sh b/RTCP/Cobalt/CoInterface/test/t_cpu_utils.sh
similarity index 100%
rename from RTCP/Cobalt/GPUProc/test/t_cpu_utils.sh
rename to RTCP/Cobalt/CoInterface/test/t_cpu_utils.sh
diff --git a/RTCP/Cobalt/CobaltTest/CMakeLists.txt b/RTCP/Cobalt/CobaltTest/CMakeLists.txt
index 0849cea4911d786cefe8d6d03333eb4bc6275831..116e3fd326d875a2339650615c3f68cbf58c3c5a 100644
--- a/RTCP/Cobalt/CobaltTest/CMakeLists.txt
+++ b/RTCP/Cobalt/CobaltTest/CMakeLists.txt
@@ -2,11 +2,4 @@
 
 lofar_package(CobaltTest 1.0 DEPENDS GPUProc OutputProc)
 
-# Handle options USE_CUDA and USE_OPENCL.
-if(USE_CUDA AND NOT USE_OPENCL)
-  add_definitions(-DUSE_CUDA)
-elseif(USE_OPENCL AND NOT USE_CUDA)
-  add_definitions(-DUSE_OPENCL)
-endif()
-
 add_subdirectory(test)
diff --git a/RTCP/Cobalt/CobaltTest/test/tManyPartTABOutput.cc b/RTCP/Cobalt/CobaltTest/test/tManyPartTABOutput.cc
index 77eef64d83811113c2fdac34dbc0710bee4bb398..3cd86fb66398a2b84eb93fb5363593cf548b2472 100644
--- a/RTCP/Cobalt/CobaltTest/test/tManyPartTABOutput.cc
+++ b/RTCP/Cobalt/CobaltTest/test/tManyPartTABOutput.cc
@@ -30,7 +30,7 @@
 #include <Common/LofarLogger.h>
 #include <CoInterface/Parset.h>
 #include <GPUProc/Pipelines/Pipeline.h>
-#include <GPUProc/cuda/SubbandProcs/SubbandProcOutputData.h>
+#include <GPUProc/SubbandProcs/SubbandProcOutputData.h>
 #include <GPUProc/Station/StationInput.h>
 #include <GPUProc/Storage/StorageProcesses.h>
 
@@ -126,7 +126,7 @@ int main()
     data = getTestSbCohData(ps, ctx, blockIdx, i);
     writePool[i].queue->append(data);
 
-    writePool[i].queue->append(NULL);
+    writePool[i].queue->append(NULL, false);
   }
 
   // Have it push a block of values per sb to outputProc.
diff --git a/RTCP/Cobalt/CobaltTest/test/tMultiPartTABOutput.cc b/RTCP/Cobalt/CobaltTest/test/tMultiPartTABOutput.cc
index 76ae52c75cf172668edbe76718a6ddb6e65c2e7e..9177c52d59d47d1def460125f4579308e0be6eac 100644
--- a/RTCP/Cobalt/CobaltTest/test/tMultiPartTABOutput.cc
+++ b/RTCP/Cobalt/CobaltTest/test/tMultiPartTABOutput.cc
@@ -30,7 +30,7 @@
 #include <Common/LofarLogger.h>
 #include <CoInterface/Parset.h>
 #include <GPUProc/Pipelines/Pipeline.h>
-#include <GPUProc/cuda/SubbandProcs/SubbandProcOutputData.h>
+#include <GPUProc/SubbandProcs/SubbandProcOutputData.h>
 #include <GPUProc/Station/StationInput.h>
 #include <GPUProc/Storage/StorageProcesses.h>
 
@@ -123,7 +123,7 @@ int main()
     data = getTestSbIncohData(ps, ctx, blockIdx, i);
     writePool[i].queue->append(data);
 
-    writePool[i].queue->append(NULL);
+    writePool[i].queue->append(NULL, false);
   }
 
   // Have it push a block of values per sb to outputProc.
diff --git a/RTCP/Cobalt/GPUProc/CMakeLists.txt b/RTCP/Cobalt/GPUProc/CMakeLists.txt
index 4c9c804bcc1f29ec6175ca2720cd23e194040a17..950d51463f5e1daa1dbbe1ae17ebcf26ab6673bf 100644
--- a/RTCP/Cobalt/GPUProc/CMakeLists.txt
+++ b/RTCP/Cobalt/GPUProc/CMakeLists.txt
@@ -1,49 +1,22 @@
 # $Id$
 
-# Handle options USE_CUDA and USE_OPENCL.
-if(USE_CUDA AND NOT USE_OPENCL)
-  set(_gpuproc_deps "")
-
-  # We use runtime compilation, except for 2 tests compiled by nvcc.
-  # nvcc passes our C++ flags to GCC for C compilation printing spurious warnings. Suppress.
-  set(CUDA_PROPAGATE_HOST_FLAGS OFF)
-  lofar_find_package(CUDA 4.1 REQUIRED)
-  lofar_find_package(CUDADriver REQUIRED)
-
-  add_definitions(-DUSE_CUDA)
-  if(LOFAR_BUILD_VARIANT MATCHES "^DEBUG$")
-    list(APPEND CUDA_NVCC_FLAGS -g -G)
-  endif()
-
-  if(0)  # for dev to see what is available how; disabled to reduce spam
-    message(STATUS "CUDA_FOUND = ${CUDA_FOUND}")
-    message(STATUS "CUDA_VERSION_MAJOR = ${CUDA_VERSION_MAJOR}")
-    message(STATUS "CUDA_VERSION_MINOR = ${CUDA_VERSION_MINOR}")
-    message(STATUS "CUDA_VERSION = ${CUDA_VERSION}") # sometimes avail if CUDA_VERSION_STRING is not
-    message(STATUS "CUDA_VERSION_STRING = ${CUDA_VERSION_STRING}")
-    message(STATUS "CUDA_TOOLKIT_ROOT_DIR = ${CUDA_TOOLKIT_ROOT_DIR}")
-    message(STATUS "CUDA_SDK_ROOT_DIR = ${CUDA_SDK_ROOT_DIR}")
-    message(STATUS "CUDA_INCLUDE_DIRS = ${CUDA_INCLUDE_DIRS}")
-    message(STATUS "CUDA_LIBRARIES = ${CUDA_LIBRARIES}")
-    message(STATUS "CUDA_CUFFT_LIBRARIES = ${CUDA_CUFFT_LIBRARIES}")
-    message(STATUS "CUDA_CUBLAS_LIBRARIES = ${CUDA_CUBLAS_LIBRARIES}")
-    message(STATUS "CUDA_curand_LIBRARY = ${CUDA_curand_LIBRARY}")
-    message(STATUS "CUDA_cusparse_LIBRARY = ${CUDA_cusparse_LIBRARY}")
-    message(STATUS "CUDA_npp_LIBRARY = ${CUDA_npp_LIBRARY}")
-    message(STATUS "CUDA_nvcuvenc_LIBRARY = ${CUDA_nvcuvenc_LIBRARY}")
-    message(STATUS "CUDA_nvcuvid_LIBRARY = ${CUDA_nvcuvid_LIBRARY}")
-
-    message(STATUS "CUDADRIVER_FOUND = ${CUDADRIVER_FOUND}")
-    message(STATUS "CUDADRIVER_LIBRARIES = ${CUDADRIVER_LIBRARIES}")
-  endif()
-
-elseif(USE_OPENCL AND NOT USE_CUDA)
-  set(_gpuproc_deps OpenCL_FFT)
-  lofar_find_package(OpenCL REQUIRED)
-  add_definitions(-DUSE_OPENCL)
-else()
-  message(WARNING
-    "Either CUDA or OpenCL must be enabled to build GPUProc.")
+# Note: in Cobalt1 the initial implementation was in OpenCL.
+# But the dev-team changed to CUDA quite soon.
+# The OpenCL implementation was sort of mirrored and kept in sync with the CUDA implementation.
+# But, the OpenCL was never really used in production...
+# So, for Cobalt2 we (Jan David and Jorrit) decided to remove the OpenCL implementation to reduced maintenance costs.
+# If we would like to see/use the OpenCL implementation, just have a look in svn history.
+
+set(_gpuproc_deps "")
+
+# We use runtime compilation, except for 2 tests compiled by nvcc.
+# nvcc passes our C++ flags to GCC for C compilation printing spurious warnings. Suppress.
+set(CUDA_PROPAGATE_HOST_FLAGS OFF)
+lofar_find_package(CUDA 4.1 REQUIRED)
+lofar_find_package(CUDADriver REQUIRED)
+
+if(LOFAR_BUILD_VARIANT MATCHES "^DEBUG$")
+  list(APPEND CUDA_NVCC_FLAGS -g -G)
 endif()
 
 lofar_package(GPUProc 1.0 DEPENDS Common Stream ApplCommon CoInterface InputProc MACIO BrokenAntennaInfo MessageBus Docker ${_gpuproc_deps})
@@ -51,7 +24,6 @@ lofar_package(GPUProc 1.0 DEPENDS Common Stream ApplCommon CoInterface InputProc
 lofar_find_package(OpenMP REQUIRED)
 lofar_find_package(Boost REQUIRED)
 lofar_find_package(MPI REQUIRED)
-#lofar_find_package(ALGLIB)
 lofar_find_package(LibNuma)
 lofar_find_package(FFTW3 COMPONENTS single double threads REQUIRED)
 lofar_find_package(UnitTest++)
diff --git a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-16ch-127tabs.parset b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-16ch-127tabs.parset
index 4a00cf4401272a00f288a5e4876e1997cea31108..f4624a57eb304aca3d514c7a41e5be28d1b41174 100644
--- a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-16ch-127tabs.parset
+++ b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-16ch-127tabs.parset
@@ -199,52 +199,52 @@ Cobalt.Beamformer.dedispersionFFTsize=2048
 
 
 # Read from /dev/null which blocks, so all "data" is flagged. This is fine for the intended test.
-PIC.Core.CS001HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS001HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA1.RSP.ports=[file:/dev/null]
+PIC.Core.CS001HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS001HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA1.RSP.sources=[file:/dev/null]
 
diff --git a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-16ch-200tabs.parset b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-16ch-200tabs.parset
index b56ecd442d142223ee5c19d4a3c59e5297b4628e..85a3c2b5a343c2a9b981cad30a32a9c2b8c94aec 100644
--- a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-16ch-200tabs.parset
+++ b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-16ch-200tabs.parset
@@ -199,52 +199,52 @@ Cobalt.Beamformer.dedispersionFFTsize=2048
 
 
 # Read from /dev/null which blocks, so all "data" is flagged. This is fine for the intended test.
-PIC.Core.CS001HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS001HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA1.RSP.ports=[file:/dev/null]
+PIC.Core.CS001HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS001HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA1.RSP.sources=[file:/dev/null]
 
diff --git a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-1ch-127tabs.parset b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-1ch-127tabs.parset
index 3868cd94c5088d0c8ac2859d8a66ca1efde83562..013b62461c57446a4722766e4edf43e384a67c67 100644
--- a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-1ch-127tabs.parset
+++ b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-1ch-127tabs.parset
@@ -199,52 +199,52 @@ Cobalt.Beamformer.dedispersionFFTsize=2048
 
 
 # Read from /dev/null which blocks, so all "data" is flagged. This is fine for the intended test.
-PIC.Core.CS001HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS001HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA1.RSP.ports=[file:/dev/null]
+PIC.Core.CS001HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS001HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA1.RSP.sources=[file:/dev/null]
 
diff --git a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-1ch-200tabs.parset b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-1ch-200tabs.parset
index 8478d3c64ce822068218c6e9c0c3e8d870291cf7..e4576d679bf84785e5fbe2d59b5385a784fe046d 100644
--- a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-1ch-200tabs.parset
+++ b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/bfcs-48st-1sb-16b-int4-1ch-200tabs.parset
@@ -199,52 +199,52 @@ Cobalt.Beamformer.dedispersionFFTsize=2048
 
 
 # Read from /dev/null which blocks, so all "data" is flagged. This is fine for the intended test.
-PIC.Core.CS001HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS001HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA1.RSP.ports=[file:/dev/null]
+PIC.Core.CS001HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS001HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA1.RSP.sources=[file:/dev/null]
 
diff --git a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-64st-1sb-16b-int1s-64ch.parset b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-64st-1sb-16b-int1s-64ch.parset
index 14b97457078dfa21c55c10100a35ef420a76bda3..0f3205310f228b7818a6211762a49fdfeb0cc96c 100644
--- a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-64st-1sb-16b-int1s-64ch.parset
+++ b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-64st-1sb-16b-int1s-64ch.parset
@@ -200,69 +200,69 @@ Cobalt.Beamformer.dedispersionFFTsize=2048
 
 
 # Read from /dev/null which blocks, so all "data" is flagged. This is fine for the intended test.
-PIC.Core.CS001HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS001HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA1.RSP.ports=[file:/dev/null]
-
-PIC.Core.RS106HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS205HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS208HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS305HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS306HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS307HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS310HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS406HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS407HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS409HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS503HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS508HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS509HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE601HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE602HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE603HBA.RSP.ports=[file:/dev/null]
+PIC.Core.CS001HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS001HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA1.RSP.sources=[file:/dev/null]
+
+PIC.Core.RS106HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS205HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS208HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS305HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS306HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS307HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS310HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS406HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS407HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS409HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS503HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS508HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS509HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE601HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE602HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE603HBA.RSP.sources=[file:/dev/null]
 
diff --git a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-64st-1sb-8b-int1s-64ch.parset b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-64st-1sb-8b-int1s-64ch.parset
index 3538894afed29a29406c56ce398ccc20fb7f81a3..88a691e77772095eb3f6d0d5ea9d90d179a6608f 100644
--- a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-64st-1sb-8b-int1s-64ch.parset
+++ b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-64st-1sb-8b-int1s-64ch.parset
@@ -200,69 +200,69 @@ Cobalt.Beamformer.dedispersionFFTsize=2048
 
 
 # Read from /dev/null which blocks, so all "data" is flagged. This is fine for the intended test.
-PIC.Core.CS001HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS001HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA1.RSP.ports=[file:/dev/null]
-
-PIC.Core.RS106HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS205HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS208HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS305HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS306HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS307HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS310HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS406HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS407HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS409HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS503HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS508HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS509HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE601HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE602HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE603HBA.RSP.ports=[file:/dev/null]
+PIC.Core.CS001HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS001HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA1.RSP.sources=[file:/dev/null]
+
+PIC.Core.RS106HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS205HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS208HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS305HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS306HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS307HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS310HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS406HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS407HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS409HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS503HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS508HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS509HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE601HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE602HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE603HBA.RSP.sources=[file:/dev/null]
 
diff --git a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-80st-1sb-16b-int1s-64ch.parset b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-80st-1sb-16b-int1s-64ch.parset
index f57d7acc887927766cf4d0a139a15149423f2f77..2b8760b0c046d732dbb6cb96f2117150d5f11893 100644
--- a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-80st-1sb-16b-int1s-64ch.parset
+++ b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-80st-1sb-16b-int1s-64ch.parset
@@ -200,87 +200,87 @@ Cobalt.Beamformer.dedispersionFFTsize=2048
 
 
 # Read from /dev/null which blocks, so all "data" is flagged. This is fine for the intended test.
-PIC.Core.CS001HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS001HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA1.RSP.ports=[file:/dev/null]
-
-PIC.Core.RS106HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS205HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS208HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS305HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS306HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS307HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS310HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS406HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS407HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS409HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS503HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS508HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS509HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE601HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE602HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE603HBA.RSP.ports=[file:/dev/null]
-
-PIC.Core.DE604HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE605HBA.RSP.ports=[file:/dev/null]
-PIC.Core.FR606HBA.RSP.ports=[file:/dev/null]
-PIC.Core.SE607HBA.RSP.ports=[file:/dev/null]
-PIC.Core.UK608HBA.RSP.ports=[file:/dev/null]
-PIC.Core.FI609HBA.RSP.ports=[file:/dev/null]
-
-PIC.Core.RS104HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS105HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS107HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS108HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS109HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS202HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS203HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS204HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS206HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS207HBA.RSP.ports=[file:/dev/null]
+PIC.Core.CS001HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS001HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA1.RSP.sources=[file:/dev/null]
+
+PIC.Core.RS106HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS205HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS208HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS305HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS306HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS307HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS310HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS406HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS407HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS409HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS503HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS508HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS509HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE601HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE602HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE603HBA.RSP.sources=[file:/dev/null]
+
+PIC.Core.DE604HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE605HBA.RSP.sources=[file:/dev/null]
+PIC.Core.FR606HBA.RSP.sources=[file:/dev/null]
+PIC.Core.SE607HBA.RSP.sources=[file:/dev/null]
+PIC.Core.UK608HBA.RSP.sources=[file:/dev/null]
+PIC.Core.FI609HBA.RSP.sources=[file:/dev/null]
+
+PIC.Core.RS104HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS105HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS107HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS108HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS109HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS202HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS203HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS204HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS206HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS207HBA.RSP.sources=[file:/dev/null]
 
diff --git a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-80st-1sb-8b-int1s-64ch.parset b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-80st-1sb-8b-int1s-64ch.parset
index 540b3b573b2bb39e2b53936f9267e56bdf8a9c34..0d9db86ecb7d6154a482fe9bdaf84263e66d3ff2 100644
--- a/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-80st-1sb-8b-int1s-64ch.parset
+++ b/RTCP/Cobalt/GPUProc/doc/performance-review/parsets/corr-80st-1sb-8b-int1s-64ch.parset
@@ -200,87 +200,87 @@ Cobalt.Beamformer.dedispersionFFTsize=2048
 
 
 # Read from /dev/null which blocks, so all "data" is flagged. This is fine for the intended test.
-PIC.Core.CS001HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS001HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS011HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS013HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS017HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS021HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS024HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS026HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS028HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS030HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS031HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS032HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS101HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS103HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS201HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS301HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS302HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS401HBA1.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA0.RSP.ports=[file:/dev/null]
-PIC.Core.CS501HBA1.RSP.ports=[file:/dev/null]
-
-PIC.Core.RS106HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS205HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS208HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS305HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS306HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS307HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS310HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS406HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS407HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS409HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS503HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS508HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS509HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE601HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE602HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE603HBA.RSP.ports=[file:/dev/null]
-
-PIC.Core.DE604HBA.RSP.ports=[file:/dev/null]
-PIC.Core.DE605HBA.RSP.ports=[file:/dev/null]
-PIC.Core.FR606HBA.RSP.ports=[file:/dev/null]
-PIC.Core.SE607HBA.RSP.ports=[file:/dev/null]
-PIC.Core.UK608HBA.RSP.ports=[file:/dev/null]
-PIC.Core.FI609HBA.RSP.ports=[file:/dev/null]
-
-PIC.Core.RS104HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS105HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS107HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS108HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS109HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS202HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS203HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS204HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS206HBA.RSP.ports=[file:/dev/null]
-PIC.Core.RS207HBA.RSP.ports=[file:/dev/null]
+PIC.Core.CS001HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS001HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS011HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS013HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS017HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS021HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS024HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS026HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS028HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS030HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS031HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS032HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS101HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS103HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS201HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS301HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS302HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS401HBA1.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA0.RSP.sources=[file:/dev/null]
+PIC.Core.CS501HBA1.RSP.sources=[file:/dev/null]
+
+PIC.Core.RS106HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS205HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS208HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS305HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS306HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS307HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS310HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS406HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS407HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS409HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS503HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS508HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS509HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE601HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE602HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE603HBA.RSP.sources=[file:/dev/null]
+
+PIC.Core.DE604HBA.RSP.sources=[file:/dev/null]
+PIC.Core.DE605HBA.RSP.sources=[file:/dev/null]
+PIC.Core.FR606HBA.RSP.sources=[file:/dev/null]
+PIC.Core.SE607HBA.RSP.sources=[file:/dev/null]
+PIC.Core.UK608HBA.RSP.sources=[file:/dev/null]
+PIC.Core.FI609HBA.RSP.sources=[file:/dev/null]
+
+PIC.Core.RS104HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS105HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS107HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS108HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS109HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS202HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS203HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS204HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS206HBA.RSP.sources=[file:/dev/null]
+PIC.Core.RS207HBA.RSP.sources=[file:/dev/null]
 
diff --git a/RTCP/Cobalt/GPUProc/doc/rtcp-usage.txt b/RTCP/Cobalt/GPUProc/doc/rtcp-usage.txt
index fa9f8489f0a27be58bcb837db911cea3f3c7fcb1..df558eab1982fb9ca45c9da5ac3becf8eae11506 100644
--- a/RTCP/Cobalt/GPUProc/doc/rtcp-usage.txt
+++ b/RTCP/Cobalt/GPUProc/doc/rtcp-usage.txt
@@ -18,8 +18,7 @@ To build and install Cobalt:
   # configure Cobalt
   mkdir -p $ROOT/build/gnu_opt
   cd $ROOT/build/gnu_opt
-  cmake $ROOT/LOFAR -DBUILD_PACKAGES=Cobalt \
-    -DUSE_CUDA=ON -DUSE_OPENMP=ON -DUSE_MPI=ON
+  cmake $ROOT/LOFAR -DBUILD_PACKAGES=Cobalt -DUSE_OPENMP=ON -DUSE_MPI=ON
 
   # build and install into $ROOT/build/gnu_opt/installed/
   # Note: you can choose another install directory by setting the *CMake*
@@ -218,7 +217,7 @@ data over 1 to 4 RSP boards.
 Each antenna field needs several keys. We'll use CS001LBA as an example. First,
 the input:
 
-  PIC.Core.CS001LBA.RSP.ports = [udp:0.0.0.0:10000, udp:0.0.0.0:10001,
+  PIC.Core.CS001LBA.RSP.sources = [udp:0.0.0.0:10000, udp:0.0.0.0:10001,
                                  udp:0.0.0.0:10002, udp:0.0.0.0:10003]
   PIC.Core.CS001LBA.RSP.receiver = cbt001_0
 
diff --git a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/FinalMetaDataGatherer.parset.in b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/FinalMetaDataGatherer.parset.in
index da4b3fd7ee1159649304c4e1d7f81f7089c9b8e1..830898f1acc1c26b793d226aef76152310de0823 100644
--- a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/FinalMetaDataGatherer.parset.in
+++ b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/FinalMetaDataGatherer.parset.in
@@ -4,23 +4,9 @@
 # If disabled, empty sets will be forwarded to outputProc.
 Cobalt.FinalMetaDataGatherer.enabled = true
 
-# The database hostname to connect to:
-#   Production:  sasdb.control.lofar
-#   Development: sasdbtest.control.lofar (do not use here; prefer hostname redirection)
-# If empty (or missing), the default is used: sasdb.control.lofar
-Cobalt.FinalMetaDataGatherer.database.host = sasdb.control.lofar
-
-# The database port number to connect to.
-# If empty (or missing), the default used: 5432
-Cobalt.FinalMetaDataGatherer.database.port =
-
-# The database name to access.
-# If empty (or missing), the default is used: LOFAR_4
-Cobalt.FinalMetaDataGatherer.database.name =
-
-# The user with which to log in to the database named above.
-# If empty (or missing), the default user name and password are used.
-# If non-empty, the password is used:
-# NOTE: all of these key/vals may end up all over the place incl the data product!!!
-Cobalt.FinalMetaDataGatherer.database.username =
+# The credentials must be stored in $HOME/.lofar/etc/FinalMetaDataGatherer.conf
+#FinalMetaDataGatherer.database.host = sasdb.control.lofar
+#FinalMetaDataGatherer.database.port =
+#FinalMetaDataGatherer.database.name =
+#FinalMetaDataGatherer.database.username =
 
diff --git a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/HardwareList.parset b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/HardwareList.parset
index 5af89da951c8133fc171a3b448afb4c0f3537e30..e6d4147ddb4a4853e9a4f4b65b2911cfad5d27c3 100644
--- a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/HardwareList.parset
+++ b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/HardwareList.parset
@@ -31,7 +31,191 @@ PIC.Core.Cobalt.gpu01_1.cpu=1
 PIC.Core.Cobalt.gpu01_1.mpi_nic=
 PIC.Core.Cobalt.gpu01_1.gpus=[2, 3]
 
-# The Cobalt cluster
+# The Cobalt2 cluster
+
+PIC.Core.Cobalt.cbt201_0.host=cbm201
+PIC.Core.Cobalt.cbt201_0.cpu=0
+PIC.Core.Cobalt.cbt201_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt201_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt201_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt201_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt201_1.host=cbm201
+PIC.Core.Cobalt.cbt201_1.cpu=1
+PIC.Core.Cobalt.cbt201_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt201_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt201_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt201_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt202_0.host=cbm202
+PIC.Core.Cobalt.cbt202_0.cpu=0
+PIC.Core.Cobalt.cbt202_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt202_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt202_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt202_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt202_1.host=cbm202
+PIC.Core.Cobalt.cbt202_1.cpu=1
+PIC.Core.Cobalt.cbt202_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt202_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt202_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt202_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt203_0.host=cbm203
+PIC.Core.Cobalt.cbt203_0.cpu=0
+PIC.Core.Cobalt.cbt203_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt203_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt203_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt203_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt203_1.host=cbm203
+PIC.Core.Cobalt.cbt203_1.cpu=1
+PIC.Core.Cobalt.cbt203_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt203_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt203_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt203_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt204_0.host=cbm204
+PIC.Core.Cobalt.cbt204_0.cpu=0
+PIC.Core.Cobalt.cbt204_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt204_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt204_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt204_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt204_1.host=cbm204
+PIC.Core.Cobalt.cbt204_1.cpu=1
+PIC.Core.Cobalt.cbt204_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt204_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt204_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt204_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt205_0.host=cbm205
+PIC.Core.Cobalt.cbt205_0.cpu=0
+PIC.Core.Cobalt.cbt205_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt205_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt205_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt205_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt205_1.host=cbm205
+PIC.Core.Cobalt.cbt205_1.cpu=1
+PIC.Core.Cobalt.cbt205_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt205_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt205_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt205_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt206_0.host=cbm206
+PIC.Core.Cobalt.cbt206_0.cpu=0
+PIC.Core.Cobalt.cbt206_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt206_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt206_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt206_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt206_1.host=cbm206
+PIC.Core.Cobalt.cbt206_1.cpu=1
+PIC.Core.Cobalt.cbt206_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt206_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt206_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt206_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt207_0.host=cbm207
+PIC.Core.Cobalt.cbt207_0.cpu=0
+PIC.Core.Cobalt.cbt207_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt207_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt207_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt207_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt207_1.host=cbm207
+PIC.Core.Cobalt.cbt207_1.cpu=1
+PIC.Core.Cobalt.cbt207_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt207_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt207_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt207_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt208_0.host=cbm208
+PIC.Core.Cobalt.cbt208_0.cpu=0
+PIC.Core.Cobalt.cbt208_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt208_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt208_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt208_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt208_1.host=cbm208
+PIC.Core.Cobalt.cbt208_1.cpu=1
+PIC.Core.Cobalt.cbt208_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt208_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt208_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt208_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt209_0.host=cbm209
+PIC.Core.Cobalt.cbt209_0.cpu=0
+PIC.Core.Cobalt.cbt209_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt209_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt209_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt209_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt209_1.host=cbm209
+PIC.Core.Cobalt.cbt209_1.cpu=1
+PIC.Core.Cobalt.cbt209_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt209_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt209_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt209_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt210_0.host=cbm210
+PIC.Core.Cobalt.cbt210_0.cpu=0
+PIC.Core.Cobalt.cbt210_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt210_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt210_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt210_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt210_1.host=cbm210
+PIC.Core.Cobalt.cbt210_1.cpu=1
+PIC.Core.Cobalt.cbt210_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt210_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt210_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt210_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt211_0.host=cbm211
+PIC.Core.Cobalt.cbt211_0.cpu=0
+PIC.Core.Cobalt.cbt211_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt211_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt211_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt211_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt211_1.host=cbm211
+PIC.Core.Cobalt.cbt211_1.cpu=1
+PIC.Core.Cobalt.cbt211_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt211_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt211_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt211_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt212_0.host=cbm212
+PIC.Core.Cobalt.cbt212_0.cpu=0
+PIC.Core.Cobalt.cbt212_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt212_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt212_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt212_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt212_1.host=cbm212
+PIC.Core.Cobalt.cbt212_1.cpu=1
+PIC.Core.Cobalt.cbt212_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt212_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt212_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt212_1.gpus=[1]
+
+PIC.Core.Cobalt.cbt213_0.host=cbm213
+PIC.Core.Cobalt.cbt213_0.cpu=0
+PIC.Core.Cobalt.cbt213_0.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt213_0.mpi_nic=mlx5_0
+PIC.Core.Cobalt.cbt213_0.out_nic=[CEP4:ib0,DRAGNET:ib0]
+PIC.Core.Cobalt.cbt213_0.gpus=[0]
+
+PIC.Core.Cobalt.cbt213_1.host=cbm213
+PIC.Core.Cobalt.cbt213_1.cpu=1
+PIC.Core.Cobalt.cbt213_1.avoidCores=[0..7]
+PIC.Core.Cobalt.cbt213_1.mpi_nic=mlx5_1
+PIC.Core.Cobalt.cbt213_1.out_nic=[CEP4:ib1,DRAGNET:ib1]
+PIC.Core.Cobalt.cbt213_1.gpus=[1]
+
+# The Cobalt1 cluster
 
 PIC.Core.Cobalt.cbt001_0.host=cbt001
 PIC.Core.Cobalt.cbt001_0.cpu=0
diff --git a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/HardwareUsed.parset b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/HardwareUsed.parset
index 5509586a4944363c7d04865d368715e30cfa5e6a..6d151920bd683b2017e1c5b2911a5a667d8d3291 100644
--- a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/HardwareUsed.parset
+++ b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/HardwareUsed.parset
@@ -5,22 +5,30 @@
 #   PIC.Core.Cobalt.XXXX.*
 
 Cobalt.Nodes = [
-  cbt001_0,
-  cbt001_1,
-  cbt002_0,
-  cbt002_1,
-  cbt003_0,
-  cbt003_1,
-  cbt004_0,
-  cbt004_1,
-  cbt005_0,
-  cbt005_1,
-  cbt006_0,
-  cbt006_1,
-  cbt007_0,
-  cbt007_1,
-  cbt008_0,
-  cbt008_1
+  cbt201_0,
+  cbt201_1,
+  cbt202_0,
+  cbt202_1,
+  cbt203_0,
+  cbt203_1,
+  cbt204_0,
+  cbt204_1,
+  cbt205_0,
+  cbt205_1,
+  # cbt206 is a spare
+  cbt207_0,
+  cbt207_1,
+  cbt208_0,
+  cbt208_1,
+  cbt209_0,
+  cbt209_1,
+  cbt210_0,
+  cbt210_1,
+  cbt211_0,
+  cbt211_1,
+  cbt212_0,
+  cbt212_1
+  # cbt213 is a spare
 ]
 
 DRAGNET.Nodes = [
diff --git a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/StationStreams.parset b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/StationStreams.parset
index 046055700687759387ac0223036c5d33c21d03f7..bd6703a8a5066e31c84070a7a5f1683cde77ee05 100644
--- a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/StationStreams.parset
+++ b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/StationStreams.parset
@@ -1,309 +1,301 @@
 # StationStreams.parset  This file is generated by generateStationStreams.sh
-PIC.Core.CS001HBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
-PIC.Core.CS001HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS001HBA0.RSP.ports    = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
-PIC.Core.CS001HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS001HBA1.RSP.ports    = [udp:cbt007-10GB01:10016, udp:cbt007-10GB01:10017, udp:cbt007-10GB01:10018, udp:cbt007-10GB01:10019]
-PIC.Core.CS001HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS001LBA.RSP.ports     = [udp:cbt007-10GB01:10010, udp:cbt007-10GB01:10011, udp:cbt007-10GB01:10012, udp:cbt007-10GB01:10013]
-PIC.Core.CS001LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS002HBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
-PIC.Core.CS002HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS002HBA0.RSP.ports    = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
-PIC.Core.CS002HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS002HBA1.RSP.ports    = [udp:cbt003-10GB01:10026, udp:cbt003-10GB01:10027, udp:cbt003-10GB01:10028, udp:cbt003-10GB01:10029]
-PIC.Core.CS002HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS002LBA.RSP.ports     = [udp:cbt003-10GB01:10020, udp:cbt003-10GB01:10021, udp:cbt003-10GB01:10022, udp:cbt003-10GB01:10023]
-PIC.Core.CS002LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS003HBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
-PIC.Core.CS003HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS003HBA0.RSP.ports    = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
-PIC.Core.CS003HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS003HBA1.RSP.ports    = [udp:cbt005-10GB01:10036, udp:cbt005-10GB01:10037, udp:cbt005-10GB01:10038, udp:cbt005-10GB01:10039]
-PIC.Core.CS003HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS003LBA.RSP.ports     = [udp:cbt005-10GB01:10030, udp:cbt005-10GB01:10031, udp:cbt005-10GB01:10032, udp:cbt005-10GB01:10033]
-PIC.Core.CS003LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS004HBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
-PIC.Core.CS004HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS004HBA0.RSP.ports    = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
-PIC.Core.CS004HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS004HBA1.RSP.ports    = [udp:cbt008-10GB01:10046, udp:cbt008-10GB01:10047, udp:cbt008-10GB01:10048, udp:cbt008-10GB01:10049]
-PIC.Core.CS004HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS004LBA.RSP.ports     = [udp:cbt008-10GB01:10040, udp:cbt008-10GB01:10041, udp:cbt008-10GB01:10042, udp:cbt008-10GB01:10043]
-PIC.Core.CS004LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS005HBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
-PIC.Core.CS005HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS005HBA0.RSP.ports    = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
-PIC.Core.CS005HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS005HBA1.RSP.ports    = [udp:cbt001-10GB01:10056, udp:cbt001-10GB01:10057, udp:cbt001-10GB01:10058, udp:cbt001-10GB01:10059]
-PIC.Core.CS005HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS005LBA.RSP.ports     = [udp:cbt001-10GB01:10050, udp:cbt001-10GB01:10051, udp:cbt001-10GB01:10052, udp:cbt001-10GB01:10053]
-PIC.Core.CS005LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS006HBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
-PIC.Core.CS006HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS006HBA0.RSP.ports    = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
-PIC.Core.CS006HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS006HBA1.RSP.ports    = [udp:cbt004-10GB01:10066, udp:cbt004-10GB01:10067, udp:cbt004-10GB01:10068, udp:cbt004-10GB01:10069]
-PIC.Core.CS006HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS006LBA.RSP.ports     = [udp:cbt004-10GB01:10060, udp:cbt004-10GB01:10061, udp:cbt004-10GB01:10062, udp:cbt004-10GB01:10063]
-PIC.Core.CS006LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS007HBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
-PIC.Core.CS007HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS007HBA0.RSP.ports    = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
-PIC.Core.CS007HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS007HBA1.RSP.ports    = [udp:cbt006-10GB01:10076, udp:cbt006-10GB01:10077, udp:cbt006-10GB01:10078, udp:cbt006-10GB01:10079]
-PIC.Core.CS007HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS007LBA.RSP.ports     = [udp:cbt006-10GB01:10070, udp:cbt006-10GB01:10071, udp:cbt006-10GB01:10072, udp:cbt006-10GB01:10073]
-PIC.Core.CS007LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS011HBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
-PIC.Core.CS011HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS011HBA0.RSP.ports    = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
-PIC.Core.CS011HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS011HBA1.RSP.ports    = [udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
-PIC.Core.CS011HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS011LBA.RSP.ports     = [udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
-PIC.Core.CS011LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS013HBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
-PIC.Core.CS013HBA.RSP.receiver  = cbt005_0
-PIC.Core.CS013HBA0.RSP.ports    = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
-PIC.Core.CS013HBA0.RSP.receiver = cbt005_0
-PIC.Core.CS013HBA1.RSP.ports    = [udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
-PIC.Core.CS013HBA1.RSP.receiver = cbt005_0
-PIC.Core.CS013LBA.RSP.ports     = [udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
-PIC.Core.CS013LBA.RSP.receiver  = cbt005_0
-PIC.Core.CS017HBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
-PIC.Core.CS017HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS017HBA0.RSP.ports    = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
-PIC.Core.CS017HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS017HBA1.RSP.ports    = [udp:cbt002-10GB01:10176, udp:cbt002-10GB01:10177, udp:cbt002-10GB01:10178, udp:cbt002-10GB01:10179]
-PIC.Core.CS017HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS017LBA.RSP.ports     = [udp:cbt002-10GB01:10170, udp:cbt002-10GB01:10171, udp:cbt002-10GB01:10172, udp:cbt002-10GB01:10173]
-PIC.Core.CS017LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS021HBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
-PIC.Core.CS021HBA.RSP.receiver  = cbt001_0
-PIC.Core.CS021HBA0.RSP.ports    = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
-PIC.Core.CS021HBA0.RSP.receiver = cbt001_0
-PIC.Core.CS021HBA1.RSP.ports    = [udp:cbt001-10GB02:10216, udp:cbt001-10GB02:10217, udp:cbt001-10GB02:10218, udp:cbt001-10GB02:10219]
-PIC.Core.CS021HBA1.RSP.receiver = cbt001_0
-PIC.Core.CS021LBA.RSP.ports     = [udp:cbt001-10GB02:10210, udp:cbt001-10GB02:10211, udp:cbt001-10GB02:10212, udp:cbt001-10GB02:10213]
-PIC.Core.CS021LBA.RSP.receiver  = cbt001_0
-PIC.Core.CS024HBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
-PIC.Core.CS024HBA.RSP.receiver  = cbt007_0
-PIC.Core.CS024HBA0.RSP.ports    = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
-PIC.Core.CS024HBA0.RSP.receiver = cbt007_0
-PIC.Core.CS024HBA1.RSP.ports    = [udp:cbt007-10GB02:10246, udp:cbt007-10GB02:10247, udp:cbt007-10GB02:10248, udp:cbt007-10GB02:10249]
-PIC.Core.CS024HBA1.RSP.receiver = cbt007_0
-PIC.Core.CS024LBA.RSP.ports     = [udp:cbt007-10GB02:10240, udp:cbt007-10GB02:10241, udp:cbt007-10GB02:10242, udp:cbt007-10GB02:10243]
-PIC.Core.CS024LBA.RSP.receiver  = cbt007_0
-PIC.Core.CS026HBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
-PIC.Core.CS026HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS026HBA0.RSP.ports    = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
-PIC.Core.CS026HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS026HBA1.RSP.ports    = [udp:cbt004-10GB02:10266, udp:cbt004-10GB02:10267, udp:cbt004-10GB02:10268, udp:cbt004-10GB02:10269]
-PIC.Core.CS026HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS026LBA.RSP.ports     = [udp:cbt004-10GB02:10260, udp:cbt004-10GB02:10261, udp:cbt004-10GB02:10262, udp:cbt004-10GB02:10263]
-PIC.Core.CS026LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS028HBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
-PIC.Core.CS028HBA.RSP.receiver  = cbt003_1
-PIC.Core.CS028HBA0.RSP.ports    = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
-PIC.Core.CS028HBA0.RSP.receiver = cbt003_1
-PIC.Core.CS028HBA1.RSP.ports    = [udp:cbt003-10GB03:10286, udp:cbt003-10GB03:10287, udp:cbt003-10GB03:10288, udp:cbt003-10GB03:10289]
-PIC.Core.CS028HBA1.RSP.receiver = cbt003_1
-PIC.Core.CS028LBA.RSP.ports     = [udp:cbt003-10GB03:10280, udp:cbt003-10GB03:10281, udp:cbt003-10GB03:10282, udp:cbt003-10GB03:10283]
-PIC.Core.CS028LBA.RSP.receiver  = cbt003_1
-PIC.Core.CS030HBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
-PIC.Core.CS030HBA.RSP.receiver  = cbt006_0
-PIC.Core.CS030HBA0.RSP.ports    = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
-PIC.Core.CS030HBA0.RSP.receiver = cbt006_0
-PIC.Core.CS030HBA1.RSP.ports    = [udp:cbt006-10GB02:10306, udp:cbt006-10GB02:10307, udp:cbt006-10GB02:10308, udp:cbt006-10GB02:10309]
-PIC.Core.CS030HBA1.RSP.receiver = cbt006_0
-PIC.Core.CS030LBA.RSP.ports     = [udp:cbt006-10GB02:10300, udp:cbt006-10GB02:10301, udp:cbt006-10GB02:10302, udp:cbt006-10GB02:10303]
-PIC.Core.CS030LBA.RSP.receiver  = cbt006_0
-PIC.Core.CS031HBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
-PIC.Core.CS031HBA.RSP.receiver  = cbt004_1
-PIC.Core.CS031HBA0.RSP.ports    = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
-PIC.Core.CS031HBA0.RSP.receiver = cbt004_1
-PIC.Core.CS031HBA1.RSP.ports    = [udp:cbt004-10GB03:10316, udp:cbt004-10GB03:10317, udp:cbt004-10GB03:10318, udp:cbt004-10GB03:10319]
-PIC.Core.CS031HBA1.RSP.receiver = cbt004_1
-PIC.Core.CS031LBA.RSP.ports     = [udp:cbt004-10GB03:10310, udp:cbt004-10GB03:10311, udp:cbt004-10GB03:10312, udp:cbt004-10GB03:10313]
-PIC.Core.CS031LBA.RSP.receiver  = cbt004_1
-PIC.Core.CS032HBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
-PIC.Core.CS032HBA.RSP.receiver  = cbt002_0
-PIC.Core.CS032HBA0.RSP.ports    = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
-PIC.Core.CS032HBA0.RSP.receiver = cbt002_0
-PIC.Core.CS032HBA1.RSP.ports    = [udp:cbt002-10GB02:10326, udp:cbt002-10GB02:10327, udp:cbt002-10GB02:10328, udp:cbt002-10GB02:10329]
-PIC.Core.CS032HBA1.RSP.receiver = cbt002_0
-PIC.Core.CS032LBA.RSP.ports     = [udp:cbt002-10GB02:10320, udp:cbt002-10GB02:10321, udp:cbt002-10GB02:10322, udp:cbt002-10GB02:10323]
-PIC.Core.CS032LBA.RSP.receiver  = cbt002_0
-PIC.Core.CS101HBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
-PIC.Core.CS101HBA.RSP.receiver  = cbt001_1
-PIC.Core.CS101HBA0.RSP.ports    = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
-PIC.Core.CS101HBA0.RSP.receiver = cbt001_1
-PIC.Core.CS101HBA1.RSP.ports    = [udp:cbt001-10GB03:11016, udp:cbt001-10GB03:11017, udp:cbt001-10GB03:11018, udp:cbt001-10GB03:11019]
-PIC.Core.CS101HBA1.RSP.receiver = cbt001_1
-PIC.Core.CS101LBA.RSP.ports     = [udp:cbt001-10GB03:11010, udp:cbt001-10GB03:11011, udp:cbt001-10GB03:11012, udp:cbt001-10GB03:11013]
-PIC.Core.CS101LBA.RSP.receiver  = cbt001_1
-PIC.Core.CS103HBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
-PIC.Core.CS103HBA.RSP.receiver  = cbt008_0
-PIC.Core.CS103HBA0.RSP.ports    = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
-PIC.Core.CS103HBA0.RSP.receiver = cbt008_0
-PIC.Core.CS103HBA1.RSP.ports    = [udp:cbt008-10GB02:11036, udp:cbt008-10GB02:11037, udp:cbt008-10GB02:11038, udp:cbt008-10GB02:11039]
-PIC.Core.CS103HBA1.RSP.receiver = cbt008_0
-PIC.Core.CS103LBA.RSP.ports     = [udp:cbt008-10GB02:11030, udp:cbt008-10GB02:11031, udp:cbt008-10GB02:11032, udp:cbt008-10GB02:11033]
-PIC.Core.CS103LBA.RSP.receiver  = cbt008_0
-PIC.Core.CS201HBA.RSP.ports     = [udp:cbt003-10GB01:12010, udp:cbt003-10GB01:12011, udp:cbt003-10GB01:12012, udp:cbt003-10GB01:12013]
-PIC.Core.CS201HBA.RSP.receiver  = cbt003_0
-PIC.Core.CS201HBA0.RSP.ports    = [udp:cbt003-10GB01:12010, udp:cbt003-10GB01:12011, udp:cbt003-10GB01:12012, udp:cbt003-10GB01:12013]
-PIC.Core.CS201HBA0.RSP.receiver = cbt003_0
-PIC.Core.CS201HBA1.RSP.ports    = [udp:cbt003-10GB02:12016, udp:cbt003-10GB02:12017, udp:cbt003-10GB02:12018, udp:cbt003-10GB02:12019]
-PIC.Core.CS201HBA1.RSP.receiver = cbt003_0
-PIC.Core.CS201LBA.RSP.ports     = [udp:cbt003-10GB01:12010, udp:cbt003-10GB01:12011, udp:cbt003-10GB01:12012, udp:cbt003-10GB01:12013]
-PIC.Core.CS201LBA.RSP.receiver  = cbt003_0
-PIC.Core.CS301HBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
-PIC.Core.CS301HBA.RSP.receiver  = cbt005_1
-PIC.Core.CS301HBA0.RSP.ports    = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
-PIC.Core.CS301HBA0.RSP.receiver = cbt005_1
-PIC.Core.CS301HBA1.RSP.ports    = [udp:cbt005-10GB03:13016, udp:cbt005-10GB03:13017, udp:cbt005-10GB03:13018, udp:cbt005-10GB03:13019]
-PIC.Core.CS301HBA1.RSP.receiver = cbt005_1
-PIC.Core.CS301LBA.RSP.ports     = [udp:cbt005-10GB03:13010, udp:cbt005-10GB03:13011, udp:cbt005-10GB03:13012, udp:cbt005-10GB03:13013]
-PIC.Core.CS301LBA.RSP.receiver  = cbt005_1
-PIC.Core.CS302HBA.RSP.ports     = [udp:cbt004-10GB01:13020, udp:cbt004-10GB01:13021, udp:cbt004-10GB01:13022, udp:cbt004-10GB01:13023]
-PIC.Core.CS302HBA.RSP.receiver  = cbt004_0
-PIC.Core.CS302HBA0.RSP.ports    = [udp:cbt004-10GB01:13020, udp:cbt004-10GB01:13021, udp:cbt004-10GB01:13022, udp:cbt004-10GB01:13023]
-PIC.Core.CS302HBA0.RSP.receiver = cbt004_0
-PIC.Core.CS302HBA1.RSP.ports    = [udp:cbt004-10GB02:13026, udp:cbt004-10GB02:13027, udp:cbt004-10GB02:13028, udp:cbt004-10GB02:13029]
-PIC.Core.CS302HBA1.RSP.receiver = cbt004_0
-PIC.Core.CS302LBA.RSP.ports     = [udp:cbt004-10GB01:13020, udp:cbt004-10GB01:13021, udp:cbt004-10GB01:13022, udp:cbt004-10GB01:13023]
-PIC.Core.CS302LBA.RSP.receiver  = cbt004_0
-PIC.Core.CS401HBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
-PIC.Core.CS401HBA.RSP.receiver  = cbt007_1
-PIC.Core.CS401HBA0.RSP.ports    = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
-PIC.Core.CS401HBA0.RSP.receiver = cbt007_1
-PIC.Core.CS401HBA1.RSP.ports    = [udp:cbt007-10GB03:14016, udp:cbt007-10GB03:14017, udp:cbt007-10GB03:14018, udp:cbt007-10GB03:14019]
-PIC.Core.CS401HBA1.RSP.receiver = cbt007_1
-PIC.Core.CS401LBA.RSP.ports     = [udp:cbt007-10GB03:14010, udp:cbt007-10GB03:14011, udp:cbt007-10GB03:14012, udp:cbt007-10GB03:14013]
-PIC.Core.CS401LBA.RSP.receiver  = cbt007_1
-PIC.Core.CS501HBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
-PIC.Core.CS501HBA.RSP.receiver  = cbt006_1
-PIC.Core.CS501HBA0.RSP.ports    = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
-PIC.Core.CS501HBA0.RSP.receiver = cbt006_1
-PIC.Core.CS501HBA1.RSP.ports    = [udp:cbt006-10GB03:15016, udp:cbt006-10GB03:15017, udp:cbt006-10GB03:15018, udp:cbt006-10GB03:15019]
-PIC.Core.CS501HBA1.RSP.receiver = cbt006_1
-PIC.Core.CS501LBA.RSP.ports     = [udp:cbt006-10GB03:15010, udp:cbt006-10GB03:15011, udp:cbt006-10GB03:15012, udp:cbt006-10GB03:15013]
-PIC.Core.CS501LBA.RSP.receiver  = cbt006_1
-PIC.Core.DE601HBA.RSP.ports     = [udp:10.211.1.108:16010, udp:10.212.1.108:16011, udp:10.213.1.108:16012, udp:10.214.1.108:16013]
-PIC.Core.DE601HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE601LBA.RSP.ports     = [udp:10.211.1.108:16010, udp:10.212.1.108:16011, udp:10.213.1.108:16012, udp:10.214.1.108:16013]
-PIC.Core.DE601LBA.RSP.receiver  = cbt008_1
-PIC.Core.DE602HBA.RSP.ports     = [udp:10.200.41.103:16020, udp:10.200.41.103:16021, udp:10.200.41.103:16022, udp:10.200.41.103:16023]
-PIC.Core.DE602HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE602LBA.RSP.ports     = [udp:10.200.41.103:16020, udp:10.200.41.103:16021, udp:10.200.41.103:16022, udp:10.200.41.103:16023]
-PIC.Core.DE602LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE603HBA.RSP.ports     = [udp:10.211.1.104:16030, udp:10.212.1.104:16031, udp:10.213.1.104:16032, udp:10.214.1.104:16033]
-PIC.Core.DE603HBA.RSP.receiver  = cbt004_1
-PIC.Core.DE603LBA.RSP.ports     = [udp:10.211.1.104:16030, udp:10.212.1.104:16031, udp:10.213.1.104:16032, udp:10.214.1.104:16033]
-PIC.Core.DE603LBA.RSP.receiver  = cbt004_1
-PIC.Core.DE604HBA.RSP.ports     = [udp:10.200.81.103:16040, udp:10.200.81.103:16041, udp:10.200.81.103:16042, udp:10.200.81.103:16043]
-PIC.Core.DE604HBA.RSP.receiver  = cbt003_1
-PIC.Core.DE604LBA.RSP.ports     = [udp:10.200.81.103:16040, udp:10.200.81.103:16041, udp:10.200.81.103:16042, udp:10.200.81.103:16043]
-PIC.Core.DE604LBA.RSP.receiver  = cbt003_1
-PIC.Core.DE605HBA.RSP.ports     = [udp:10.211.1.108:16050, udp:10.212.1.108:16051, udp:10.213.1.108:16052, udp:10.214.1.108:16053]
-PIC.Core.DE605HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE605LBA.RSP.ports     = [udp:10.211.1.108:16050, udp:10.212.1.108:16051, udp:10.213.1.108:16052, udp:10.214.1.108:16053]
-PIC.Core.DE605LBA.RSP.receiver  = cbt008_1
-PIC.Core.DE609HBA.RSP.ports     = [udp:10.200.91.108:16090, udp:10.200.91.108:16091, udp:10.200.92.108:16092, udp:10.200.92.108:16093]
-PIC.Core.DE609HBA.RSP.receiver  = cbt008_1
-PIC.Core.DE609LBA.RSP.ports     = [udp:10.200.91.108:16090, udp:10.200.91.108:16091, udp:10.200.92.108:16092, udp:10.200.92.108:16093]
-PIC.Core.DE609LBA.RSP.receiver  = cbt008_1
-PIC.Core.FR606HBA.RSP.ports     = [udp:10.211.1.105:16060, udp:10.212.1.105:16061, udp:10.213.1.105:16062, udp:10.214.1.105:16063]
-PIC.Core.FR606HBA.RSP.receiver  = cbt005_1
-PIC.Core.FR606LBA.RSP.ports     = [udp:10.211.1.105:16060, udp:10.212.1.105:16061, udp:10.213.1.105:16062, udp:10.214.1.105:16063]
-PIC.Core.FR606LBA.RSP.receiver  = cbt005_1
-PIC.Core.IE613HBA.RSP.ports     = [udp:10.220.81.102:16130, udp:10.220.81.102:16131, udp:10.220.81.102:16132, udp:10.220.81.102:16133]
-PIC.Core.IE613HBA.RSP.receiver  = cbt002_1
-PIC.Core.IE613LBA.RSP.ports     = [udp:10.220.81.102:16130, udp:10.220.81.102:16131, udp:10.220.81.102:16132, udp:10.220.81.102:16133]
-PIC.Core.IE613LBA.RSP.receiver  = cbt002_1
-PIC.Core.PL610HBA.RSP.ports     = [udp:10.220.11.103:16100, udp:10.220.11.103:16101, udp:10.220.11.103:16102, udp:10.220.11.103:16103]
-PIC.Core.PL610HBA.RSP.receiver  = cbt003_1
-PIC.Core.PL610LBA.RSP.ports     = [udp:10.220.11.103:16100, udp:10.220.11.103:16101, udp:10.220.11.103:16102, udp:10.220.11.103:16103]
-PIC.Core.PL610LBA.RSP.receiver  = cbt003_1
-PIC.Core.PL611HBA.RSP.ports     = [udp:10.220.41.104:16110, udp:10.220.41.104:16111, udp:10.220.41.104:16112, udp:10.220.41.104:16113]
-PIC.Core.PL611HBA.RSP.receiver  = cbt004_1
-PIC.Core.PL611LBA.RSP.ports     = [udp:10.220.41.104:16110, udp:10.220.41.104:16111, udp:10.220.41.104:16112, udp:10.220.41.104:16113]
-PIC.Core.PL611LBA.RSP.receiver  = cbt004_1
-PIC.Core.PL612HBA.RSP.ports     = [udp:10.220.61.105:16120, udp:10.220.61.105:16121, udp:10.220.61.105:16122, udp:10.220.61.105:16123]
-PIC.Core.PL612HBA.RSP.receiver  = cbt005_1
-PIC.Core.PL612LBA.RSP.ports     = [udp:10.220.61.105:16120, udp:10.220.61.105:16121, udp:10.220.61.105:16122, udp:10.220.61.105:16123]
-PIC.Core.PL612LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS104HBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
-PIC.Core.RS104HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS104LBA.RSP.ports     = [udp:cbt002-10GB03:11040, udp:cbt002-10GB03:11041, udp:cbt002-10GB03:11042, udp:cbt002-10GB03:11043]
-PIC.Core.RS104LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS106HBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
-PIC.Core.RS106HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS106LBA.RSP.ports     = [udp:cbt008-10GB03:11060, udp:cbt008-10GB03:11061, udp:cbt008-10GB03:11062, udp:cbt008-10GB03:11063]
-PIC.Core.RS106LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS205HBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
-PIC.Core.RS205HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS205LBA.RSP.ports     = [udp:cbt007-10GB04:12050, udp:cbt007-10GB04:12051, udp:cbt007-10GB04:12052, udp:cbt007-10GB04:12053]
-PIC.Core.RS205LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS208HBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
-PIC.Core.RS208HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS208LBA.RSP.ports     = [udp:cbt001-10GB04:12080, udp:cbt001-10GB04:12081, udp:cbt001-10GB04:12082, udp:cbt001-10GB04:12083]
-PIC.Core.RS208LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS210HBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
-PIC.Core.RS210HBA.RSP.receiver  = cbt005_1
-PIC.Core.RS210LBA.RSP.ports     = [udp:cbt005-10GB03:12100, udp:cbt005-10GB03:12101, udp:cbt005-10GB03:12102, udp:cbt005-10GB03:12103]
-PIC.Core.RS210LBA.RSP.receiver  = cbt005_1
-PIC.Core.RS305HBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
-PIC.Core.RS305HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS305LBA.RSP.ports     = [udp:cbt006-10GB04:13050, udp:cbt006-10GB04:13051, udp:cbt006-10GB04:13052, udp:cbt006-10GB04:13053]
-PIC.Core.RS305LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS306HBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
-PIC.Core.RS306HBA.RSP.receiver  = cbt005_0
-PIC.Core.RS306LBA.RSP.ports     = [udp:cbt005-10GB01:13060, udp:cbt005-10GB01:13061, udp:cbt005-10GB01:13062, udp:cbt005-10GB01:13063]
-PIC.Core.RS306LBA.RSP.receiver  = cbt005_0
-PIC.Core.RS307HBA.RSP.ports     = [udp:cbt008-10GB01:13070, udp:cbt008-10GB01:13071, udp:cbt008-10GB01:13072, udp:cbt008-10GB01:13073]
-PIC.Core.RS307HBA.RSP.receiver  = cbt008_0
-PIC.Core.RS307LBA.RSP.ports     = [udp:cbt008-10GB01:13070, udp:cbt008-10GB01:13071, udp:cbt008-10GB01:13072, udp:cbt008-10GB01:13073]
-PIC.Core.RS307LBA.RSP.receiver  = cbt008_0
-PIC.Core.RS310HBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
-PIC.Core.RS310HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS310LBA.RSP.ports     = [udp:cbt002-10GB04:13100, udp:cbt002-10GB04:13101, udp:cbt002-10GB04:13102, udp:cbt002-10GB04:13103]
-PIC.Core.RS310LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS406HBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
-PIC.Core.RS406HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS406LBA.RSP.ports     = [udp:cbt007-10GB03:14060, udp:cbt007-10GB03:14061, udp:cbt007-10GB03:14062, udp:cbt007-10GB03:14063]
-PIC.Core.RS406LBA.RSP.receiver  = cbt007_1
-PIC.Core.RS407HBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
-PIC.Core.RS407HBA.RSP.receiver  = cbt001_1
-PIC.Core.RS407LBA.RSP.ports     = [udp:cbt001-10GB04:14070, udp:cbt001-10GB04:14071, udp:cbt001-10GB04:14072, udp:cbt001-10GB04:14073]
-PIC.Core.RS407LBA.RSP.receiver  = cbt001_1
-PIC.Core.RS409HBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
-PIC.Core.RS409HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS409LBA.RSP.ports     = [udp:cbt002-10GB03:14090, udp:cbt002-10GB03:14091, udp:cbt002-10GB03:14092, udp:cbt002-10GB03:14093]
-PIC.Core.RS409LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410HBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
-PIC.Core.RS410HBA.RSP.receiver  = cbt002_1
-PIC.Core.RS410LBA.RSP.ports     = [udp:cbt002-10GB04:14100, udp:cbt002-10GB04:14101, udp:cbt002-10GB04:14102, udp:cbt002-10GB04:14103]
-PIC.Core.RS410LBA.RSP.receiver  = cbt002_1
-PIC.Core.RS503HBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
-PIC.Core.RS503HBA.RSP.receiver  = cbt006_1
-PIC.Core.RS503LBA.RSP.ports     = [udp:cbt006-10GB04:15030, udp:cbt006-10GB04:15031, udp:cbt006-10GB04:15032, udp:cbt006-10GB04:15033]
-PIC.Core.RS503LBA.RSP.receiver  = cbt006_1
-PIC.Core.RS508HBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
-PIC.Core.RS508HBA.RSP.receiver  = cbt008_1
-PIC.Core.RS508LBA.RSP.ports     = [udp:cbt008-10GB03:15080, udp:cbt008-10GB03:15081, udp:cbt008-10GB03:15082, udp:cbt008-10GB03:15083]
-PIC.Core.RS508LBA.RSP.receiver  = cbt008_1
-PIC.Core.RS509HBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
-PIC.Core.RS509HBA.RSP.receiver  = cbt007_1
-PIC.Core.RS509LBA.RSP.ports     = [udp:cbt007-10GB04:15090, udp:cbt007-10GB04:15091, udp:cbt007-10GB04:15092, udp:cbt007-10GB04:15093]
-PIC.Core.RS509LBA.RSP.receiver  = cbt007_1
-PIC.Core.SE607HBA.RSP.ports     = [udp:10.211.1.104:16070, udp:10.212.1.104:16071, udp:10.213.1.104:16072, udp:10.214.1.104:16073]
-PIC.Core.SE607HBA.RSP.receiver  = cbt004_1
-PIC.Core.SE607LBA.RSP.ports     = [udp:10.211.1.104:16070, udp:10.212.1.104:16071, udp:10.213.1.104:16072, udp:10.214.1.104:16073]
-PIC.Core.SE607LBA.RSP.receiver  = cbt004_1
-PIC.Core.UK608HBA.RSP.ports     = [udp:10.211.1.105:16080, udp:10.212.1.105:16081, udp:10.213.1.105:16082, udp:10.214.1.105:16083]
-PIC.Core.UK608HBA.RSP.receiver  = cbt005_1
-PIC.Core.UK608LBA.RSP.ports     = [udp:10.211.1.105:16080, udp:10.212.1.105:16081, udp:10.213.1.105:16082, udp:10.214.1.105:16083]
-PIC.Core.UK608LBA.RSP.receiver  = cbt005_1
+PIC.Core.CS001HBA.RSP.sources     = [udp:cbt201-10GB01.online.lofar:10010, udp:cbt201-10GB01.online.lofar:10011, udp:cbt201-10GB01.online.lofar:10012, udp:cbt201-10GB01.online.lofar:10013]
+PIC.Core.CS001HBA.RSP.receiver  = cbt201_0
+PIC.Core.CS001HBA0.RSP.sources    = [udp:cbt201-10GB01.online.lofar:10010, udp:cbt201-10GB01.online.lofar:10011, udp:cbt201-10GB01.online.lofar:10012, udp:cbt201-10GB01.online.lofar:10013]
+PIC.Core.CS001HBA0.RSP.receiver = cbt201_0
+PIC.Core.CS001HBA1.RSP.sources    = [udp:cbt201-10GB01.online.lofar:10016, udp:cbt201-10GB01.online.lofar:10017, udp:cbt201-10GB01.online.lofar:10018, udp:cbt201-10GB01.online.lofar:10019]
+PIC.Core.CS001HBA1.RSP.receiver = cbt201_0
+PIC.Core.CS001LBA.RSP.sources     = [udp:cbt201-10GB01.online.lofar:10010, udp:cbt201-10GB01.online.lofar:10011, udp:cbt201-10GB01.online.lofar:10012, udp:cbt201-10GB01.online.lofar:10013]
+PIC.Core.CS001LBA.RSP.receiver  = cbt201_0
+PIC.Core.CS002HBA.RSP.sources     = [udp:cbt207-10GB01.online.lofar:10020, udp:cbt207-10GB01.online.lofar:10021, udp:cbt207-10GB01.online.lofar:10022, udp:cbt207-10GB01.online.lofar:10023]
+PIC.Core.CS002HBA.RSP.receiver  = cbt207_0
+PIC.Core.CS002HBA0.RSP.sources    = [udp:cbt207-10GB01.online.lofar:10020, udp:cbt207-10GB01.online.lofar:10021, udp:cbt207-10GB01.online.lofar:10022, udp:cbt207-10GB01.online.lofar:10023]
+PIC.Core.CS002HBA0.RSP.receiver = cbt207_0
+PIC.Core.CS002HBA1.RSP.sources    = [udp:cbt207-10GB01.online.lofar:10026, udp:cbt207-10GB01.online.lofar:10027, udp:cbt207-10GB01.online.lofar:10028, udp:cbt207-10GB01.online.lofar:10029]
+PIC.Core.CS002HBA1.RSP.receiver = cbt207_0
+PIC.Core.CS002LBA.RSP.sources     = [udp:cbt207-10GB01.online.lofar:10020, udp:cbt207-10GB01.online.lofar:10021, udp:cbt207-10GB01.online.lofar:10022, udp:cbt207-10GB01.online.lofar:10023]
+PIC.Core.CS002LBA.RSP.receiver  = cbt207_0
+PIC.Core.CS003HBA.RSP.sources     = [udp:cbt208-10GB01.online.lofar:10030, udp:cbt208-10GB01.online.lofar:10031, udp:cbt208-10GB01.online.lofar:10032, udp:cbt208-10GB01.online.lofar:10033]
+PIC.Core.CS003HBA.RSP.receiver  = cbt208_0
+PIC.Core.CS003HBA0.RSP.sources    = [udp:cbt208-10GB01.online.lofar:10030, udp:cbt208-10GB01.online.lofar:10031, udp:cbt208-10GB01.online.lofar:10032, udp:cbt208-10GB01.online.lofar:10033]
+PIC.Core.CS003HBA0.RSP.receiver = cbt208_0
+PIC.Core.CS003HBA1.RSP.sources    = [udp:cbt208-10GB01.online.lofar:10036, udp:cbt208-10GB01.online.lofar:10037, udp:cbt208-10GB01.online.lofar:10038, udp:cbt208-10GB01.online.lofar:10039]
+PIC.Core.CS003HBA1.RSP.receiver = cbt208_0
+PIC.Core.CS003LBA.RSP.sources     = [udp:cbt208-10GB01.online.lofar:10030, udp:cbt208-10GB01.online.lofar:10031, udp:cbt208-10GB01.online.lofar:10032, udp:cbt208-10GB01.online.lofar:10033]
+PIC.Core.CS003LBA.RSP.receiver  = cbt208_0
+PIC.Core.CS004HBA.RSP.sources     = [udp:cbt209-10GB01.online.lofar:10040, udp:cbt209-10GB01.online.lofar:10041, udp:cbt209-10GB01.online.lofar:10042, udp:cbt209-10GB01.online.lofar:10043]
+PIC.Core.CS004HBA.RSP.receiver  = cbt209_0
+PIC.Core.CS004HBA0.RSP.sources    = [udp:cbt209-10GB01.online.lofar:10040, udp:cbt209-10GB01.online.lofar:10041, udp:cbt209-10GB01.online.lofar:10042, udp:cbt209-10GB01.online.lofar:10043]
+PIC.Core.CS004HBA0.RSP.receiver = cbt209_0
+PIC.Core.CS004HBA1.RSP.sources    = [udp:cbt209-10GB01.online.lofar:10046, udp:cbt209-10GB01.online.lofar:10047, udp:cbt209-10GB01.online.lofar:10048, udp:cbt209-10GB01.online.lofar:10049]
+PIC.Core.CS004HBA1.RSP.receiver = cbt209_0
+PIC.Core.CS004LBA.RSP.sources     = [udp:cbt209-10GB01.online.lofar:10040, udp:cbt209-10GB01.online.lofar:10041, udp:cbt209-10GB01.online.lofar:10042, udp:cbt209-10GB01.online.lofar:10043]
+PIC.Core.CS004LBA.RSP.receiver  = cbt209_0
+PIC.Core.CS005HBA.RSP.sources     = [udp:cbt202-10GB01.online.lofar:10050, udp:cbt202-10GB01.online.lofar:10051, udp:cbt202-10GB01.online.lofar:10052, udp:cbt202-10GB01.online.lofar:10053]
+PIC.Core.CS005HBA.RSP.receiver  = cbt202_0
+PIC.Core.CS005HBA0.RSP.sources    = [udp:cbt202-10GB01.online.lofar:10050, udp:cbt202-10GB01.online.lofar:10051, udp:cbt202-10GB01.online.lofar:10052, udp:cbt202-10GB01.online.lofar:10053]
+PIC.Core.CS005HBA0.RSP.receiver = cbt202_0
+PIC.Core.CS005HBA1.RSP.sources    = [udp:cbt202-10GB01.online.lofar:10056, udp:cbt202-10GB01.online.lofar:10057, udp:cbt202-10GB01.online.lofar:10058, udp:cbt202-10GB01.online.lofar:10059]
+PIC.Core.CS005HBA1.RSP.receiver = cbt202_0
+PIC.Core.CS005LBA.RSP.sources     = [udp:cbt202-10GB01.online.lofar:10050, udp:cbt202-10GB01.online.lofar:10051, udp:cbt202-10GB01.online.lofar:10052, udp:cbt202-10GB01.online.lofar:10053]
+PIC.Core.CS005LBA.RSP.receiver  = cbt202_0
+PIC.Core.CS006HBA.RSP.sources     = [udp:cbt210-10GB01.online.lofar:10060, udp:cbt210-10GB01.online.lofar:10061, udp:cbt210-10GB01.online.lofar:10062, udp:cbt210-10GB01.online.lofar:10063]
+PIC.Core.CS006HBA.RSP.receiver  = cbt210_0
+PIC.Core.CS006HBA0.RSP.sources    = [udp:cbt210-10GB01.online.lofar:10060, udp:cbt210-10GB01.online.lofar:10061, udp:cbt210-10GB01.online.lofar:10062, udp:cbt210-10GB01.online.lofar:10063]
+PIC.Core.CS006HBA0.RSP.receiver = cbt210_0
+PIC.Core.CS006HBA1.RSP.sources    = [udp:cbt210-10GB01.online.lofar:10066, udp:cbt210-10GB01.online.lofar:10067, udp:cbt210-10GB01.online.lofar:10068, udp:cbt210-10GB01.online.lofar:10069]
+PIC.Core.CS006HBA1.RSP.receiver = cbt210_0
+PIC.Core.CS006LBA.RSP.sources     = [udp:cbt210-10GB01.online.lofar:10060, udp:cbt210-10GB01.online.lofar:10061, udp:cbt210-10GB01.online.lofar:10062, udp:cbt210-10GB01.online.lofar:10063]
+PIC.Core.CS006LBA.RSP.receiver  = cbt210_0
+PIC.Core.CS007HBA.RSP.sources     = [udp:cbt203-10GB01.online.lofar:10070, udp:cbt203-10GB01.online.lofar:10071, udp:cbt203-10GB01.online.lofar:10072, udp:cbt203-10GB01.online.lofar:10073]
+PIC.Core.CS007HBA.RSP.receiver  = cbt203_0
+PIC.Core.CS007HBA0.RSP.sources    = [udp:cbt203-10GB01.online.lofar:10070, udp:cbt203-10GB01.online.lofar:10071, udp:cbt203-10GB01.online.lofar:10072, udp:cbt203-10GB01.online.lofar:10073]
+PIC.Core.CS007HBA0.RSP.receiver = cbt203_0
+PIC.Core.CS007HBA1.RSP.sources    = [udp:cbt203-10GB01.online.lofar:10076, udp:cbt203-10GB01.online.lofar:10077, udp:cbt203-10GB01.online.lofar:10078, udp:cbt203-10GB01.online.lofar:10079]
+PIC.Core.CS007HBA1.RSP.receiver = cbt203_0
+PIC.Core.CS007LBA.RSP.sources     = [udp:cbt203-10GB01.online.lofar:10070, udp:cbt203-10GB01.online.lofar:10071, udp:cbt203-10GB01.online.lofar:10072, udp:cbt203-10GB01.online.lofar:10073]
+PIC.Core.CS007LBA.RSP.receiver  = cbt203_0
+PIC.Core.CS011HBA.RSP.sources     = [udp:cbt211-10GB01.online.lofar:10110, udp:cbt211-10GB01.online.lofar:10111, udp:cbt211-10GB01.online.lofar:10112, udp:cbt211-10GB01.online.lofar:10113]
+PIC.Core.CS011HBA.RSP.receiver  = cbt211_0
+PIC.Core.CS011HBA0.RSP.sources    = [udp:cbt211-10GB01.online.lofar:10110, udp:cbt211-10GB01.online.lofar:10111, udp:cbt211-10GB01.online.lofar:10112, udp:cbt211-10GB01.online.lofar:10113]
+PIC.Core.CS011HBA0.RSP.receiver = cbt211_0
+PIC.Core.CS011HBA1.RSP.sources    = [udp:cbt211-10GB01.online.lofar:10116, udp:cbt211-10GB01.online.lofar:10117, udp:cbt211-10GB01.online.lofar:10118, udp:cbt211-10GB01.online.lofar:10119]
+PIC.Core.CS011HBA1.RSP.receiver = cbt211_0
+PIC.Core.CS011LBA.RSP.sources     = [udp:cbt211-10GB01.online.lofar:10110, udp:cbt211-10GB01.online.lofar:10111, udp:cbt211-10GB01.online.lofar:10112, udp:cbt211-10GB01.online.lofar:10113]
+PIC.Core.CS011LBA.RSP.receiver  = cbt211_0
+PIC.Core.CS013HBA.RSP.sources     = [udp:cbt212-10GB01.online.lofar:10130, udp:cbt212-10GB01.online.lofar:10131, udp:cbt212-10GB01.online.lofar:10132, udp:cbt212-10GB01.online.lofar:10133]
+PIC.Core.CS013HBA.RSP.receiver  = cbt212_0
+PIC.Core.CS013HBA0.RSP.sources    = [udp:cbt212-10GB01.online.lofar:10130, udp:cbt212-10GB01.online.lofar:10131, udp:cbt212-10GB01.online.lofar:10132, udp:cbt212-10GB01.online.lofar:10133]
+PIC.Core.CS013HBA0.RSP.receiver = cbt212_0
+PIC.Core.CS013HBA1.RSP.sources    = [udp:cbt212-10GB01.online.lofar:10136, udp:cbt212-10GB01.online.lofar:10137, udp:cbt212-10GB01.online.lofar:10138, udp:cbt212-10GB01.online.lofar:10139]
+PIC.Core.CS013HBA1.RSP.receiver = cbt212_0
+PIC.Core.CS013LBA.RSP.sources     = [udp:cbt212-10GB01.online.lofar:10130, udp:cbt212-10GB01.online.lofar:10131, udp:cbt212-10GB01.online.lofar:10132, udp:cbt212-10GB01.online.lofar:10133]
+PIC.Core.CS013LBA.RSP.receiver  = cbt212_0
+PIC.Core.CS017HBA.RSP.sources     = [udp:cbt204-10GB01.online.lofar:10170, udp:cbt204-10GB01.online.lofar:10171, udp:cbt204-10GB01.online.lofar:10172, udp:cbt204-10GB01.online.lofar:10173]
+PIC.Core.CS017HBA.RSP.receiver  = cbt204_0
+PIC.Core.CS017HBA0.RSP.sources    = [udp:cbt204-10GB01.online.lofar:10170, udp:cbt204-10GB01.online.lofar:10171, udp:cbt204-10GB01.online.lofar:10172, udp:cbt204-10GB01.online.lofar:10173]
+PIC.Core.CS017HBA0.RSP.receiver = cbt204_0
+PIC.Core.CS017HBA1.RSP.sources    = [udp:cbt204-10GB01.online.lofar:10176, udp:cbt204-10GB01.online.lofar:10177, udp:cbt204-10GB01.online.lofar:10178, udp:cbt204-10GB01.online.lofar:10179]
+PIC.Core.CS017HBA1.RSP.receiver = cbt204_0
+PIC.Core.CS017LBA.RSP.sources     = [udp:cbt204-10GB01.online.lofar:10170, udp:cbt204-10GB01.online.lofar:10171, udp:cbt204-10GB01.online.lofar:10172, udp:cbt204-10GB01.online.lofar:10173]
+PIC.Core.CS017LBA.RSP.receiver  = cbt204_0
+PIC.Core.CS021HBA.RSP.sources     = [udp:cbt205-10GB01.online.lofar:10210, udp:cbt205-10GB01.online.lofar:10211, udp:cbt205-10GB01.online.lofar:10212, udp:cbt205-10GB01.online.lofar:10213]
+PIC.Core.CS021HBA.RSP.receiver  = cbt205_0
+PIC.Core.CS021HBA0.RSP.sources    = [udp:cbt205-10GB01.online.lofar:10210, udp:cbt205-10GB01.online.lofar:10211, udp:cbt205-10GB01.online.lofar:10212, udp:cbt205-10GB01.online.lofar:10213]
+PIC.Core.CS021HBA0.RSP.receiver = cbt205_0
+PIC.Core.CS021HBA1.RSP.sources    = [udp:cbt205-10GB01.online.lofar:10216, udp:cbt205-10GB01.online.lofar:10217, udp:cbt205-10GB01.online.lofar:10218, udp:cbt205-10GB01.online.lofar:10219]
+PIC.Core.CS021HBA1.RSP.receiver = cbt205_0
+PIC.Core.CS021LBA.RSP.sources     = [udp:cbt205-10GB01.online.lofar:10210, udp:cbt205-10GB01.online.lofar:10211, udp:cbt205-10GB01.online.lofar:10212, udp:cbt205-10GB01.online.lofar:10213]
+PIC.Core.CS021LBA.RSP.receiver  = cbt205_0
+PIC.Core.CS024HBA.RSP.sources     = [udp:cbt201-10GB04.online.lofar:10240, udp:cbt201-10GB04.online.lofar:10241, udp:cbt201-10GB04.online.lofar:10242, udp:cbt201-10GB04.online.lofar:10243]
+PIC.Core.CS024HBA.RSP.receiver  = cbt201_0
+PIC.Core.CS024HBA0.RSP.sources    = [udp:cbt201-10GB04.online.lofar:10240, udp:cbt201-10GB04.online.lofar:10241, udp:cbt201-10GB04.online.lofar:10242, udp:cbt201-10GB04.online.lofar:10243]
+PIC.Core.CS024HBA0.RSP.receiver = cbt201_0
+PIC.Core.CS024HBA1.RSP.sources    = [udp:cbt201-10GB04.online.lofar:10246, udp:cbt201-10GB04.online.lofar:10247, udp:cbt201-10GB04.online.lofar:10248, udp:cbt201-10GB04.online.lofar:10249]
+PIC.Core.CS024HBA1.RSP.receiver = cbt201_0
+PIC.Core.CS024LBA.RSP.sources     = [udp:cbt201-10GB04.online.lofar:10240, udp:cbt201-10GB04.online.lofar:10241, udp:cbt201-10GB04.online.lofar:10242, udp:cbt201-10GB04.online.lofar:10243]
+PIC.Core.CS024LBA.RSP.receiver  = cbt201_0
+PIC.Core.CS026HBA.RSP.sources     = [udp:cbt207-10GB04.online.lofar:10260, udp:cbt207-10GB04.online.lofar:10261, udp:cbt207-10GB04.online.lofar:10262, udp:cbt207-10GB04.online.lofar:10263]
+PIC.Core.CS026HBA.RSP.receiver  = cbt207_0
+PIC.Core.CS026HBA0.RSP.sources    = [udp:cbt207-10GB04.online.lofar:10260, udp:cbt207-10GB04.online.lofar:10261, udp:cbt207-10GB04.online.lofar:10262, udp:cbt207-10GB04.online.lofar:10263]
+PIC.Core.CS026HBA0.RSP.receiver = cbt207_0
+PIC.Core.CS026HBA1.RSP.sources    = [udp:cbt207-10GB04.online.lofar:10266, udp:cbt207-10GB04.online.lofar:10267, udp:cbt207-10GB04.online.lofar:10268, udp:cbt207-10GB04.online.lofar:10269]
+PIC.Core.CS026HBA1.RSP.receiver = cbt207_0
+PIC.Core.CS026LBA.RSP.sources     = [udp:cbt207-10GB04.online.lofar:10260, udp:cbt207-10GB04.online.lofar:10261, udp:cbt207-10GB04.online.lofar:10262, udp:cbt207-10GB04.online.lofar:10263]
+PIC.Core.CS026LBA.RSP.receiver  = cbt207_0
+PIC.Core.CS028HBA.RSP.sources     = [udp:cbt208-10GB04.online.lofar:10280, udp:cbt208-10GB04.online.lofar:10281, udp:cbt208-10GB04.online.lofar:10282, udp:cbt208-10GB04.online.lofar:10283]
+PIC.Core.CS028HBA.RSP.receiver  = cbt208_0
+PIC.Core.CS028HBA0.RSP.sources    = [udp:cbt208-10GB04.online.lofar:10280, udp:cbt208-10GB04.online.lofar:10281, udp:cbt208-10GB04.online.lofar:10282, udp:cbt208-10GB04.online.lofar:10283]
+PIC.Core.CS028HBA0.RSP.receiver = cbt208_0
+PIC.Core.CS028HBA1.RSP.sources    = [udp:cbt208-10GB04.online.lofar:10286, udp:cbt208-10GB04.online.lofar:10287, udp:cbt208-10GB04.online.lofar:10288, udp:cbt208-10GB04.online.lofar:10289]
+PIC.Core.CS028HBA1.RSP.receiver = cbt208_0
+PIC.Core.CS028LBA.RSP.sources     = [udp:cbt208-10GB04.online.lofar:10280, udp:cbt208-10GB04.online.lofar:10281, udp:cbt208-10GB04.online.lofar:10282, udp:cbt208-10GB04.online.lofar:10283]
+PIC.Core.CS028LBA.RSP.receiver  = cbt208_0
+PIC.Core.CS030HBA.RSP.sources     = [udp:cbt204-10GB06.online.lofar:10300, udp:cbt204-10GB06.online.lofar:10301, udp:cbt204-10GB06.online.lofar:10302, udp:cbt204-10GB06.online.lofar:10303]
+PIC.Core.CS030HBA.RSP.receiver  = cbt204_1
+PIC.Core.CS030HBA0.RSP.sources    = [udp:cbt204-10GB06.online.lofar:10300, udp:cbt204-10GB06.online.lofar:10301, udp:cbt204-10GB06.online.lofar:10302, udp:cbt204-10GB06.online.lofar:10303]
+PIC.Core.CS030HBA0.RSP.receiver = cbt204_1
+PIC.Core.CS030HBA1.RSP.sources    = [udp:cbt204-10GB06.online.lofar:10306, udp:cbt204-10GB06.online.lofar:10307, udp:cbt204-10GB06.online.lofar:10308, udp:cbt204-10GB06.online.lofar:10309]
+PIC.Core.CS030HBA1.RSP.receiver = cbt204_1
+PIC.Core.CS030LBA.RSP.sources     = [udp:cbt204-10GB06.online.lofar:10300, udp:cbt204-10GB06.online.lofar:10301, udp:cbt204-10GB06.online.lofar:10302, udp:cbt204-10GB06.online.lofar:10303]
+PIC.Core.CS030LBA.RSP.receiver  = cbt204_1
+PIC.Core.CS031HBA.RSP.sources     = [udp:cbt209-10GB04.online.lofar:10310, udp:cbt209-10GB04.online.lofar:10311, udp:cbt209-10GB04.online.lofar:10312, udp:cbt209-10GB04.online.lofar:10313]
+PIC.Core.CS031HBA.RSP.receiver  = cbt209_0
+PIC.Core.CS031HBA0.RSP.sources    = [udp:cbt209-10GB04.online.lofar:10310, udp:cbt209-10GB04.online.lofar:10311, udp:cbt209-10GB04.online.lofar:10312, udp:cbt209-10GB04.online.lofar:10313]
+PIC.Core.CS031HBA0.RSP.receiver = cbt209_0
+PIC.Core.CS031HBA1.RSP.sources    = [udp:cbt209-10GB04.online.lofar:10316, udp:cbt209-10GB04.online.lofar:10317, udp:cbt209-10GB04.online.lofar:10318, udp:cbt209-10GB04.online.lofar:10319]
+PIC.Core.CS031HBA1.RSP.receiver = cbt209_0
+PIC.Core.CS031LBA.RSP.sources     = [udp:cbt209-10GB04.online.lofar:10310, udp:cbt209-10GB04.online.lofar:10311, udp:cbt209-10GB04.online.lofar:10312, udp:cbt209-10GB04.online.lofar:10313]
+PIC.Core.CS031LBA.RSP.receiver  = cbt209_0
+PIC.Core.CS032HBA.RSP.sources     = [udp:cbt203-10GB04.online.lofar:10320, udp:cbt203-10GB04.online.lofar:10321, udp:cbt203-10GB04.online.lofar:10322, udp:cbt203-10GB04.online.lofar:10323]
+PIC.Core.CS032HBA.RSP.receiver  = cbt203_0
+PIC.Core.CS032HBA0.RSP.sources    = [udp:cbt203-10GB04.online.lofar:10320, udp:cbt203-10GB04.online.lofar:10321, udp:cbt203-10GB04.online.lofar:10322, udp:cbt203-10GB04.online.lofar:10323]
+PIC.Core.CS032HBA0.RSP.receiver = cbt203_0
+PIC.Core.CS032HBA1.RSP.sources    = [udp:cbt203-10GB04.online.lofar:10326, udp:cbt203-10GB04.online.lofar:10327, udp:cbt203-10GB04.online.lofar:10328, udp:cbt203-10GB04.online.lofar:10329]
+PIC.Core.CS032HBA1.RSP.receiver = cbt203_0
+PIC.Core.CS032LBA.RSP.sources     = [udp:cbt203-10GB04.online.lofar:10320, udp:cbt203-10GB04.online.lofar:10321, udp:cbt203-10GB04.online.lofar:10322, udp:cbt203-10GB04.online.lofar:10323]
+PIC.Core.CS032LBA.RSP.receiver  = cbt203_0
+PIC.Core.CS101HBA.RSP.sources     = [udp:cbt204-10GB04.online.lofar:11010, udp:cbt204-10GB04.online.lofar:11011, udp:cbt204-10GB04.online.lofar:11012, udp:cbt204-10GB04.online.lofar:11013]
+PIC.Core.CS101HBA.RSP.receiver  = cbt204_0
+PIC.Core.CS101HBA0.RSP.sources    = [udp:cbt204-10GB04.online.lofar:11010, udp:cbt204-10GB04.online.lofar:11011, udp:cbt204-10GB04.online.lofar:11012, udp:cbt204-10GB04.online.lofar:11013]
+PIC.Core.CS101HBA0.RSP.receiver = cbt204_0
+PIC.Core.CS101HBA1.RSP.sources    = [udp:cbt204-10GB04.online.lofar:11016, udp:cbt204-10GB04.online.lofar:11017, udp:cbt204-10GB04.online.lofar:11018, udp:cbt204-10GB04.online.lofar:11019]
+PIC.Core.CS101HBA1.RSP.receiver = cbt204_0
+PIC.Core.CS101LBA.RSP.sources     = [udp:cbt204-10GB04.online.lofar:11010, udp:cbt204-10GB04.online.lofar:11011, udp:cbt204-10GB04.online.lofar:11012, udp:cbt204-10GB04.online.lofar:11013]
+PIC.Core.CS101LBA.RSP.receiver  = cbt204_0
+PIC.Core.CS103HBA.RSP.sources     = [udp:cbt210-10GB04.online.lofar:11030, udp:cbt210-10GB04.online.lofar:11031, udp:cbt210-10GB04.online.lofar:11032, udp:cbt210-10GB04.online.lofar:11033]
+PIC.Core.CS103HBA.RSP.receiver  = cbt210_0
+PIC.Core.CS103HBA0.RSP.sources    = [udp:cbt210-10GB04.online.lofar:11030, udp:cbt210-10GB04.online.lofar:11031, udp:cbt210-10GB04.online.lofar:11032, udp:cbt210-10GB04.online.lofar:11033]
+PIC.Core.CS103HBA0.RSP.receiver = cbt210_0
+PIC.Core.CS103HBA1.RSP.sources    = [udp:cbt210-10GB04.online.lofar:11036, udp:cbt210-10GB04.online.lofar:11037, udp:cbt210-10GB04.online.lofar:11038, udp:cbt210-10GB04.online.lofar:11039]
+PIC.Core.CS103HBA1.RSP.receiver = cbt210_0
+PIC.Core.CS103LBA.RSP.sources     = [udp:cbt210-10GB04.online.lofar:11030, udp:cbt210-10GB04.online.lofar:11031, udp:cbt210-10GB04.online.lofar:11032, udp:cbt210-10GB04.online.lofar:11033]
+PIC.Core.CS103LBA.RSP.receiver  = cbt210_0
+PIC.Core.CS201HBA.RSP.sources     = [udp:cbt211-10GB04.online.lofar:12010, udp:cbt211-10GB04.online.lofar:12011, udp:cbt211-10GB04.online.lofar:12012, udp:cbt211-10GB04.online.lofar:12013]
+PIC.Core.CS201HBA.RSP.receiver  = cbt211_0
+PIC.Core.CS201HBA0.RSP.sources    = [udp:cbt211-10GB04.online.lofar:12010, udp:cbt211-10GB04.online.lofar:12011, udp:cbt211-10GB04.online.lofar:12012, udp:cbt211-10GB04.online.lofar:12013]
+PIC.Core.CS201HBA0.RSP.receiver = cbt211_0
+PIC.Core.CS201HBA1.RSP.sources    = [udp:cbt211-10GB04.online.lofar:12016, udp:cbt211-10GB04.online.lofar:12017, udp:cbt211-10GB04.online.lofar:12018, udp:cbt211-10GB04.online.lofar:12019]
+PIC.Core.CS201HBA1.RSP.receiver = cbt211_0
+PIC.Core.CS201LBA.RSP.sources     = [udp:cbt211-10GB04.online.lofar:12010, udp:cbt211-10GB04.online.lofar:12011, udp:cbt211-10GB04.online.lofar:12012, udp:cbt211-10GB04.online.lofar:12013]
+PIC.Core.CS201LBA.RSP.receiver  = cbt211_0
+PIC.Core.CS301HBA.RSP.sources     = [udp:cbt212-10GB04.online.lofar:13010, udp:cbt212-10GB04.online.lofar:13011, udp:cbt212-10GB04.online.lofar:13012, udp:cbt212-10GB04.online.lofar:13013]
+PIC.Core.CS301HBA.RSP.receiver  = cbt212_0
+PIC.Core.CS301HBA0.RSP.sources    = [udp:cbt212-10GB04.online.lofar:13010, udp:cbt212-10GB04.online.lofar:13011, udp:cbt212-10GB04.online.lofar:13012, udp:cbt212-10GB04.online.lofar:13013]
+PIC.Core.CS301HBA0.RSP.receiver = cbt212_0
+PIC.Core.CS301HBA1.RSP.sources    = [udp:cbt212-10GB04.online.lofar:13016, udp:cbt212-10GB04.online.lofar:13017, udp:cbt212-10GB04.online.lofar:13018, udp:cbt212-10GB04.online.lofar:13019]
+PIC.Core.CS301HBA1.RSP.receiver = cbt212_0
+PIC.Core.CS301LBA.RSP.sources     = [udp:cbt212-10GB04.online.lofar:13010, udp:cbt212-10GB04.online.lofar:13011, udp:cbt212-10GB04.online.lofar:13012, udp:cbt212-10GB04.online.lofar:13013]
+PIC.Core.CS301LBA.RSP.receiver  = cbt212_0
+PIC.Core.CS302HBA.RSP.sources     = [udp:cbt207-10GB04.online.lofar:13020, udp:cbt207-10GB04.online.lofar:13021, udp:cbt207-10GB04.online.lofar:13022, udp:cbt207-10GB04.online.lofar:13023]
+PIC.Core.CS302HBA.RSP.receiver  = cbt207_0
+PIC.Core.CS302HBA0.RSP.sources    = [udp:cbt207-10GB04.online.lofar:13020, udp:cbt207-10GB04.online.lofar:13021, udp:cbt207-10GB04.online.lofar:13022, udp:cbt207-10GB04.online.lofar:13023]
+PIC.Core.CS302HBA0.RSP.receiver = cbt207_0
+PIC.Core.CS302HBA1.RSP.sources    = [udp:cbt207-10GB06.online.lofar:13026, udp:cbt207-10GB06.online.lofar:13027, udp:cbt207-10GB06.online.lofar:13028, udp:cbt207-10GB06.online.lofar:13029]
+PIC.Core.CS302HBA1.RSP.receiver = cbt207_1
+PIC.Core.CS302LBA.RSP.sources     = [udp:cbt207-10GB04.online.lofar:13020, udp:cbt207-10GB04.online.lofar:13021, udp:cbt207-10GB04.online.lofar:13022, udp:cbt207-10GB04.online.lofar:13023]
+PIC.Core.CS302LBA.RSP.receiver  = cbt207_0
+PIC.Core.CS401HBA.RSP.sources     = [udp:cbt205-10GB04.online.lofar:14010, udp:cbt205-10GB04.online.lofar:14011, udp:cbt205-10GB04.online.lofar:14012, udp:cbt205-10GB04.online.lofar:14013]
+PIC.Core.CS401HBA.RSP.receiver  = cbt205_0
+PIC.Core.CS401HBA0.RSP.sources    = [udp:cbt205-10GB04.online.lofar:14010, udp:cbt205-10GB04.online.lofar:14011, udp:cbt205-10GB04.online.lofar:14012, udp:cbt205-10GB04.online.lofar:14013]
+PIC.Core.CS401HBA0.RSP.receiver = cbt205_0
+PIC.Core.CS401HBA1.RSP.sources    = [udp:cbt205-10GB04.online.lofar:14016, udp:cbt205-10GB04.online.lofar:14017, udp:cbt205-10GB04.online.lofar:14018, udp:cbt205-10GB04.online.lofar:14019]
+PIC.Core.CS401HBA1.RSP.receiver = cbt205_0
+PIC.Core.CS401LBA.RSP.sources     = [udp:cbt205-10GB04.online.lofar:14010, udp:cbt205-10GB04.online.lofar:14011, udp:cbt205-10GB04.online.lofar:14012, udp:cbt205-10GB04.online.lofar:14013]
+PIC.Core.CS401LBA.RSP.receiver  = cbt205_0
+PIC.Core.CS501HBA.RSP.sources     = [udp:cbt202-10GB04.online.lofar:15010, udp:cbt202-10GB04.online.lofar:15011, udp:cbt202-10GB04.online.lofar:15012, udp:cbt202-10GB04.online.lofar:15013]
+PIC.Core.CS501HBA.RSP.receiver  = cbt202_0
+PIC.Core.CS501HBA0.RSP.sources    = [udp:cbt202-10GB04.online.lofar:15010, udp:cbt202-10GB04.online.lofar:15011, udp:cbt202-10GB04.online.lofar:15012, udp:cbt202-10GB04.online.lofar:15013]
+PIC.Core.CS501HBA0.RSP.receiver = cbt202_0
+PIC.Core.CS501HBA1.RSP.sources    = [udp:cbt202-10GB04.online.lofar:15016, udp:cbt202-10GB04.online.lofar:15017, udp:cbt202-10GB04.online.lofar:15018, udp:cbt202-10GB04.online.lofar:15019]
+PIC.Core.CS501HBA1.RSP.receiver = cbt202_0
+PIC.Core.CS501LBA.RSP.sources     = [udp:cbt202-10GB04.online.lofar:15010, udp:cbt202-10GB04.online.lofar:15011, udp:cbt202-10GB04.online.lofar:15012, udp:cbt202-10GB04.online.lofar:15013]
+PIC.Core.CS501LBA.RSP.receiver  = cbt202_0
+PIC.Core.DE601HBA.RSP.sources     = [udp:10.211.1.208:16010, udp:10.212.1.208:16011, udp:10.213.1.208:16012, udp:10.214.1.208:16013]
+PIC.Core.DE601HBA.RSP.receiver  = cbt208_1
+PIC.Core.DE601LBA.RSP.sources     = [udp:10.211.1.208:16010, udp:10.212.1.208:16011, udp:10.213.1.208:16012, udp:10.214.1.208:16013]
+PIC.Core.DE601LBA.RSP.receiver  = cbt208_1
+PIC.Core.DE602HBA.RSP.sources     = [udp:10.200.41.207:16020, udp:10.200.41.207:16021, udp:10.200.41.207:16022, udp:10.200.41.207:16023]
+PIC.Core.DE602HBA.RSP.receiver  = cbt207_1
+PIC.Core.DE602LBA.RSP.sources     = [udp:10.200.41.207:16020, udp:10.200.41.207:16021, udp:10.200.41.207:16022, udp:10.200.41.207:16023]
+PIC.Core.DE602LBA.RSP.receiver  = cbt207_1
+PIC.Core.DE603HBA.RSP.sources     = [udp:10.211.1.210:16030, udp:10.212.1.210:16031, udp:10.213.1.210:16032, udp:10.214.1.210:16033]
+PIC.Core.DE603HBA.RSP.receiver  = cbt210_1
+PIC.Core.DE603LBA.RSP.sources     = [udp:10.211.1.210:16030, udp:10.212.1.210:16031, udp:10.213.1.210:16032, udp:10.214.1.210:16033]
+PIC.Core.DE603LBA.RSP.receiver  = cbt210_1
+PIC.Core.DE604HBA.RSP.sources     = [udp:10.200.81.209:16040, udp:10.200.81.209:16041, udp:10.200.81.209:16042, udp:10.200.81.209:16043]
+PIC.Core.DE604HBA.RSP.receiver  = cbt209_1
+PIC.Core.DE604LBA.RSP.sources     = [udp:10.200.81.209:16040, udp:10.200.81.209:16041, udp:10.200.81.209:16042, udp:10.200.81.209:16043]
+PIC.Core.DE604LBA.RSP.receiver  = cbt209_1
+PIC.Core.DE605HBA.RSP.sources     = [udp:10.211.1.212:16050, udp:10.212.1.212:16051, udp:10.213.1.212:16052, udp:10.214.1.212:16053]
+PIC.Core.DE605HBA.RSP.receiver  = cbt212_1
+PIC.Core.DE605LBA.RSP.sources     = [udp:10.211.1.212:16050, udp:10.212.1.212:16051, udp:10.213.1.212:16052, udp:10.214.1.212:16053]
+PIC.Core.DE605LBA.RSP.receiver  = cbt212_1
+PIC.Core.DE609HBA.RSP.sources     = [udp:10.200.91.211:16090, udp:10.200.91.211:16091, udp:10.200.92.211:16092, udp:10.200.92.211:16093]
+PIC.Core.DE609HBA.RSP.receiver  = cbt211_1
+PIC.Core.DE609LBA.RSP.sources     = [udp:10.200.91.211:16090, udp:10.200.91.211:16091, udp:10.200.92.211:16092, udp:10.200.92.211:16093]
+PIC.Core.DE609LBA.RSP.receiver  = cbt211_1
+PIC.Core.FR606HBA.RSP.sources     = [udp:10.211.1.207:16060, udp:10.212.1.207:16061, udp:10.213.1.207:16062, udp:10.214.1.207:16063]
+PIC.Core.FR606HBA.RSP.receiver  = cbt207_1
+PIC.Core.FR606LBA.RSP.sources     = [udp:10.211.1.207:16060, udp:10.212.1.207:16061, udp:10.213.1.207:16062, udp:10.214.1.207:16063]
+PIC.Core.FR606LBA.RSP.receiver  = cbt207_1
+PIC.Core.IE613HBA.RSP.sources     = [udp:10.220.81.204:16130, udp:10.220.81.204:16131, udp:10.220.81.204:16132, udp:10.220.81.204:16133]
+PIC.Core.IE613HBA.RSP.receiver  = cbt204_1
+PIC.Core.IE613LBA.RSP.sources     = [udp:10.220.81.204:16130, udp:10.220.81.204:16131, udp:10.220.81.204:16132, udp:10.220.81.204:16133]
+PIC.Core.IE613LBA.RSP.receiver  = cbt204_1
+PIC.Core.PL610HBA.RSP.sources     = [udp:10.220.11.208:16100, udp:10.220.11.208:16101, udp:10.220.11.208:16102, udp:10.220.11.208:16103]
+PIC.Core.PL610HBA.RSP.receiver  = cbt208_1
+PIC.Core.PL610LBA.RSP.sources     = [udp:10.220.11.208:16100, udp:10.220.11.208:16101, udp:10.220.11.208:16102, udp:10.220.11.208:16103]
+PIC.Core.PL610LBA.RSP.receiver  = cbt208_1
+PIC.Core.PL611HBA.RSP.sources     = [udp:10.220.41.210:16110, udp:10.220.41.210:16111, udp:10.220.41.210:16112, udp:10.220.41.210:16113]
+PIC.Core.PL611HBA.RSP.receiver  = cbt210_1
+PIC.Core.PL611LBA.RSP.sources     = [udp:10.220.41.210:16110, udp:10.220.41.210:16111, udp:10.220.41.210:16112, udp:10.220.41.210:16113]
+PIC.Core.PL611LBA.RSP.receiver  = cbt210_1
+PIC.Core.PL612HBA.RSP.sources     = [udp:10.220.61.212:16120, udp:10.220.61.212:16121, udp:10.220.61.212:16122, udp:10.220.61.212:16123]
+PIC.Core.PL612HBA.RSP.receiver  = cbt212_1
+PIC.Core.PL612LBA.RSP.sources     = [udp:10.220.61.212:16120, udp:10.220.61.212:16121, udp:10.220.61.212:16122, udp:10.220.61.212:16123]
+PIC.Core.PL612LBA.RSP.receiver  = cbt212_1
+PIC.Core.RS106HBA.RSP.sources     = [udp:cbt208-10GB06.online.lofar:11060, udp:cbt208-10GB06.online.lofar:11061, udp:cbt208-10GB06.online.lofar:11062, udp:cbt208-10GB06.online.lofar:11063]
+PIC.Core.RS106HBA.RSP.receiver  = cbt208_1
+PIC.Core.RS106LBA.RSP.sources     = [udp:cbt208-10GB06.online.lofar:11060, udp:cbt208-10GB06.online.lofar:11061, udp:cbt208-10GB06.online.lofar:11062, udp:cbt208-10GB06.online.lofar:11063]
+PIC.Core.RS106LBA.RSP.receiver  = cbt208_1
+PIC.Core.RS205HBA.RSP.sources     = [udp:cbt202-10GB01.online.lofar:12050, udp:cbt202-10GB01.online.lofar:12051, udp:cbt202-10GB01.online.lofar:12052, udp:cbt202-10GB01.online.lofar:12053]
+PIC.Core.RS205HBA.RSP.receiver  = cbt202_0
+PIC.Core.RS205LBA.RSP.sources     = [udp:cbt202-10GB01.online.lofar:12050, udp:cbt202-10GB01.online.lofar:12051, udp:cbt202-10GB01.online.lofar:12052, udp:cbt202-10GB01.online.lofar:12053]
+PIC.Core.RS205LBA.RSP.receiver  = cbt202_0
+PIC.Core.RS208HBA.RSP.sources     = [udp:cbt203-10GB01.online.lofar:12080, udp:cbt203-10GB01.online.lofar:12081, udp:cbt203-10GB01.online.lofar:12082, udp:cbt203-10GB01.online.lofar:12083]
+PIC.Core.RS208HBA.RSP.receiver  = cbt203_0
+PIC.Core.RS208LBA.RSP.sources     = [udp:cbt203-10GB01.online.lofar:12080, udp:cbt203-10GB01.online.lofar:12081, udp:cbt203-10GB01.online.lofar:12082, udp:cbt203-10GB01.online.lofar:12083]
+PIC.Core.RS208LBA.RSP.receiver  = cbt203_0
+PIC.Core.RS210HBA.RSP.sources     = [udp:cbt209-10GB06.online.lofar:12100, udp:cbt209-10GB06.online.lofar:12101, udp:cbt209-10GB06.online.lofar:12102, udp:cbt209-10GB06.online.lofar:12103]
+PIC.Core.RS210HBA.RSP.receiver  = cbt209_1
+PIC.Core.RS210LBA.RSP.sources     = [udp:cbt209-10GB06.online.lofar:12100, udp:cbt209-10GB06.online.lofar:12101, udp:cbt209-10GB06.online.lofar:12102, udp:cbt209-10GB06.online.lofar:12103]
+PIC.Core.RS210LBA.RSP.receiver  = cbt209_1
+PIC.Core.RS305HBA.RSP.sources     = [udp:cbt204-10GB01.online.lofar:13050, udp:cbt204-10GB01.online.lofar:13051, udp:cbt204-10GB01.online.lofar:13052, udp:cbt204-10GB01.online.lofar:13053]
+PIC.Core.RS305HBA.RSP.receiver  = cbt204_0
+PIC.Core.RS305LBA.RSP.sources     = [udp:cbt204-10GB01.online.lofar:13050, udp:cbt204-10GB01.online.lofar:13051, udp:cbt204-10GB01.online.lofar:13052, udp:cbt204-10GB01.online.lofar:13053]
+PIC.Core.RS305LBA.RSP.receiver  = cbt204_0
+PIC.Core.RS306HBA.RSP.sources     = [udp:cbt210-10GB06.online.lofar:13060, udp:cbt210-10GB06.online.lofar:13061, udp:cbt210-10GB06.online.lofar:13062, udp:cbt210-10GB06.online.lofar:13063]
+PIC.Core.RS306HBA.RSP.receiver  = cbt210_1
+PIC.Core.RS306LBA.RSP.sources     = [udp:cbt210-10GB06.online.lofar:13060, udp:cbt210-10GB06.online.lofar:13061, udp:cbt210-10GB06.online.lofar:13062, udp:cbt210-10GB06.online.lofar:13063]
+PIC.Core.RS306LBA.RSP.receiver  = cbt210_1
+PIC.Core.RS307HBA.RSP.sources     = [udp:cbt211-10GB06.online.lofar:13070, udp:cbt211-10GB06.online.lofar:13071, udp:cbt211-10GB06.online.lofar:13072, udp:cbt211-10GB06.online.lofar:13073]
+PIC.Core.RS307HBA.RSP.receiver  = cbt211_1
+PIC.Core.RS307LBA.RSP.sources     = [udp:cbt211-10GB06.online.lofar:13070, udp:cbt211-10GB06.online.lofar:13071, udp:cbt211-10GB06.online.lofar:13072, udp:cbt211-10GB06.online.lofar:13073]
+PIC.Core.RS307LBA.RSP.receiver  = cbt211_1
+PIC.Core.RS310HBA.RSP.sources     = [udp:cbt205-10GB01.online.lofar:13100, udp:cbt205-10GB01.online.lofar:13101, udp:cbt205-10GB01.online.lofar:13102, udp:cbt205-10GB01.online.lofar:13103]
+PIC.Core.RS310HBA.RSP.receiver  = cbt205_0
+PIC.Core.RS310LBA.RSP.sources     = [udp:cbt205-10GB01.online.lofar:13100, udp:cbt205-10GB01.online.lofar:13101, udp:cbt205-10GB01.online.lofar:13102, udp:cbt205-10GB01.online.lofar:13103]
+PIC.Core.RS310LBA.RSP.receiver  = cbt205_0
+PIC.Core.RS406HBA.RSP.sources     = [udp:cbt201-10GB04.online.lofar:14060, udp:cbt201-10GB04.online.lofar:14061, udp:cbt201-10GB04.online.lofar:14062, udp:cbt201-10GB04.online.lofar:14063]
+PIC.Core.RS406HBA.RSP.receiver  = cbt201_0
+PIC.Core.RS406LBA.RSP.sources     = [udp:cbt201-10GB04.online.lofar:14060, udp:cbt201-10GB04.online.lofar:14061, udp:cbt201-10GB04.online.lofar:14062, udp:cbt201-10GB04.online.lofar:14063]
+PIC.Core.RS406LBA.RSP.receiver  = cbt201_0
+PIC.Core.RS407HBA.RSP.sources     = [udp:cbt202-10GB04.online.lofar:14070, udp:cbt202-10GB04.online.lofar:14071, udp:cbt202-10GB04.online.lofar:14072, udp:cbt202-10GB04.online.lofar:14073]
+PIC.Core.RS407HBA.RSP.receiver  = cbt202_0
+PIC.Core.RS407LBA.RSP.sources     = [udp:cbt202-10GB04.online.lofar:14070, udp:cbt202-10GB04.online.lofar:14071, udp:cbt202-10GB04.online.lofar:14072, udp:cbt202-10GB04.online.lofar:14073]
+PIC.Core.RS407LBA.RSP.receiver  = cbt202_0
+PIC.Core.RS409HBA.RSP.sources     = [udp:cbt203-10GB04.online.lofar:14090, udp:cbt203-10GB04.online.lofar:14091, udp:cbt203-10GB04.online.lofar:14092, udp:cbt203-10GB04.online.lofar:14093]
+PIC.Core.RS409HBA.RSP.receiver  = cbt203_0
+PIC.Core.RS409LBA.RSP.sources     = [udp:cbt203-10GB04.online.lofar:14090, udp:cbt203-10GB04.online.lofar:14091, udp:cbt203-10GB04.online.lofar:14092, udp:cbt203-10GB04.online.lofar:14093]
+PIC.Core.RS409LBA.RSP.receiver  = cbt203_0
+PIC.Core.RS503HBA.RSP.sources     = [udp:cbt204-10GB04.online.lofar:15030, udp:cbt204-10GB04.online.lofar:15031, udp:cbt204-10GB04.online.lofar:15032, udp:cbt204-10GB04.online.lofar:15033]
+PIC.Core.RS503HBA.RSP.receiver  = cbt204_0
+PIC.Core.RS503LBA.RSP.sources     = [udp:cbt204-10GB04.online.lofar:15030, udp:cbt204-10GB04.online.lofar:15031, udp:cbt204-10GB04.online.lofar:15032, udp:cbt204-10GB04.online.lofar:15033]
+PIC.Core.RS503LBA.RSP.receiver  = cbt204_0
+PIC.Core.RS508HBA.RSP.sources     = [udp:cbt212-10GB06.online.lofar:15080, udp:cbt212-10GB06.online.lofar:15081, udp:cbt212-10GB06.online.lofar:15082, udp:cbt212-10GB06.online.lofar:15083]
+PIC.Core.RS508HBA.RSP.receiver  = cbt212_1
+PIC.Core.RS508LBA.RSP.sources     = [udp:cbt212-10GB06.online.lofar:15080, udp:cbt212-10GB06.online.lofar:15081, udp:cbt212-10GB06.online.lofar:15082, udp:cbt212-10GB06.online.lofar:15083]
+PIC.Core.RS508LBA.RSP.receiver  = cbt212_1
+PIC.Core.RS509HBA.RSP.sources     = [udp:cbt205-10GB04.online.lofar:15090, udp:cbt205-10GB04.online.lofar:15091, udp:cbt205-10GB04.online.lofar:15092, udp:cbt205-10GB04.online.lofar:15093]
+PIC.Core.RS509HBA.RSP.receiver  = cbt205_0
+PIC.Core.RS509LBA.RSP.sources     = [udp:cbt205-10GB04.online.lofar:15090, udp:cbt205-10GB04.online.lofar:15091, udp:cbt205-10GB04.online.lofar:15092, udp:cbt205-10GB04.online.lofar:15093]
+PIC.Core.RS509LBA.RSP.receiver  = cbt205_0
+PIC.Core.SE607HBA.RSP.sources     = [udp:10.211.1.209:16070, udp:10.212.1.209:16071, udp:10.213.1.209:16072, udp:10.214.1.209:16073]
+PIC.Core.SE607HBA.RSP.receiver  = cbt209_1
+PIC.Core.SE607LBA.RSP.sources     = [udp:10.211.1.209:16070, udp:10.212.1.209:16071, udp:10.213.1.209:16072, udp:10.214.1.209:16073]
+PIC.Core.SE607LBA.RSP.receiver  = cbt209_1
+PIC.Core.UK608HBA.RSP.sources     = [udp:10.211.1.211:16080, udp:10.212.1.211:16081, udp:10.213.1.211:16082, udp:10.214.1.211:16083]
+PIC.Core.UK608HBA.RSP.receiver  = cbt211_1
+PIC.Core.UK608LBA.RSP.sources     = [udp:10.211.1.211:16080, udp:10.212.1.211:16081, udp:10.213.1.211:16082, udp:10.214.1.211:16083]
+PIC.Core.UK608LBA.RSP.receiver  = cbt211_1
diff --git a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/generateStationStreams.sh b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/generateStationStreams.sh
index 6d17643ee9f348e1728c658a214573580333854e..48edc83a9be4cdfcb72f6d928dfe736f88355205 100755
--- a/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/generateStationStreams.sh
+++ b/RTCP/Cobalt/GPUProc/etc/parset-additions.d/default/generateStationStreams.sh
@@ -100,21 +100,21 @@ $portstr = sprintf "[udp:%s:%d, udp:%s:%d, udp:%s:%d, udp:%s:%d]",
   $ips{2}, $baseport + ($board * 6) + 2,
   $ips{3}, $baseport + ($board * 6) + 3;
 
-$iface =~ /(cbt[0-9]+)-10GB0([1234])/;
+$iface =~ /(cbt[0-9]+)-10GB0([1234567])/;
 $host = $1;
-$socket = ($2 - 1)/2; # 10GB01, 10GB02 = socket 0, 10GB03, 10GB04 = socket 1
+$socket = ($2 - 1)/4; # 10GB01, 10GB02, 10GB03 = socket 0, 10GB04, 10GB05, 10GB06, 10GB07 = socket 1
 $receiver = sprintf "%s_%u", $host, $socket;
 
 if ($board == 0) {
   printf "PIC.Core.%sLBA.RSP.receiver  = %s\n",$station,$receiver;
-  printf "PIC.Core.%sLBA.RSP.ports     = %s\n",$station,$portstr;
+  printf "PIC.Core.%sLBA.RSP.sources     = %s\n",$station,$portstr;
 
   printf "PIC.Core.%sHBA.RSP.receiver  = %s\n",$station,$receiver;
-  printf "PIC.Core.%sHBA.RSP.ports     = %s\n",$station,$portstr;
+  printf "PIC.Core.%sHBA.RSP.sources     = %s\n",$station,$portstr;
 
   if ($station =~ /^CS/) {
     printf "PIC.Core.%sHBA0.RSP.receiver = %s\n",$station,$receiver;
-    printf "PIC.Core.%sHBA0.RSP.ports    = %s\n",$station,$portstr;
+    printf "PIC.Core.%sHBA0.RSP.sources    = %s\n",$station,$portstr;
   } else {
 #    print "\n";
   }
@@ -122,7 +122,7 @@ if ($board == 0) {
 
 if ($board == 1) {
   printf "PIC.Core.%sHBA1.RSP.receiver = %s\n",$station,$receiver;
-  printf "PIC.Core.%sHBA1.RSP.ports    = %s\n",$station,$portstr;
+  printf "PIC.Core.%sHBA1.RSP.sources    = %s\n",$station,$portstr;
 #  print "\n";
 }
 
diff --git a/RTCP/Cobalt/GPUProc/src/CMakeLists.txt b/RTCP/Cobalt/GPUProc/src/CMakeLists.txt
index 2592aa280ea31d17bfb36a72634d897379f82a25..a73efffb36a9b3f0fae24baf54e5208776b5a68a 100644
--- a/RTCP/Cobalt/GPUProc/src/CMakeLists.txt
+++ b/RTCP/Cobalt/GPUProc/src/CMakeLists.txt
@@ -7,11 +7,15 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_BINARY_DIR}/include/${PACKAGE_NAME})
 
+configure_file(
+  "${CMAKE_CURRENT_SOURCE_DIR}/cuda_config.h.in"
+  "${CMAKE_BINARY_DIR}/include/cuda_config.h"  # internal, no need to install
+)
+
 set(_gpuproc_sources
   #Package__Version.cc
   BandPass.cc
   CommandThread.cc
-  cpu_utils.cc
   FilterBank.cc
   Flagger.cc
   global_defines.cc
@@ -26,103 +30,57 @@ set(_gpuproc_sources
   Storage/StorageProcesses.cc
 )
 
-if(USE_CUDA)
-  list(APPEND _gpuproc_sources 
-    cuda/gpu_wrapper.cc
-    cuda/gpu_utils.cc
-    cuda/KernelFactory.cc
-    cuda/PerformanceCounter.cc
-    cuda/Kernels/Kernel.cc
-    cuda/Kernels/BeamFormerKernel.cc
-    cuda/Kernels/BeamFormerTransposeKernel.cc
-    cuda/Kernels/CoherentStokesTransposeKernel.cc
-    cuda/Kernels/CoherentStokesKernel.cc
-    cuda/Kernels/CorrelatorKernel.cc
-    #cuda/Kernels/DedispersionBackwardFFTkernel.cc
-    #cuda/Kernels/DedispersionChirpKernel.cc
-    #cuda/Kernels/DedispersionForwardFFTkernel.cc
-    cuda/Kernels/DelayAndBandPassKernel.cc
-    cuda/Kernels/BandPassCorrectionKernel.cc
-    cuda/Kernels/FFT_Kernel.cc
-    cuda/Kernels/FFT_Plan.cc
-    cuda/Kernels/FIR_FilterKernel.cc
-    cuda/Kernels/IncoherentStokesKernel.cc
-    cuda/Kernels/IncoherentStokesTransposeKernel.cc
-    cuda/Kernels/IntToFloatKernel.cc
-    cuda/Kernels/FFTShiftKernel.cc
-    cuda/Kernels/ZeroingKernel.cc
-    #cuda/Kernels/UHEP_BeamFormerKernel.cc
-    #cuda/Kernels/UHEP_InvFFT_Kernel.cc
-    #cuda/Kernels/UHEP_InvFIR_Kernel.cc
-    #cuda/Kernels/UHEP_TransposeKernel.cc
-    #cuda/Kernels/UHEP_TriggerKernel.cc
-    cuda/Pipelines/Pipeline.cc
-#    cuda/Pipelines/UHEP_Pipeline.cc
-    cuda/SubbandProcs/SubbandProc.cc
-    cuda/SubbandProcs/SubbandProcInputData.cc
-    cuda/SubbandProcs/SubbandProcOutputData.cc
-    cuda/SubbandProcs/KernelFactories.cc
-    cuda/SubbandProcs/CorrelatorStep.cc
-    cuda/SubbandProcs/BeamFormerPreprocessingStep.cc
-    cuda/SubbandProcs/BeamFormerCoherentStep.cc
-    cuda/SubbandProcs/BeamFormerIncoherentStep.cc
-    
-#    cuda/SubbandProcs/UHEP_SubbandProc.cc
-  )
-  add_subdirectory(cuda)
+list(APPEND _gpuproc_sources
+  gpu_wrapper.cc
+  gpu_utils.cc
+  KernelFactory.cc
+  PerformanceCounter.cc
+  Kernels/Kernel.cc
+  Kernels/BeamFormerKernel.cc
+  Kernels/BeamFormerTransposeKernel.cc
+  Kernels/CoherentStokesTransposeKernel.cc
+  Kernels/CoherentStokesKernel.cc
+  Kernels/CorrelatorKernel.cc
+  #Kernels/DedispersionBackwardFFTkernel.cc
+  #Kernels/DedispersionChirpKernel.cc
+  #Kernels/DedispersionForwardFFTkernel.cc
+  Kernels/DelayAndBandPassKernel.cc
+  Kernels/BandPassCorrectionKernel.cc
+  Kernels/FFT_Kernel.cc
+  Kernels/FFT_Plan.cc
+  Kernels/FIR_FilterKernel.cc
+  Kernels/IncoherentStokesKernel.cc
+  Kernels/IncoherentStokesTransposeKernel.cc
+  Kernels/IntToFloatKernel.cc
+  Kernels/FFTShiftKernel.cc
+  Kernels/ZeroingKernel.cc
+  #Kernels/UHEP_BeamFormerKernel.cc
+  #Kernels/UHEP_InvFFT_Kernel.cc
+  #Kernels/UHEP_InvFIR_Kernel.cc
+  #Kernels/UHEP_TransposeKernel.cc
+  #Kernels/UHEP_TriggerKernel.cc
+  Pipelines/Pipeline.cc
+#    Pipelines/UHEP_Pipeline.cc
+  SubbandProcs/SubbandProc.cc
+  SubbandProcs/SubbandProcInputData.cc
+  SubbandProcs/SubbandProcOutputData.cc
+  SubbandProcs/KernelFactories.cc
+  SubbandProcs/CorrelatorStep.cc
+  SubbandProcs/BeamFormerPreprocessingStep.cc
+  SubbandProcs/BeamFormerCoherentStep.cc
+  SubbandProcs/BeamFormerIncoherentStep.cc
 
-  lofar_add_library(gpuproc ${_gpuproc_sources})
-  if(CUDA_cufft_LIBRARY)
-    target_link_libraries(gpuproc ${CUDA_cufft_LIBRARY})
-  endif()
+#    SubbandProcs/UHEP_SubbandProc.cc
+)
 
-  lofar_add_bin_program(rtcp rtcp.cc)
-  lofar_add_bin_program(getOutputProcHosts getOutputProcHosts.cc)
+lofar_add_library(gpuproc ${_gpuproc_sources})
+if(CUDA_cufft_LIBRARY)
+  target_link_libraries(gpuproc ${CUDA_cufft_LIBRARY})
 endif()
 
-if(USE_OPENCL)
-  list(APPEND _gpuproc_sources 
-    opencl/gpu_wrapper.cc
-    opencl/gpu_utils.cc
-    opencl/PerformanceCounter.cc
-    opencl/Kernels/Kernel.cc
-    opencl/Kernels/BeamFormerKernel.cc
-    opencl/Kernels/BeamFormerTransposeKernel.cc
-    opencl/Kernels/CoherentStokesKernel.cc
-    opencl/Kernels/CorrelatorKernel.cc
-    opencl/Kernels/DedispersionBackwardFFTkernel.cc
-    opencl/Kernels/DedispersionChirpKernel.cc
-    opencl/Kernels/DedispersionForwardFFTkernel.cc
-    opencl/Kernels/DelayAndBandPassKernel.cc
-    opencl/Kernels/FFT_Kernel.cc
-    opencl/Kernels/FFT_Plan.cc
-    opencl/Kernels/Filter_FFT_Kernel.cc
-    opencl/Kernels/FIR_FilterKernel.cc
-    opencl/Kernels/IncoherentStokesKernel.cc
-    opencl/Kernels/IntToFloatKernel.cc
-    #opencl/Kernels/UHEP_BeamFormerKernel.cc
-    #opencl/Kernels/UHEP_InvFFT_Kernel.cc
-    #opencl/Kernels/UHEP_InvFIR_Kernel.cc
-    #opencl/Kernels/UHEP_TransposeKernel.cc
-    #opencl/Kernels/UHEP_TriggerKernel.cc
-    opencl/Pipelines/Pipeline.cc
-    opencl/Pipelines/BeamFormerPipeline.cc
-    opencl/Pipelines/CorrelatorPipeline.cc
-    #opencl/Pipelines/UHEP_Pipeline.cc
-    opencl/SubbandProcs/SubbandProc.cc
-    opencl/SubbandProcs/BeamFormerSubbandProc.cc
-    opencl/SubbandProcs/CorrelatorSubbandProc.cc
-    #opencl/SubbandProcs/UHEP_SubbandProc.cc
-  )
-  add_subdirectory(opencl)
+lofar_add_bin_program(rtcp rtcp.cc)
 
-  lofar_add_library(gpuproc_opencl ${_gpuproc_sources})
-  #lofar_add_bin_program(rtcp_opencl rtcp.cc)
-endif()
-
-lofar_add_bin_program(mpi_node_list Station/mpi_node_list.cc)
 lofar_add_bin_program(station_stream Station/station_stream.cc)
-lofar_add_bin_program(send_state send_state.cc)
 lofar_add_bin_program(gpu_load gpu_load.cc)
 
 # install scripts used to run an observation under bin
@@ -140,17 +98,13 @@ lofar_add_bin_scripts(
 lofar_add_sbin_scripts(
   scripts/bw_monitor.sh
   scripts/cobaltswitch
-  scripts/Cobalt_build.sh
   scripts/Cobalt_install.sh
   scripts/CobaltVersions.sh
   scripts/setloglevels.sh)
 
 # install logprop files
-install(FILES
+lofar_add_sysconf_files(
   rtcp.log_prop
-  getOutputProcHosts.log_prop
-  Station/mpi_node_list.log_prop
   Station/station_stream.log_prop
   scripts/watchlogs-multitail.conf
-  DESTINATION etc)
-
+  DESTINATION .)
diff --git a/RTCP/Cobalt/GPUProc/src/CommandThread.cc b/RTCP/Cobalt/GPUProc/src/CommandThread.cc
index be0349f946c982999e5f1adbe83c414c71a7eb07..5c3f3f4ab1d5babb09d36db909b433f7c59aa2e7 100644
--- a/RTCP/Cobalt/GPUProc/src/CommandThread.cc
+++ b/RTCP/Cobalt/GPUProc/src/CommandThread.cc
@@ -34,7 +34,8 @@ namespace LOFAR {
   namespace Cobalt {
     CommandThread::CommandThread(const std::string &streamdesc)
     :
-      streamdesc(streamdesc)
+      streamdesc(streamdesc),
+      readerThread("CommandThread")
     {
     }
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/KernelFactory.cc b/RTCP/Cobalt/GPUProc/src/KernelFactory.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/KernelFactory.cc
rename to RTCP/Cobalt/GPUProc/src/KernelFactory.cc
diff --git a/RTCP/Cobalt/GPUProc/src/KernelFactory.h b/RTCP/Cobalt/GPUProc/src/KernelFactory.h
index 8a3bcef789d803d9be75fb5f7b56964773aa9675..9fc75474dd12c2915322dc8f775ed1e15a27a0f6 100644
--- a/RTCP/Cobalt/GPUProc/src/KernelFactory.h
+++ b/RTCP/Cobalt/GPUProc/src/KernelFactory.h
@@ -1,6 +1,6 @@
-//# KernelFactory.h: Factory for Kernel objects.
+//# KernelFactory.h
 //#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +19,122 @@
 //#
 //# $Id$
 
-// \file
-// Factory for Kernel objects.
+#ifndef LOFAR_GPUPROC_CUDA_KERNELFACTORY_H
+#define LOFAR_GPUPROC_CUDA_KERNELFACTORY_H
 
-#ifndef LOFAR_GPUPROC_KERNELFACTORY_H
-#define LOFAR_GPUPROC_KERNELFACTORY_H
+#include <string>
+#include <CoInterface/Parset.h>
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/gpu_wrapper.h>
+#include <GPUProc/gpu_utils.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    // Abstract base class of the templated KernelFactory class.
+    class KernelFactoryBase
+    {
+    public:
+      // Pure virtual destructor, because this is an abstract base class.
+      virtual ~KernelFactoryBase() = 0;
 
-#if defined (USE_CUDA)
-# include "cuda/KernelFactory.h"
-#elif defined (USE_OPENCL)
-# include "opencl/KernelFactory.h"
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+    protected:
+      // Return compile definitions to use when creating PTX code for any
+      // Kernel.
+      CompileDefinitions
+      compileDefinitions(const Kernel::Parameters& param) const;
 
-#endif
+      // Return compile flags to use when creating PTX code for any Kernel.
+      CompileFlags
+      compileFlags(const Kernel::Parameters& param) const;
+    };
+
+    // Declaration of a generic factory class. For each concrete Kernel class
+    // (e.g. FIR_FilterKernel), a specialization must exist of the constructor
+    // and of the bufferSize() method.
+    template<typename T> class KernelFactory : public KernelFactoryBase
+    {
+    public:
+      // typedef typename T::Parameters Parameters;
+      typedef typename T::BufferType BufferType;
+      typedef typename T::Buffers Buffers;
+
+      // Construct a factory for creating Kernel objects of type \c T, using the
+      // settings provided by \a params.
+      KernelFactory(const typename T::Parameters &params) :
+        itsParameters(params),
+        itsPTX(_createPTX())
+      {
+      }
+
+      // Create a new Kernel object of type \c T.
+      T* create(const gpu::Stream& stream,
+                gpu::DeviceMemory &inputBuffer,
+                gpu::DeviceMemory &outputBuffer) const
+      {
+        const typename T::Buffers buffers(inputBuffer, outputBuffer);
+
+        return create(stream, buffers);
+      }
+
+      // Return required buffer size for \a bufferType
+      size_t bufferSize(BufferType bufferType) const
+      {
+        return itsParameters.bufferSize(bufferType);
+      }
+
+    private:
+      // Used by the constructors to construct the PTX from the other
+      // members.
+      std::string _createPTX() const {
+        return createPTX(T::theirSourceFile,
+                           compileDefinitions(),
+                           compileFlags());
+      }
 
+      // Create a new Kernel object of type \c T.
+      T* create(const gpu::Stream& stream,
+                const typename T::Buffers& buffers) const
+      {
+        // Since we use overlapping input/output buffers, their size
+        // could be larger than we need.
+        ASSERTSTR(buffers.input.size() >= bufferSize(T::INPUT_DATA),
+          "Require " << bufferSize(T::INPUT_DATA) << " bytes for input, "
+          "but buffer is only " << buffers.input.size() << " bytes.");
+        ASSERTSTR(buffers.output.size() >= bufferSize(T::OUTPUT_DATA),
+          "Require " << bufferSize(T::OUTPUT_DATA) << " bytes for output, "
+          "but buffer is only " << buffers.output.size() << " bytes.");
+
+        return new T(
+          stream, createModule(stream.getContext(), 
+                               T::theirSourceFile,
+                               itsPTX), 
+          buffers, itsParameters);
+      }
+
+      // Return compile definitions to use when creating PTX code for kernels of
+      // type \c T, using the parameters stored in \c itsParameters.
+      CompileDefinitions compileDefinitions() const {
+        return KernelFactoryBase::compileDefinitions(itsParameters);
+      }
+
+      // Return compile flags to use when creating PTX code for kernels of type
+      // \c T.
+      CompileFlags compileFlags() const {
+        return KernelFactoryBase::compileFlags(itsParameters);
+      }
+
+      // Additional parameters needed to create a Kernel object of type \c T.
+      typename T::Parameters itsParameters;
+
+      // PTX code, generated for kernels of type \c T, using information in the
+      // Parset that was passed to the constructor.
+      std::string itsPTX;
+    };
+
+  } // namespace Cobalt
+
+} // namespace LOFAR
+
+#endif
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BandPassCorrectionKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/BandPassCorrectionKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/BandPassCorrectionKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/BandPassCorrectionKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/BandPassCorrectionKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/BandPassCorrectionKernel.h
index a21a4b88da24ec4ae36a816504e66cb09d02b762..607a3f1cd90d9a73e70ecb380f37f4d191de485e 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/BandPassCorrectionKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/BandPassCorrectionKernel.h
@@ -1,6 +1,5 @@
 //# BandPassCorrectionKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,65 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_BAND_PASS_CORRECTION_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_BAND_PASS_CORRECTION_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_BAND_PASS_CORRECTION_KERNEL_H
-#define LOFAR_GPUPROC_BAND_PASS_CORRECTION_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/BandPassCorrectionKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/BandPassCorrectionKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+
+    class BandPassCorrectionKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA,
+        BAND_PASS_CORRECTION_WEIGHTS
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // BandPassCorrectionKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps);
+        unsigned nrStations;
+
+        unsigned nrDelayCompensationChannels;
+        unsigned nrHighResolutionChannels;
+        unsigned nrSamplesPerChannel;
+
+        bool correctBandPass;
+
+        size_t bufferSize(BandPassCorrectionKernel::BufferType bufferType) const;
+      };
+
+      BandPassCorrectionKernel(const gpu::Stream &stream,
+                               const gpu::Module &module,
+                               const Buffers &buffers,
+                               const Parameters &param);
+
+    private:
+      // The bandpass weights to apply on each channel
+      gpu::DeviceMemory bandPassCorrectionWeights;
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<BandPassCorrectionKernel>::compileDefinitions() const;
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerKernel.h
index fd5e55fc4c97dfefa53458cd8353f9757d502613..6ba5995049b8697b87c8fe4835e3c29f57cfb882 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerKernel.h
@@ -1,6 +1,5 @@
 //# BeamFormerKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,81 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_BEAM_FORMER_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_BEAM_FORMER_KERNEL_H
-#define LOFAR_GPUPROC_BEAM_FORMER_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/BeamFormerKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/BeamFormerKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+#include <string>
+#include <vector>
+
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class BeamFormerKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA,
+        DELAY_INDICES,
+        BEAM_FORMER_DELAYS
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // BeamFormerKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps);
+
+        // The beam-former delays are indexed by their station number
+        // in the observation, so we need to map them to beam-former
+        // station numbers.
+        std::vector<unsigned> delayIndices;
+
+        // Width of th observation's delay array, in stations
+        unsigned nrDelays;
+
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+
+        unsigned nrSAPs;
+        unsigned nrTABs;
+        double subbandBandwidth;
+        bool doFlysEye;
+
+        size_t bufferSize(BufferType bufferType) const;
+
+        size_t nrStations() const { return delayIndices.size(); }
+      };
+
+      BeamFormerKernel(const gpu::Stream &stream,
+                             const gpu::Module &module,
+                             const Buffers &buffers,
+                             const Parameters &param);
+
+      void enqueue(const BlockID &blockId, 
+                   double subbandFrequency, unsigned SAP);
+
+      gpu::DeviceMemory delayIndices;
+      gpu::DeviceMemory beamFormerDelays;
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<BeamFormerKernel>::compileDefinitions() const;
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerTransposeKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerTransposeKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerTransposeKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerTransposeKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerTransposeKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerTransposeKernel.h
index 1cce4ceec67d3b9ea7e408f2ef577d8fc83d6d02..dc65338ba69a0b3209b56a95d0068bfd6b79bdf7 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerTransposeKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/BeamFormerTransposeKernel.h
@@ -1,6 +1,5 @@
 //# BeamFormerTransposeKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,58 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_TRANSPOSE_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_BEAM_FORMER_TRANSPOSE_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_BEAM_FORMER_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_BEAM_FORMER_TRANSPOSE_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/BeamFormerTransposeKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/BeamFormerTransposeKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class BeamFormerTransposeKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // BeamFormerKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps);
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+
+        unsigned nrTABs;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      BeamFormerTransposeKernel(const gpu::Stream &stream,
+                             const gpu::Module &module,
+                             const Buffers &buffers,
+                             const Parameters &param);
+
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<BeamFormerTransposeKernel>::compileDefinitions() const;
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesKernel.h
index 4edd2e84872527805de188d2f9ded5a2b5ed2688..6b12782d2ed8172f1953f6be7420a3093bf5b38c 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesKernel.h
@@ -1,6 +1,5 @@
 //# CoherentStokesKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2014  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,75 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_COHERENT_STOKES_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_COHERENT_STOKES_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_COHERENT_STOKES_KERNEL_H
-#define LOFAR_GPUPROC_COHERENT_STOKES_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/CoherentStokesKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/CoherentStokesKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+
+    class CoherentStokesKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // CoherentStokesKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps);
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+
+        unsigned nrTABs;
+        unsigned nrStokes;
+        bool     outputComplexVoltages;
+        unsigned timeIntegrationFactor;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      CoherentStokesKernel(const gpu::Stream &stream,
+                           const gpu::Module &module,
+                           const Buffers &buffers,
+                           const Parameters &param);
+
+      struct CoherentStokesExecConfig : gpu::ExecConfig
+      {
+        unsigned nrTimeParallelThreads;
+        friend std::ostream& operator<<(std::ostream& os,
+            const CoherentStokesKernel::CoherentStokesExecConfig& execConfig);
+      };
+
+    private:
+      // The timeParallelFactor is not a Parameter passed in, but is a kernel
+      // arg, so it must be a member var to outlive kernel launches.
+      unsigned itsTimeParallelFactor;
+
+
+      unsigned smallestFactorOf(unsigned n) const;
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<CoherentStokesKernel>::compileDefinitions() const;
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesTransposeKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesTransposeKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesTransposeKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesTransposeKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesTransposeKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesTransposeKernel.h
index 482a09df634504ecb7388e4612df07412c5c24f9..78c6905bfdd5919e9daf57392a09cd76f0f5dc9c 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesTransposeKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/CoherentStokesTransposeKernel.h
@@ -1,6 +1,5 @@
-//# BeamFormerTransposeKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# CoherentStokesTransposeKernel.h
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,58 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_COHERENT_STOKES_TRANSPOSE_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_COHERENT_STOKES_TRANSPOSE_KERNEL_H
 
-#ifndef LOFAR_GPUPROC__COHERENT_STOKES_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC__COHERENT_STOKES_TRANSPOSE_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/CoherentStokesTransposeKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/CoherentStokesTransposeKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class CoherentStokesTransposeKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // BeamFormerKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps);
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+
+        unsigned nrTABs;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      CoherentStokesTransposeKernel(const gpu::Stream &stream,
+                             const gpu::Module &module,
+                             const Buffers &buffers,
+                             const Parameters &param);
+
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<CoherentStokesTransposeKernel>::compileDefinitions() const;
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CorrelatorKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/CorrelatorKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/CorrelatorKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/CorrelatorKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/CorrelatorKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/CorrelatorKernel.h
index 938ada9eb3498c266a40e55016f4fb4540925c25..c4343b9d9b9556ac5e20ba657f5b55e3dcc5b61c 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/CorrelatorKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/CorrelatorKernel.h
@@ -1,6 +1,5 @@
 //# CorrelatorKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,56 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_CORRELATOR_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_CORRELATOR_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_CORRELATOR_KERNEL_H
-#define LOFAR_GPUPROC_CORRELATOR_KERNEL_H
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class CorrelatorKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/CorrelatorKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/CorrelatorKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
+
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps);
+        unsigned nrStations;
+        unsigned nrStationsPerThread;
+        unsigned nrBaselines() const;
+
+        unsigned nrChannels;
+        unsigned nrSamplesPerIntegration;
+        unsigned nrIntegrationsPerBlock;
+        size_t nrSamplesPerBlock() const;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      CorrelatorKernel(const gpu::Stream &stream,
+                       const gpu::Module &module,
+                       const Buffers &buffers,
+                       const Parameters &param);
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<CorrelatorKernel>::compileDefinitions() const;
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionBackwardFFTkernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionBackwardFFTkernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionBackwardFFTkernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/DedispersionBackwardFFTkernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionBackwardFFTkernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionBackwardFFTkernel.h
index 5d52935a353e69a5384f4d45ecce50d70404ada2..111a5d9ba59902de1784e99555c06fad082687dc 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionBackwardFFTkernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionBackwardFFTkernel.h
@@ -1,6 +1,5 @@
 //# DedispersionBackwardFFTkernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,26 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_DEDISPERSION_BACKWARD_FFTKERNEL_H
+#define LOFAR_GPUPROC_CUDA_DEDISPERSION_BACKWARD_FFTKERNEL_H
 
-#ifndef LOFAR_GPUPROC_DEDISPERSION_BACKWARD_FFTKERNEL_H
-#define LOFAR_GPUPROC_DEDISPERSION_BACKWARD_FFTKERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "FFT_Kernel.h"
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/DedispersionBackwardFFTkernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/DedispersionBackwardFFTkernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class DedispersionBackwardFFTkernel : public FFT_Kernel
+    {
+    public:
+      DedispersionBackwardFFTkernel(const Parset &ps, gpu::Context &context, gpu::DeviceMemory &buffer);
+
+    };
+  }
+
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionChirpKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionChirpKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionChirpKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/DedispersionChirpKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionChirpKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionChirpKernel.h
index 6789bfef8208e381e88aa338a53ee1552a31fe75..90faf0c4b647e090c823122787faa832c97a3bf6 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionChirpKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionChirpKernel.h
@@ -1,6 +1,5 @@
 //# DedispersionChirpKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,34 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_DEDISPERSION_CHIRP_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_DEDISPERSION_CHIRP_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_DEDISPERSION_CHIRP_KERNEL_H
-#define LOFAR_GPUPROC_DEDISPERSION_CHIRP_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/gpu_wrapper.h>
+//#include <GPUProc/PerformanceCounter.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/DedispersionChirpKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/DedispersionChirpKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+
+    class DedispersionChirpKernel : public CompiledKernel
+    {
+    public:
+      DedispersionChirpKernel(const Parset &ps,
+                              gpu::Context &context,
+                              gpu::DeviceMemory &buffer,
+                              gpu::DeviceMemory &DMs);
+
+      void enqueue(gpu::Stream &queue, double subbandFrequency);
+
+    };
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionForwardFFTkernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionForwardFFTkernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionForwardFFTkernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/DedispersionForwardFFTkernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionForwardFFTkernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionForwardFFTkernel.h
index be989eeeefe4d934b55dbccd391743ed68c141b8..b50f8a76bc6634b4f2f055a4ea74a5cf6c637368 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionForwardFFTkernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/DedispersionForwardFFTkernel.h
@@ -1,6 +1,5 @@
 //# DedispersionForwardFFTkernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,25 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_DEDISPERSION_FORWARD_FFTKERNEL_H
+#define LOFAR_GPUPROC_CUDA_DEDISPERSION_FORWARD_FFTKERNEL_H
 
-#ifndef LOFAR_GPUPROC_DEDISPERSION_FORWARD_FFTKERNEL_H
-#define LOFAR_GPUPROC_DEDISPERSION_FORWARD_FFTKERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "FFT_Kernel.h"
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/DedispersionForwardFFTkernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/DedispersionForwardFFTkernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class DedispersionForwardFFTkernel : public FFT_Kernel
+    {
+    public:
+      DedispersionForwardFFTkernel(const Parset &ps, gpu::Context &context, gpu::DeviceMemory &buffer);
+
+    };
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DelayAndBandPassKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/DelayAndBandPassKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.h
index 68317a239c2e28f73ad9a89f8abe7de536462f44..a2f051c6f0aef458ac27e3d96d3b58e9d50fb314 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/DelayAndBandPassKernel.h
@@ -1,6 +1,5 @@
 //# DelayAndBandPassKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,91 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_DELAY_AND_BAND_PASS_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_DELAY_AND_BAND_PASS_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_DELAY_AND_BAND_PASS_KERNEL_H
-#define LOFAR_GPUPROC_DELAY_AND_BAND_PASS_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
+//#include <GPUProc/PerformanceCounter.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/DelayAndBandPassKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/DelayAndBandPassKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+#include <vector>
+
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+
+    class DelayAndBandPassKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA,
+        DELAY_INDICES,
+        DELAYS,
+        PHASE_ZEROS,
+        BAND_PASS_CORRECTION_WEIGHTS
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // DelayAndBandPassKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps, bool correlator);
+        unsigned nrStations;
+        std::vector<unsigned> delayIndices;
+        unsigned nrDelays;
+        unsigned nrBitsPerSample;
+
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+        double subbandBandwidth;
+
+        unsigned nrSAPs;
+
+        bool delayCompensation;
+        bool correctBandPass;
+        bool transpose;
+
+        unsigned nrSamplesPerSubband() const;
+        unsigned nrBytesPerComplexSample() const;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      DelayAndBandPassKernel(const gpu::Stream &stream,
+                             const gpu::Module &module,
+                             const Buffers &buffers,
+                             const Parameters &param);
+
+
+      void enqueue(const BlockID &blockId, 
+                   double subbandFrequency, unsigned SAP);
+
+      // Input parameters for the delay compensation
+      gpu::DeviceMemory delayIndices;
+      gpu::DeviceMemory delaysAtBegin;
+      gpu::DeviceMemory delaysAfterEnd;
+      gpu::DeviceMemory phase0s;
+
+    private:
+      // The weights to correct the bandpass with, per channel
+      gpu::DeviceMemory bandPassCorrectionWeights;
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<DelayAndBandPassKernel>::compileDefinitions() const;
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFTShiftKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/FFTShiftKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFTShiftKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/FFTShiftKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/FFTShiftKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/FFTShiftKernel.h
index 6591848776f8443c6b073d0a3fee155f86b00064..edfa3c6d867cd9fbb6b8e839afaa33c49e312288 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/FFTShiftKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/FFTShiftKernel.h
@@ -1,6 +1,5 @@
 //# FFTShiftKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,63 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_FFT_SHIFT_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_FFT_SHIFT_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_FFT_SHIFT_KERNEL_H
-#define LOFAR_GPUPROC_FFT_SHIFT_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/FFTShiftKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/FFTShiftKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class FFTShiftKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // IntToFloatKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps, unsigned nrSTABs, unsigned nrChannels, const std::string &name = "FFT-shift");
+        unsigned nrSTABs;
+
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      // Construct a FFTShift kernel.
+      // \pre The number of samples per channel must be even.
+      // \pre The product of the number of stations, the number of
+      // polarizations, the number of channels per subband, and the number of
+      // samples per channel must be divisible by the maximum number of threads
+      // per block (typically 1024).
+      FFTShiftKernel(const gpu::Stream &stream,
+                     const gpu::Module &module,
+                     const Buffers &buffers,
+                     const Parameters &param);
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<FFTShiftKernel>::compileDefinitions() const;
+  }
+
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Kernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/FFT_Kernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Kernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/FFT_Kernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/FFT_Kernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/FFT_Kernel.h
index 11065ca17bea6c1834ff119a5c0b1b5e6d3cef64..d6740958caed4d8a09e58e83549ffb6c989bf797 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/FFT_Kernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/FFT_Kernel.h
@@ -1,6 +1,5 @@
 //# FFT_Kernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,65 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_FFT_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_FFT_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_FFT_KERNEL_H
-#define LOFAR_GPUPROC_FFT_KERNEL_H
+#include <GPUProc/gpu_wrapper.h>
+#include "FFT_Plan.h"
+#include <GPUProc/PerformanceCounter.h>
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class FFT_Kernel: public Kernel
+    {
+    public:
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/FFT_Kernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/FFT_Kernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+      // Parameters that must be passed to the constructor of the
+      // BandPassCorrectionKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(unsigned fftSize, unsigned nrSamples, bool forward, const std::string &name = "FFT");
 
-#endif
+        unsigned fftSize;
+        unsigned nrSamples;
+        bool forward;
+
+        size_t bufferSize(FFT_Kernel::BufferType bufferType) const;
+      };
+
+      FFT_Kernel(const gpu::Stream &stream,
+                 const Buffers& buffers,
+                 const Parameters& params);
 
+    protected:
+      void launch() const;
+
+    private:
+      const unsigned nrFFTs, nrMajorFFTs, nrMinorFFTs;
+      const int direction;
+      FFT_Plan planMajor, planMinor;
+
+      void executePlan(const cufftHandle &plan, cufftComplex *in_data, cufftComplex *out_data) const;
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    // The default KernelFactory tries to compile a source,
+    // but FFT_Kernel has nothing to compile, so we implement short cuts.
+    template<> std::string KernelFactory<FFT_Kernel>::_createPTX() const;
+    template<> FFT_Kernel* KernelFactory<FFT_Kernel>::create(
+              const gpu::Stream& stream,
+              gpu::DeviceMemory &inputBuffer,
+              gpu::DeviceMemory &outputBuffer) const;
+  }
+}
+#endif
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Plan.cc b/RTCP/Cobalt/GPUProc/src/Kernels/FFT_Plan.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Plan.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/FFT_Plan.cc
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Plan.h b/RTCP/Cobalt/GPUProc/src/Kernels/FFT_Plan.h
similarity index 96%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Plan.h
rename to RTCP/Cobalt/GPUProc/src/Kernels/FFT_Plan.h
index ab5f0618aecaf0013102e9fdbb35c4952fb70e79..55da855e5ce3b3a958076b94765c61f6b0332a4a 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Plan.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/FFT_Plan.h
@@ -16,7 +16,7 @@
 //# You should have received a copy of the GNU General Public License along
 //# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 //#
-//# $Id$
+//# $Id: FFT_Plan.h 29848 2014-07-31 09:32:20Z mol $
 
 #ifndef LOFAR_GPUPROC_CUDA_FFT_PLAN_H
 #define LOFAR_GPUPROC_CUDA_FFT_PLAN_H
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FIR_FilterKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/FIR_FilterKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.h
index 0dc094cdd8fddfbac21d0ab7aa4db9b2b4d84b25..8d7d8df7825fc2651038a6938f1d888568bbac4f 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/FIR_FilterKernel.h
@@ -1,6 +1,5 @@
 //# FIR_FilterKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,113 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_FIR_FILTER_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_FIR_FILTER_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_FIR_FILTER_KERNEL_H
-#define LOFAR_GPUPROC_FIR_FILTER_KERNEL_H
+#include <string>
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/FilterBank.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/FIR_FilterKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/FIR_FilterKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class FIR_FilterKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA,
+        FILTER_WEIGHTS,
+        HISTORY_DATA
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // FIR_FilterKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps, unsigned nrSTABs, bool inputIsStationData, unsigned nrSubbands, unsigned nrChannels, float scaleFactor, const std::string &name = "FIR");
+
+        // The number of stations or TABs to filter. The FIR filter will
+        // deal with either in the same way.
+        unsigned nrSTABs;
+
+        unsigned nrBitsPerSample;
+        unsigned nrBytesPerComplexSample() const;
+
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+        unsigned nrSamplesPerSubband() const;
+
+
+        // The number of subbands \e this kernel instance will process,
+        // typically equal to \c nrSubbandsPerSubbandProc.
+        unsigned nrSubbands;
+
+        // The number of PPF filter taps.
+        static const unsigned nrTaps = 16;
+
+        // The number of history samples used for each block
+        unsigned nrHistorySamples() const;
+
+        // Additional scale factor (e.g. for FFT normalization).
+        // Derived differently from nrChannelsPerSubband for correlation
+        // and beamforming, so must be passed into this class.
+        float scaleFactor;
+
+        // If true, we'll read integers in the order as they're coming from the
+        // stations: intXX[stab][sample][pol]
+        //
+        // If false, we'll read floats in the order produced by the beam-former
+        // pipeline: float[stab][pol][sample]
+        bool inputIsStationData;
+
+        size_t bufferSize(FIR_FilterKernel::BufferType bufferType) const;
+      };
+
+      FIR_FilterKernel(const gpu::Stream& stream,
+                       const gpu::Module& module,
+                       const Buffers& buffers,
+                       const Parameters& param);
+
+      void enqueue(const BlockID &blockId,
+                   unsigned subbandIdx);
+
+      // Put the historyFlags[subbandIdx] in front of the given inputFlags,
+      // and update historyFlags[subbandIdx] with the flags of the last samples
+      // in inputFlags.
+      void prefixHistoryFlags(MultiDimArray<SparseSet<unsigned>, 1> &inputFlags, unsigned subbandIdx);
+
+    private:
+      // The Kernel parameters as given to the constructor
+      const Parameters params;
+
+      // The FIR filter weights
+      gpu::DeviceMemory filterWeights;
+
+      // The history samples
+      gpu::DeviceMemory historySamples;
+
+      // The flags of the history samples.
+      //
+      // Dimensions: [nrSubbands][nrStations]
+      MultiDimArray<SparseSet<unsigned>, 2> historyFlags;
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<FIR_FilterKernel>::compileDefinitions() const;
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/Filter_FFT_Kernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/Filter_FFT_Kernel.h
deleted file mode 100644
index aeab1577995bb3d47fc44662e89b27946100606d..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/Kernels/Filter_FFT_Kernel.h
+++ /dev/null
@@ -1,41 +0,0 @@
-//# Filter_FFT_Kernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-// \file
-// Include the right GPU API include with our options.
-
-#ifndef LOFAR_GPUPROC_FILTER_FFT_KERNEL_H
-#define LOFAR_GPUPROC_FILTER_FFT_KERNEL_H
-
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
-
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/Filter_FFT_Kernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/Filter_FFT_Kernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesKernel.h
index a272f6857c1e1e4aba9212ce77515d882f81acc7..a50cf7ed173677ff65257cd5f1bffd432f5788ea 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesKernel.h
@@ -1,6 +1,5 @@
 //# IncoherentStokesKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,62 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_INCOHERENT_STOKES_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_INCOHERENT_STOKES_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_INCOHERENT_STOKES_KERNEL_H
-#define LOFAR_GPUPROC_INCOHERENT_STOKES_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/IncoherentStokesKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/IncoherentStokesKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+
+    class IncoherentStokesKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // IncoherentStokesKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps);
+        unsigned nrStations;
+
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+
+        unsigned nrStokes;
+        unsigned timeIntegrationFactor;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      IncoherentStokesKernel(const gpu::Stream &stream,
+                             const gpu::Module &module,
+                             const Buffers &buffers,
+                             const Parameters &param);
+
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<IncoherentStokesKernel>::compileDefinitions() const;
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesTransposeKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesTransposeKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesTransposeKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesTransposeKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesTransposeKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesTransposeKernel.h
index ed8db9bc0baa2a0e0779f40fc9d6e69cc3cd09bc..b3e38f1d3f55c02872579b4d659d6adf46afbd06 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesTransposeKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/IncoherentStokesTransposeKernel.h
@@ -1,6 +1,6 @@
 //# IncoherentStokesTransposeKernel.h
 //#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +19,66 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_INCOHERENT_STOKES_TRANSPOSE_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_INCOHERENT_STOKES_TRANSPOSE_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_INCOHERENT_STOKES_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_INCOHERENT_STOKES_TRANSPOSE_KERNEL_H
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    //# Forward declarations
+    class Parset;
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/IncoherentStokesTransposeKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/IncoherentStokesTransposeKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+    class IncoherentStokesTransposeKernel : public CompiledKernel
+    {
+    public:
+      // Name of the CUDA kernel source file.
+      static const std::string theirSourceFile;
+
+      // Name of the kernel function to invoke.
+      static const std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // IncoherentStokesTransposeKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps);
+
+        unsigned nrStations;
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+
+        // Size of the square shared memory tile to be used.
+        const unsigned tileSize;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      IncoherentStokesTransposeKernel(const gpu::Stream &stream,
+                             const gpu::Module &module,
+                             const Buffers &buffers,
+                             const Parameters &param);
+
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<IncoherentStokesTransposeKernel>::
+    compileDefinitions() const;
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IntToFloatKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/IntToFloatKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/IntToFloatKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/IntToFloatKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/IntToFloatKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/IntToFloatKernel.h
index b6884c0ec2a827490235272030e6ffe7571718e7..434d6f31b097ee17b94aa685120b47f61e76e5a6 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/IntToFloatKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/IntToFloatKernel.h
@@ -1,6 +1,5 @@
 //# IntToFloatKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,71 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_INT_TO_FLOAT_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_INT_TO_FLOAT_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_INT_TO_FLOAT_KERNEL_H
-#define LOFAR_GPUPROC_INT_TO_FLOAT_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/IntToFloatKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/IntToFloatKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+#include <string>
+#include <vector>
+
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class IntToFloatKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA,
+        STATION_INDICES
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // IntToFloatKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps, bool fftShift, bool beamFormerStationSubset);
+        unsigned nrInputStations;
+        std::vector<unsigned> stationIndices; // input station nr for ewch output station
+
+        unsigned nrBitsPerSample;
+        unsigned nrBytesPerComplexSample() const;
+
+        unsigned nrSamplesPerSubband;
+
+        bool fftShift;
+        bool doStationSubset;
+
+        size_t bufferSize(BufferType bufferType) const;
+
+        unsigned nrOutputStations() const { return doStationSubset ? stationIndices.size() : nrInputStations; }
+      };
+
+      IntToFloatKernel(const gpu::Stream &stream,
+                             const gpu::Module &module,
+                             const Buffers &buffers,
+                             const Parameters &param);
+
+      gpu::DeviceMemory stationIndices;
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<IntToFloatKernel>::compileDefinitions() const;
+  }
+
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/Kernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/Kernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/Kernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/Kernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/Kernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/Kernel.h
index 4000ce8c0bbd0845398cfae88ec37519abdc6b2a..448703b065371590b7055b3ba8ddcb01a0760aae 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/Kernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/Kernel.h
@@ -1,6 +1,5 @@
 //# Kernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,151 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_KERNEL_H
-#define LOFAR_GPUPROC_KERNEL_H
+#include <string>
+#include <iosfwd>
+#include <cuda.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/gpu_wrapper.h>
+#include <GPUProc/gpu_utils.h>
+#include <GPUProc/PerformanceCounter.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/Kernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/Kernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    //# Forward declarations
+    struct BlockID;
+
+    /*
+     * A wrapper for a generic kernel that can be executed on a GPU, and transforms
+     * data from an input buffer to an output buffer.
+     */
+    class Kernel
+    {
+    public:
+      // Parameters that must be passed to the constructor of this Kernel class.
+      // TODO: more at constructor passed immediates can be turned into defines
+      // (blockDim/gridDim too if enforced fixed (consider conditional define)
+      // or drop opt)
+      struct Parameters
+      {
+        Parameters(const std::string &name);
+
+        std::string name;
+
+        bool dumpBuffers;
+        std::string dumpFilePattern;
+      };
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA
+      };
+
+      // Buffers that must be passed to the constructor of this Kernel class.
+      struct Buffers
+      {
+        Buffers(const gpu::DeviceMemory& in, 
+                const gpu::DeviceMemory& out) :
+          input(in), output(out)
+        {}
+        gpu::DeviceMemory input;
+        gpu::DeviceMemory output;
+      };
+
+      void enqueue(const BlockID &blockId);
+
+      // Warning: user has to make sure the Kernel is not running!
+      RunningStatistics getStats() { return itsCounter.getStats(); }
+
+    protected:
+      // Construct a kernel.
+      Kernel(const gpu::Stream& stream,
+             const Buffers &buffers,
+             const Parameters &params);
+
+      // Explicit destructor, because the implicitly generated one is public.
+      virtual ~Kernel();
+
+      // Performance counter for work done by this kernel
+      PerformanceCounter itsCounter;
+
+      size_t nrOperations, nrBytesRead, nrBytesWritten;
+
+      // Launch the actual kernel
+      virtual void launch() const = 0;
+
+      // The GPU Stream associated with this kernel.
+      gpu::Stream itsStream;
+
+      // Keep a local (reference counted) copy of the buffers we're using
+      Buffers itsBuffers;
+
+      // The parameters as given to the constructor.
+      Parameters itsParameters;
+
+    private:
+      // Dump output buffer of a this kernel to disk. Use \a blockId to
+      // distinguish between the different blocks and subbands.
+      // \attention This method is for debugging purposes only, as it has a
+      // severe impact on performance.
+      void dumpBuffers(const BlockID &blockId) const;
+    };
+
+    /*
+     * A Kernel that is actually a CUDA JIT compiled function.
+     */
+    class CompiledKernel : public Kernel, public gpu::Function
+    {
+    protected:
+      // Construct a kernel.
+      CompiledKernel(
+             const gpu::Stream& stream,
+             const gpu::Function& function,
+             const Buffers &buffers,
+             const Parameters &params);
+
+      // Explicit destructor, because the implicitly generated one is public.
+      virtual ~CompiledKernel();
+
+      void launch() const;
+
+      // Set the passed execution configuration if supported on the hardware
+      // in the stream for this kernel.
+      // If not supported and NULL was passed in errorStrings, an exc is thrown.
+      // If not supported and errorsStrings is valid, an error string is written
+      // to the errorStrings pointer.
+      void setEnqueueWorkSizes(gpu::Grid globalWorkSize,
+                               gpu::Block localWorkSize,
+                               std::string* errorStrings = NULL);
+
+      // Requires call to setEnqueueWorkSizes() first to get meaningful result.
+      // Idem for cache and shared memory configuration in the context.
+      unsigned getNrBlocksPerMultiProc(unsigned dynSharedMemBytes = 0) const;
+
+      // "The multiprocessor occupancy is the ratio of active warps to the
+      // maximum number of warps supported on a multiprocessor of the GPU."
+      // This (tries to) mimic what NVIDIA's CUDA_Occupancy_Calculator.xls does.
+      //
+      // Requires call to setEnqueueWorkSizes() first to get meaningful result.
+      // Idem for cache and shared memory configuration in the context.
+      // Note: Higher occupancy does not necessarily mean higher performance.
+      double predictMultiProcOccupancy(unsigned dynSharedMemBytes = 0) const;
+
+      const unsigned maxThreadsPerBlock;
+    private:
+      // The grid of blocks dimensions for kernel execution.
+      gpu::Grid itsGridDims;
+
+      // The block of threads dimensions for kernel execution.
+      gpu::Block itsBlockDims;
+    };
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_BeamFormerKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_BeamFormerKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_BeamFormerKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/UHEP_BeamFormerKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_BeamFormerKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_BeamFormerKernel.h
index f5022c32fe8cb5a705b4cf44ccf3c76e1cd663a2..963438710f62eb79b67d73f690e5a273573c3efa 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_BeamFormerKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_BeamFormerKernel.h
@@ -1,6 +1,5 @@
 //# UHEP_BeamFormerKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,26 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_UHEP_BEAM_FORMER_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_UHEP_BEAM_FORMER_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_UHEP_BEAM_FORMER_KERNEL_H
-#define LOFAR_GPUPROC_UHEP_BEAM_FORMER_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "Kernel.h"
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/UHEP_BeamFormerKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/UHEP_BeamFormerKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class UHEP_BeamFormerKernel : public CompiledKernel
+    {
+    public:
+      UHEP_BeamFormerKernel(const Parset &ps, gpu::Module &program,
+                            gpu::DeviceMemory &devComplexVoltages, gpu::DeviceMemory &devInputSamples, gpu::DeviceMemory &devBeamFormerWeights);
+    };
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFFT_Kernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFFT_Kernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFFT_Kernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFFT_Kernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFFT_Kernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFFT_Kernel.h
index f81a46cb30396895bb7a0a42fc1c70f7f0e47201..cec271c20d121f1ffa6eea2128282f6ddb0fffa3 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFFT_Kernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFFT_Kernel.h
@@ -1,6 +1,5 @@
 //# UHEP_InvFFT_Kernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,26 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_UHEP_INV_FFT_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_UHEP_INV_FFT_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_UHEP_INV_FFT_KERNEL_H
-#define LOFAR_GPUPROC_UHEP_INV_FFT_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "Kernel.h"
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/UHEP_InvFFT_Kernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/UHEP_InvFFT_Kernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class UHEP_InvFFT_Kernel : public CompiledKernel
+    {
+    public:
+      UHEP_InvFFT_Kernel(const Parset &ps, gpu::Module &program, gpu::DeviceMemory &devFFTedData);
+
+    };
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFIR_Kernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFIR_Kernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFIR_Kernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFIR_Kernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFIR_Kernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFIR_Kernel.h
index 7bfefe97b3f3d2bae4d1aa3b01892ddf76e6400e..92ebfee3ec42bb66b20c8c8beadbc66066faa156 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFIR_Kernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_InvFIR_Kernel.h
@@ -1,6 +1,5 @@
 //# UHEP_InvFIR_Kernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,28 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_UHEP_INV_FIR_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_UHEP_INV_FIR_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_UHEP_INV_FIR_KERNEL_H
-#define LOFAR_GPUPROC_UHEP_INV_FIR_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "Kernel.h"
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/UHEP_InvFIR_Kernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/UHEP_InvFIR_Kernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class UHEP_InvFIR_Kernel : public CompiledKernel
+    {
+    public:
+      UHEP_InvFIR_Kernel(const Parset &ps, gpu::Stream &queue,
+                         gpu::Module &program, gpu::DeviceMemory &devInvFIRfilteredData,
+                         gpu::DeviceMemory &devFFTedData, gpu::DeviceMemory &devInvFIRfilterWeights);
+    };
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TransposeKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TransposeKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TransposeKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TransposeKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TransposeKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TransposeKernel.h
index a72a468babca65802d0a9f8a51f852770020e6da..9a2f222c09bddc0fec0b2bb73bfa9d6c3f08887d 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TransposeKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TransposeKernel.h
@@ -1,6 +1,5 @@
 //# UHEP_TransposeKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,27 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_UHEP_TRANSPOSE_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_UHEP_TRANSPOSE_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_UHEP_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_UHEP_TRANSPOSE_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "Kernel.h"
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/UHEP_TransposeKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/UHEP_TransposeKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class UHEP_TransposeKernel : public CompiledKernel
+    {
+    public:
+      UHEP_TransposeKernel(const Parset &ps, gpu::Module &program,
+                           gpu::DeviceMemory &devFFTedData, gpu::DeviceMemory &devComplexVoltages, gpu::DeviceMemory &devReverseSubbandMapping);
+    };
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TriggerKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TriggerKernel.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TriggerKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TriggerKernel.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TriggerKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TriggerKernel.h
index 57e1775a8d02b9308f90d330f0ee473f48e5be5c..4f97f5fccc8a96ad72c29c5d38008832fc45b260 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TriggerKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/UHEP_TriggerKernel.h
@@ -1,6 +1,5 @@
 //# UHEP_TriggerKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,35 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_UHEP_TRIGGER_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_UHEP_TRIGGER_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_UHEP_TRIGGER_KERNEL_H
-#define LOFAR_GPUPROC_UHEP_TRIGGER_KERNEL_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "Kernel.h"
+#include <GPUProc/gpu_wrapper.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/UHEP_TriggerKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/UHEP_TriggerKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+
+
+    struct TriggerInfo {
+      float mean, variance, bestValue;
+      unsigned bestApproxIndex;
+    };
+
+    class UHEP_TriggerKernel : public CompiledKernel
+    {
+    public:
+      UHEP_TriggerKernel(const Parset &ps, gpu::Module &program,
+                         gpu::DeviceMemory &devTriggerInfo, gpu::DeviceMemory &devInvFIRfilteredData);
+
+    };
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/ZeroingKernel.cc b/RTCP/Cobalt/GPUProc/src/Kernels/ZeroingKernel.cc
similarity index 97%
rename from RTCP/Cobalt/GPUProc/src/cuda/Kernels/ZeroingKernel.cc
rename to RTCP/Cobalt/GPUProc/src/Kernels/ZeroingKernel.cc
index cb828e4eb085a3aa533e2715ed22362fff90adf2..9b3175eeceebfcb927043b61adfe50fec24360b1 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/ZeroingKernel.cc
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/ZeroingKernel.cc
@@ -108,7 +108,7 @@ namespace LOFAR
       // marshall flags to GPU host buffer
       computeMaskTimer.start();
       for(unsigned station = 0; station < nrSTABs; ++station) {
-        LOG_DEBUG_STR("Flags for block " << blockId << ", station " << station << ": " << channelFlags[station]);
+        //LOG_DEBUG_STR("Flags for block " << blockId << ", station " << station << ": " << channelFlags[station]);
         channelFlags[station].toByteset(hostMask.get<char>() + station * nrSamplesPerChannel, nrSamplesPerChannel);
       }
       computeMaskTimer.stop();
diff --git a/RTCP/Cobalt/GPUProc/src/Kernels/ZeroingKernel.h b/RTCP/Cobalt/GPUProc/src/Kernels/ZeroingKernel.h
index b22aa3ae5535e4c7c857305b9bfacbeadf6aafbf..edf360f86f1e4d1cd0d6f83eba65a15b4d770bb4 100644
--- a/RTCP/Cobalt/GPUProc/src/Kernels/ZeroingKernel.h
+++ b/RTCP/Cobalt/GPUProc/src/Kernels/ZeroingKernel.h
@@ -1,6 +1,5 @@
 //# ZeroingKernel.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,81 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_ZEROING_KERNEL_H
+#define LOFAR_GPUPROC_CUDA_ZEROING_KERNEL_H
 
-#ifndef LOFAR_GPUPROC_ZEROING_KERNEL_H
-#define LOFAR_GPUPROC_ZEROING_KERNEL_H
+#include <Common/Timer.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <CoInterface/Parset.h>
+#include <CoInterface/MultiDimArray.h>
+#include <CoInterface/SparseSet.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Kernels/ZeroingKernel.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Kernels/ZeroingKernel.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+#include <GPUProc/Kernels/Kernel.h>
+#include <GPUProc/KernelFactory.h>
+#include <GPUProc/gpu_wrapper.h>
+
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class ZeroingKernel : public CompiledKernel
+    {
+    public:
+      static std::string theirSourceFile;
+      static std::string theirFunction;
+
+      enum BufferType
+      {
+        INPUT_DATA,
+        OUTPUT_DATA,
+        MASK
+      };
+
+      // Parameters that must be passed to the constructor of the
+      // IntToFloatKernel class.
+      struct Parameters : Kernel::Parameters
+      {
+        Parameters(const Parset& ps, unsigned nrSTABs, unsigned nrChannels, const std::string &name = "Zeroing");
+        unsigned nrSTABs;
+
+        unsigned nrChannels;
+        unsigned nrSamplesPerChannel;
+
+        size_t bufferSize(BufferType bufferType) const;
+      };
+
+      // Construct a Zeroing kernel.
+      // \pre The number of samples per channel must be even.
+      // \pre The product of the number of stations, the number of
+      // polarizations, the number of channels per subband, and the number of
+      // samples per channel must be divisible by the maximum number of threads
+      // per block (typically 1024).
+      ZeroingKernel(const gpu::Stream &stream,
+                     const gpu::Module &module,
+                     const Buffers &buffers,
+                     const Parameters &param);
+
+      // Run the kernel. "channelFlags" is the set of flags, one for each station/tab
+      void enqueue(const BlockID &blockId, const MultiDimArray<SparseSet<unsigned>, 1> &channelFlags);
+
+    private:
+      const unsigned nrSTABs;
+      const unsigned nrSamplesPerChannel;
+
+      // The flag mask per sample (1=flagged, 0=ok)
+      gpu::DeviceMemory gpuMask;
+      gpu::HostMemory hostMask;
+
+      NSTimer computeMaskTimer;
+    };
+
+    //# --------  Template specializations for KernelFactory  -------- #//
+
+    template<> CompileDefinitions
+    KernelFactory<ZeroingKernel>::compileDefinitions() const;
+  }
+
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/MPIReceiver.cc b/RTCP/Cobalt/GPUProc/src/MPIReceiver.cc
index 1ee7baae144223111abefef007a95a3448bed3dc..36d154df37c3824cace13e80c0ef727e0ccfb908 100644
--- a/RTCP/Cobalt/GPUProc/src/MPIReceiver.cc
+++ b/RTCP/Cobalt/GPUProc/src/MPIReceiver.cc
@@ -129,7 +129,7 @@ namespace LOFAR
       }
 
       // Signal end of input
-      mpiPool.filled.append(NULL);
+      mpiPool.filled.append(NULL, false);
     }
 
     void MPIReceiver::receiveInput()
diff --git a/RTCP/Cobalt/GPUProc/src/MultiDimArrayHostBuffer.h b/RTCP/Cobalt/GPUProc/src/MultiDimArrayHostBuffer.h
index dee99d41fa592fd1935f4e8bbe3cfb00db80ca51..dafb5ba201afc0e340ebb2199ce423499bd4dd3e 100644
--- a/RTCP/Cobalt/GPUProc/src/MultiDimArrayHostBuffer.h
+++ b/RTCP/Cobalt/GPUProc/src/MultiDimArrayHostBuffer.h
@@ -1,6 +1,5 @@
 //# MultiDimArrayHostBuffer.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,45 @@
 //#
 //# $Id$
 
-// \file
-// Support for our multi-dim array-ed GPU host buffer.
+#ifndef LOFAR_GPUPROC_CUDA_MULTI_DIM_ARRAY_HOST_BUFFER_H
+#define LOFAR_GPUPROC_CUDA_MULTI_DIM_ARRAY_HOST_BUFFER_H
 
-#ifndef LOFAR_GPUPROC_MULTI_DIM_ARRAY_HOST_BUFFER_H
-#define LOFAR_GPUPROC_MULTI_DIM_ARRAY_HOST_BUFFER_H
+#include <CoInterface/MultiDimArray.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "gpu_wrapper.h"
 
-#if defined (USE_CUDA)
-# include "cuda/MultiDimArrayHostBuffer.h"
-#elif defined (USE_OPENCL)
-# include "opencl/MultiDimArrayHostBuffer.h"
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+
+    // A MultiDimArray allocated as a HostBuffer
+    // Note: Elements are not constructed/destructed.
+    template <typename T, unsigned DIM>
+    class MultiDimArrayHostBuffer : public gpu::HostMemory,
+                                    public MultiDimArray<T, DIM>
+    {
+    public:
+      template <typename ExtentList>
+      MultiDimArrayHostBuffer(const ExtentList &extents, const gpu::Context &context,
+                              unsigned int flags = 0)
+      :
+        HostMemory(context, MultiDimArray<T, DIM>::nrElements(extents) * sizeof(T), flags),
+        MultiDimArray<T, DIM>(extents, gpu::HostMemory::get<T>(), false)
+      {
+      }
+
+      using HostMemory::size;
+
+    private:
+      MultiDimArrayHostBuffer(); // don't use
+      MultiDimArrayHostBuffer(const MultiDimArrayHostBuffer<T, DIM> &rhs); // don't use
+      MultiDimArrayHostBuffer<T, DIM> &operator=(const MultiDimArrayHostBuffer<T, DIM> &rhs); // don't use
+      using MultiDimArray<T, DIM>::resize; // don't use
+    };
+
+  } // namespace Cobalt
+} // namespace LOFAR
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/PerformanceCounter.cc b/RTCP/Cobalt/GPUProc/src/PerformanceCounter.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/PerformanceCounter.cc
rename to RTCP/Cobalt/GPUProc/src/PerformanceCounter.cc
diff --git a/RTCP/Cobalt/GPUProc/src/PerformanceCounter.h b/RTCP/Cobalt/GPUProc/src/PerformanceCounter.h
index d7bca1ca40430ff51c87a8cdf5a1a21d444f1c3c..5748b5f4d199dadcc121f4a363d99823ae6fcd42 100644
--- a/RTCP/Cobalt/GPUProc/src/PerformanceCounter.h
+++ b/RTCP/Cobalt/GPUProc/src/PerformanceCounter.h
@@ -1,6 +1,5 @@
 //# PerformanceCounter.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,48 @@
 //#
 //# $Id$
 
-// \file
-// Support GPU kernel performance timing.
+#ifndef LOFAR_GPUPROC_CUDA_PERFORMANCECOUNTER_H
+#define LOFAR_GPUPROC_CUDA_PERFORMANCECOUNTER_H
 
-#ifndef LOFAR_PERFORMANCE_COUNTER_H
-#define LOFAR_PERFORMANCE_COUNTER_H
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/gpu_wrapper.h>
+#include <CoInterface/RunningStatistics.h>
 
-#if defined (USE_CUDA)
-# include "cuda/PerformanceCounter.h"
-#elif defined (USE_OPENCL)
-# include "opencl/PerformanceCounter.h"
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class PerformanceCounter
+    {
+    public:
+      PerformanceCounter(const gpu::Context &context, const std::string &name);
+      ~PerformanceCounter();
+
+      void recordStart(const gpu::Stream &stream);
+      void recordStop(const gpu::Stream &stream);
+
+      // Warning: user must make sure that the counter is not running!
+      RunningStatistics getStats() { logTime(); return stats; }
+
+    private:
+      const std::string name;
+
+      // Public event: it needs to be inserted into a stream.
+      // @{
+      gpu::Event start;
+      gpu::Event stop;
+      // @}
+
+      // Whether we have posted events that still need to be
+      // processed in logTime()
+      bool recording;
+
+      RunningStatistics stats;
+
+      void logTime();
+    };
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/Pipeline.cc b/RTCP/Cobalt/GPUProc/src/Pipelines/Pipeline.cc
similarity index 98%
rename from RTCP/Cobalt/GPUProc/src/cuda/Pipelines/Pipeline.cc
rename to RTCP/Cobalt/GPUProc/src/Pipelines/Pipeline.cc
index 4bcdc423041a438c0eb4cb19d34a35e6fbb96076..3fcafeaf8d0cab3c2fc0fca15402072e2a794e71 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/Pipeline.cc
+++ b/RTCP/Cobalt/GPUProc/src/Pipelines/Pipeline.cc
@@ -138,6 +138,7 @@ namespace LOFAR
       nrSubbandsPerSubbandProc(ceilDiv(subbandIndices.size(), subbandProcs.size())),
       itsMdLogger(mdLogger),
       itsMdKeyPrefix(mdKeyPrefix),
+      outputThreads("Pipeline::outputThreads"),
       mpiPool(pool),
       writePool(subbandIndices.size()),
       factories(ps, nrSubbandsPerSubbandProc),
@@ -246,7 +247,7 @@ namespace LOFAR
             // run the queue
             preprocessSubbands(queue);
 
-            queue.processPool.filled.append(NULL);
+            queue.processPool.filled.append(NULL, false);
           }
         }
 
@@ -271,7 +272,7 @@ namespace LOFAR
             processSubbands(queue);
 
             // Signal end of output
-            queue.outputPool.filled.append(NULL);
+            queue.outputPool.filled.append(NULL, false);
           }
         }
 
@@ -296,7 +297,7 @@ namespace LOFAR
 
           // Signal end of output
           for (size_t i = 0; i < writePool.size(); ++i) {
-            writePool[i].queue->append(NULL);
+            writePool[i].queue->append(NULL, false);
           }
 
           // Wait for data to propagate towards outputProc,
@@ -395,9 +396,9 @@ namespace LOFAR
           // transposeInput requires a significant amount of CPU to copy the buffers.
           // We need to spread the load across a few cores to keep running within
           // budget if there are too many stations.
-#         pragma omp parallel for num_threads(4)
+//#         pragma omp parallel for num_threads(4)
           for (size_t stat = 0; stat < ps.settings.antennaFields.size(); ++stat) {
-            OMPThread::ScopedName sn("transposeInput");
+            //OMPThread::ScopedName sn("transposeInput");
 
             if (metaData[stat][subbandIdx].EOS) {
               // Flag everything -- note that delays etc will not matter, so no need to set them
@@ -411,7 +412,7 @@ namespace LOFAR
 
             nrFlaggedSamples[stat] += nflags;
 #if 1
-            // Flagged input samples will be set to zero (in preprocessSubband),
+            // Flagged input samples will be set to zero (in processSubband on the GPU),
             // so no need to copy anything if everything is flagged.
             if (nflags < ps.settings.blockSize) {
               // Copy the data
@@ -437,7 +438,7 @@ namespace LOFAR
         for (size_t stat = 0; stat < ps.settings.antennaFields.size(); ++stat) {
           const double flagPerc = 100.0 * nrFlaggedSamples[stat] / subbandIndices.size() / ps.settings.blockSize;
 
-          if (flagPerc == 0.0)
+          if (flagPerc < 0.1) // allow minimal flagging to keep logs cleanish
             cleanStr << str(boost::format("%s, ") % ps.settings.antennaFields[stat].name);
           else
             flagStr << str(boost::format("%s: %.1f%%, ") % ps.settings.antennaFields[stat].name % flagPerc);
@@ -454,7 +455,7 @@ namespace LOFAR
 
       // Signal end of input
       for (size_t i = 0; i < subbandProcs.size(); ++i) {
-        subbandProcs[i]->inputPool.filled.append(NULL);
+        subbandProcs[i]->inputPool.filled.append(NULL, false);
       }
     }
 
@@ -601,7 +602,7 @@ namespace LOFAR
           OMPThread::ScopedName sn(str(format("writeBF %u") % globalSubbandIdx));
 
           writeBeamformedOutput(globalSubbandIdx, inputQueue, queue, outputQueue);
-          queue.append(NULL);
+          queue.append(NULL, false);
         }
 
         // Output processing
diff --git a/RTCP/Cobalt/GPUProc/src/Pipelines/Pipeline.h b/RTCP/Cobalt/GPUProc/src/Pipelines/Pipeline.h
index 0718dcdac67368e0034c519ca6aa9232ba7f4d7f..b09516353d02eed582d95e36bb683953b9fe1ba1 100644
--- a/RTCP/Cobalt/GPUProc/src/Pipelines/Pipeline.h
+++ b/RTCP/Cobalt/GPUProc/src/Pipelines/Pipeline.h
@@ -1,6 +1,5 @@
 //# Pipeline.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,130 @@
 //#
 //# $Id$
 
-// \file
-// Support for the beamformer pipeline.
+#ifndef LOFAR_GPUPROC_CUDA_PIPELINE_H
+#define LOFAR_GPUPROC_CUDA_PIPELINE_H
 
-#ifndef LOFAR_GPUPROC_PIPELINE_H
-#define LOFAR_GPUPROC_PIPELINE_H
+#include <string>
+#include <vector>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <Common/LofarTypes.h>
+#include <MACIO/RTmetadata.h>
+#include <CoInterface/Parset.h>
+#include <CoInterface/SmartPtr.h>
+#include <CoInterface/Pool.h>
+#include <CoInterface/OMPThread.h>
+#include <CoInterface/TABTranspose.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Pipelines/Pipeline.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Pipelines/Pipeline.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+#include <GPUProc/gpu_wrapper.h>
+#include <GPUProc/PerformanceCounter.h>
+#include <GPUProc/SubbandProcs/SubbandProc.h>
+#include <GPUProc/SubbandProcs/KernelFactories.h>
+
+#include <GPUProc/MPIReceiver.h>
+
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    using MACIO::RTmetadata;
+
+    class Pipeline
+    {
+    public:
+      Pipeline(const Parset &, const std::vector<size_t> &subbandIndices, 
+        const std::vector<gpu::Device> &devices,
+        Pool<struct MPIRecvData> &pool,
+        RTmetadata &mdLogger, const std::string &mdKeyPrefix,
+        unsigned hostID = 0);
+
+      ~Pipeline();
+
+      // allocate resources, such as GPU buffers.
+      //
+      // Pipeline deploys delayed construction, because the resources may still
+      // be occupied by a previous observation at the time of construction.
+      //
+      // An alternative to delayed allocation could be to retry the GPU malloc
+      // with a timeout, but that could potentially dead-lock two concurrent
+      // observations.
+      void allocateResources();
+
+      // for each subband get data from input stream, sync, start the kernels to process all data, write output in parallel
+      void processObservation();
+
+      struct Output 
+      {
+        // output data queue
+        SmartPtr< Queue< SmartPtr<SubbandProcOutputData> > > queue;
+      };
+
+      std::vector< SmartPtr<SubbandProc> > subbandProcs;
+
+    protected:
+      const Parset             &ps;
+      const std::vector<gpu::Device> devices;
+
+      const std::vector<size_t> subbandIndices; // [localSubbandIdx]
+
+      // Whether we're the pipeline that processes the first subband.
+      // If true, we log our progress at INFO. Otherwise, at DEBUG.
+      const bool processingSubband0;
+
+      const size_t nrSubbandsPerSubbandProc;
+
+      RTmetadata &itsMdLogger; // non-const to be able to use its log()
+      const std::string itsMdKeyPrefix;
+
+      // Threads that write to outputProc, and need to
+      // be killed when they stall at observation end.
+      OMPThreadSet outputThreads;
+
+      Pool<struct MPIRecvData> &mpiPool;
+
+      std::vector<struct Output> writePool; // [localSubbandIdx]
+
+      KernelFactories factories;
+
+      // For each block, transpose all subbands from all stations, and divide the
+      // work over the subbandProcs
+      void transposeInput();
+      template<typename SampleT> void transposeInput();
+
+      // preprocess subbands on the CPU
+      void preprocessSubbands(SubbandProc &subbandProc);
+
+      // process subbands on the GPU
+      void processSubbands(SubbandProc &subbandProc);
+
+      // Post-process subbands on the CPU
+      void postprocessSubbands(SubbandProc &subbandProc);
+
+      void writeBeamformedOutput(
+        unsigned globalSubbandIdx,
+        Queue< SmartPtr<SubbandProcOutputData> > &inputQueue,
+        Queue< SmartPtr<SubbandProcOutputData> > &outputQueue,
+        Queue< SmartPtr<SubbandProcOutputData> > &spillQueue );
+
+      void writeCorrelatedOutput(
+        unsigned globalSubbandIdx,
+        Queue< SmartPtr<SubbandProcOutputData> > &inputQueue,
+        Queue< SmartPtr<SubbandProcOutputData> > &outputQueue );
+
+    public:
+      // Send subbands to Storage
+      void writeOutput(
+        unsigned globalSubbandIdx,
+        Queue< SmartPtr<SubbandProcOutputData> > &inputQueue,
+        Queue< SmartPtr<SubbandProcOutputData> > &outputQueue );
+
+      // Output send engine, takes care of the host connections and the multiplexing.
+      TABTranspose::MultiSender multiSender;
+
+      // MPI rank for this node
+      const unsigned hostID;
+    };
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/UHEP_Pipeline.cc b/RTCP/Cobalt/GPUProc/src/Pipelines/UHEP_Pipeline.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/Pipelines/UHEP_Pipeline.cc
rename to RTCP/Cobalt/GPUProc/src/Pipelines/UHEP_Pipeline.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Pipelines/UHEP_Pipeline.h b/RTCP/Cobalt/GPUProc/src/Pipelines/UHEP_Pipeline.h
index 8fdcc994b2974170d7418a7057e5702bbed0abbd..617d168b42be3e1324d90a882967b7e382608684 100644
--- a/RTCP/Cobalt/GPUProc/src/Pipelines/UHEP_Pipeline.h
+++ b/RTCP/Cobalt/GPUProc/src/Pipelines/UHEP_Pipeline.h
@@ -1,6 +1,5 @@
 //# UHEP_Pipeline.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,35 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_UHEP_PIPELINE_H
+#define LOFAR_GPUPROC_CUDA_UHEP_PIPELINE_H
 
-#ifndef LOFAR_GPUPROC_UHEP_PIPELINE_H
-#define LOFAR_GPUPROC_UHEP_PIPELINE_H
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <GPUProc/gpu_wrapper.h>
+#include "Pipeline.h"
+#include <GPUProc/PerformanceCounter.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/Pipelines/UHEP_Pipeline.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/Pipelines/UHEP_Pipeline.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+
+    class UHEP_Pipeline : public Pipeline
+    {
+    public:
+      UHEP_Pipeline(const Parset &, Pool<struct MPIRecvData> &pool);
+
+      void doWork();
+
+      gpu::Module beamFormerProgram, transposeProgram, invFFTprogram, invFIRfilterProgram, triggerProgram;
+
+      PerformanceCounter beamFormerCounter, transposeCounter, invFFTcounter, invFIRfilterCounter, triggerCounter;
+      PerformanceCounter beamFormerWeightsCounter, samplesCounter;
+    };
+
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/Station/StationInput.cc b/RTCP/Cobalt/GPUProc/src/Station/StationInput.cc
index bc88101ac3a450999e71435af6f5519b976cfb66..e2c0fa35b764715f142dcf3541544f0ad8672892 100644
--- a/RTCP/Cobalt/GPUProc/src/Station/StationInput.cc
+++ b/RTCP/Cobalt/GPUProc/src/Station/StationInput.cc
@@ -70,7 +70,7 @@ namespace LOFAR {
       ps(ps),
       stationIdx(stationIdx),
       stationID(StationID::parseFullFieldName(ps.settings.antennaFields.at(stationIdx).name)),
-      logPrefix(str(format("[station %s] ") % stationID.name())),
+      logPrefix(stationID.name() + " "),
 
       startTime(ps.settings.startTime * ps.settings.subbandWidth(), ps.settings.clockHz()),
       stopTime(ps.settings.stopTime * ps.settings.subbandWidth(), ps.settings.clockHz()),
@@ -78,6 +78,9 @@ namespace LOFAR {
       nrSamples(ps.settings.blockSize),
       nrBlocks(ps.settings.nrBlocks()),
 
+      // Do not warn on bad performance. StationMetaData uses the free queue as its INPUT, so it tends to
+      // consume all elements in the free queue. This is contrary to the other pools (they wait for input
+      // on a filled queue), resulting in the wrong analysis.
       metaDataPool(str(format("StationMetaData::metaDataPool [station %s]") % stationID.name()), false),
 
       subbands(values(subbandDistribution))
@@ -98,7 +101,7 @@ namespace LOFAR {
        */
 
       // Each element represents 1 block of buffer.
-      for (size_t i = 0; i < 5; ++i)
+      for (size_t i = 0; i < 10; ++i)
         metaDataPool.free.append(new MPIData<SampleT>(startTime, ps.settings.subbands.size(), nrSamples), false);
 
       /*
@@ -154,7 +157,7 @@ namespace LOFAR {
       }
 
       // Signal EOD
-      metaDataPool.filled.append(NULL);
+      metaDataPool.filled.append(NULL, false);
     }
 
 
@@ -166,7 +169,7 @@ namespace LOFAR {
       stationIdx(stationIdx),
       stationID(StationID::parseFullFieldName(ps.settings.antennaFields.at(stationIdx).name)),
 
-      logPrefix(str(format("[station %s] ") % stationID.name())),
+      logPrefix(stationID.name() + " "),
 
       mode(ps.settings.nrBitsPerSample, ps.settings.clockMHz),
       nrBoards(ps.settings.antennaFields.at(stationIdx).inputStreams.size()),
@@ -223,8 +226,8 @@ namespace LOFAR {
         const unsigned board = ps.settings.antennaFields[stationIdx].rspBoardMap[sb];
         const unsigned slot  = ps.settings.antennaFields[stationIdx].rspSlotMap[sb];
 
-        ASSERT(board < nrBoards);
-        ASSERT(slot < mode.nrBeamletsPerBoard());
+        ASSERTSTR(board < nrBoards, logPrefix << "RSP Board Map refers to board " << board << " but we have only " << nrBoards << " inputs" );
+        ASSERTSTR(slot < mode.nrBeamletsPerBoard(), logPrefix << "RSP Slot Map refers to slot " << slot << " but each board only has " << mode.nrBeamletsPerBoard() );
 
         // The specified (board,slot) is stored at position i
         ASSERTSTR(result[board][slot] == -1, "Station " << stationID.name() << ": board " << board << " slot " << slot << " is used multiple times!");
@@ -262,7 +265,7 @@ namespace LOFAR {
       } else {
         if (ps.settings.realTime) {
           try {
-            stream = createStream(desc, true);
+            stream = createStream(desc, true, 0, str(format("from %s-RSP%u") % stationID.name() % board));
           } catch (Exception &ex) {
             LOG_ERROR_STR(logPrefix << "Caught exception creating stream (continuing on /dev/null): " << ex.what());
             stream = new FileStream("/dev/null"); /* will read end-of-stream: avoid spamming illegal packets */
@@ -320,7 +323,7 @@ namespace LOFAR {
 
       try {
         SmartPtr<Stream> stream = inputStream(board);
-        PacketReader reader(str(format("%s[board %s] ") % logPrefix % board),
+        PacketReader reader(str(format("%s RSP%s ") % logPrefix % board),
                             *stream, mode);
 
         Queue< SmartPtr<RSPData> > &inputQueue = rspDataPool[board]->free;
@@ -539,7 +542,7 @@ namespace LOFAR {
       }
 
       LOG_INFO_STR(logPrefix << "readRSPNonRealTime: sending EOS");
-      rspDataPool[0]->filled.append(NULL);
+      rspDataPool[0]->filled.append(NULL, false);
     }
 
 
@@ -601,12 +604,12 @@ namespace LOFAR {
                                      Queue< SmartPtr< MPIData<SampleT> > > &outputQueue,
                                      MACIO::RTmetadata &mdLogger, const string &mdKeyPrefix )
     {
-      OMPThreadSet packetReaderThreads;
+      OMPThreadSet packetReaderThreads("packetReaders");
 
       if (ps.settings.realTime) {
         // Each board has its own pool to reduce lock contention
         for (size_t board = 0; board < nrBoards; ++board)
-          for (size_t i = 0; i < 24; ++i)
+          for (size_t i = 0; i < 48; ++i)
             rspDataPool[board]->free.append(new RSPData(RT_PACKET_BATCH_SIZE), false);
       } else {
         // We just process one packet at a time, merging all the streams into rspDataPool[0].
@@ -701,7 +704,7 @@ namespace LOFAR {
           }
 
           // Signal EOD to output
-          outputQueue.append(NULL);
+          outputQueue.append(NULL, false);
 
           // Signal EOD to input. It's a free queue, so prepend to avoid
           // having the reader flush the whole queue first.
@@ -740,7 +743,7 @@ namespace LOFAR {
       Queue< SmartPtr< MPIData<SampleT> > > mpiQueue(str(format(
             "sendInputToPipeline::mpiQueue [station %s]") % stationID.name()));
 
-      MPISender sender(logPrefix, stationIdx, subbandDistribution);
+      MPISender sender(logPrefix, stationIdx, subbandDistribution, ps.settings.blockDuration());
 
       /*
        * Stream the data.
diff --git a/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc b/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc
index 5b0fb842850ed9f3857e9af0d31ecd2a9945d5cd..e055c88443dab1ab2c14a4c7e807730904e211af 100644
--- a/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc
+++ b/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc
@@ -46,6 +46,7 @@
 #include <Common/LofarLogger.h>
 #include <Common/Timer.h>
 #include <CoInterface/OMPThread.h>
+#include <CoInterface/BudgetTimer.h>
 #include <InputProc/SampleType.h>
 
 using namespace LOFAR;
@@ -197,14 +198,15 @@ namespace LOFAR {
     template struct MPIData< SampleType<i4complex> >;
 
     MPISender::MPISender( const std::string &logPrefix, size_t stationIdx,
-                          const SubbandDistribution &subbandDistribution )
+                          const SubbandDistribution &subbandDistribution, float blockDuration )
     :
       logPrefix(logPrefix),
       stationIdx(stationIdx),
       subbandDistribution(subbandDistribution),
       targetRanks(keys(subbandDistribution)),
       subbandOffsets(targetRanks.size(), 0),
-      nrSubbands(values(subbandDistribution).size())
+      nrSubbands(values(subbandDistribution).size()),
+      blockDuration(blockDuration)
     {
       // Determine the offset of the set of subbands for each rank within
       // the members in MPIData<SampleT>.
@@ -228,6 +230,7 @@ namespace LOFAR {
           if (subbandDistribution.at(rank).empty())
             continue;
 
+          // TODO: Pull this out of loop into a class member, as this object is constant per rank
           MPISendStation sender(stationIdx, rank, subbandDistribution.at(rank), mpiData.nrSamples);
 
           const size_t offset = subbandOffsets[rank];
@@ -250,6 +253,10 @@ namespace LOFAR {
       SmartPtr< MPIData<SampleT> > mpiData;
 
       NSTimer mpiSendTimer(str(format("%s MPI send data") % logPrefix), true, true);
+      BudgetTimer copyTimer(
+        str(format("%s MPI send data") % logPrefix),
+        blockDuration,
+        true, true);
 
       size_t nrProcessedSamples = 0;
       size_t nrFlaggedSamples = 0;
@@ -258,6 +265,7 @@ namespace LOFAR {
         const ssize_t block = mpiData->block;
         const size_t  nrSamples = mpiData->nrSamples;
 
+        (void)block; //prevent unused var warning in release mode
         LOG_DEBUG_STR(logPrefix << str(format("[block %d] Finalising metaData") % block));
 
         mpiData->serialiseMetaData();
diff --git a/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h b/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h
index 36156bbe57c9a66fd2a318d1842d362f2feae819..413f91ad6d8e114ab4a0cbfa6883428e8cddb67c 100644
--- a/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h
+++ b/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h
@@ -129,7 +129,8 @@ namespace LOFAR {
     class MPISender {
     public:
       MPISender( const std::string &logPrefix, size_t stationIdx,
-                 const SubbandDistribution &subbandDistribution );
+                 const SubbandDistribution &subbandDistribution,
+                 float blockDuration );
 
       /*
        * Sends blocks over MPI until a NULL is read from the inputQueue.
@@ -153,6 +154,7 @@ namespace LOFAR {
       const std::vector<int> targetRanks;
       std::vector<size_t> subbandOffsets;
       const size_t nrSubbands;
+      const float blockDuration;
 
 
       /*
diff --git a/RTCP/Cobalt/GPUProc/src/Storage/StorageProcess.cc b/RTCP/Cobalt/GPUProc/src/Storage/StorageProcess.cc
index 54b4b0d7825b928c598332bdb9129c0b804a7b5e..7e9d4f7455157d2ea0ac59ac758342d326fefc24 100644
--- a/RTCP/Cobalt/GPUProc/src/Storage/StorageProcess.cc
+++ b/RTCP/Cobalt/GPUProc/src/Storage/StorageProcess.cc
@@ -29,6 +29,7 @@
 #include <Common/LofarLogger.h>
 #include <Common/Thread/Thread.h>
 #include <MessageBus/ToBus.h>
+#include <MessageBus/Util.h>
 #include <MessageBus/Protocols/TaskFeedbackDataproducts.h>
 #include <Stream/PortBroker.h>
 #include <CoInterface/Stream.h>
@@ -65,7 +66,7 @@ namespace LOFAR
 
       if (!itsSentFeedback) {
         // send default LTA feedback for this host
-        ToBus bus("lofar.task.feedback.dataproducts");
+        ToBus bus("otdb.task.feedback.dataproducts", broker_feedback());
 
         const std::string myName = "Cobalt/GPUProc/Storage/StorageProcess";
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerCoherentStep.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerCoherentStep.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerCoherentStep.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerCoherentStep.cc
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerCoherentStep.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerCoherentStep.h
similarity index 98%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerCoherentStep.h
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerCoherentStep.h
index c96eec1ce5f24c95fd9cb6eb5cbb1549e9c521e7..5c022679896ebd30799980c6e39448683375b008 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerCoherentStep.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerCoherentStep.h
@@ -16,7 +16,7 @@
 //# You should have received a copy of the GNU General Public License along
 //# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 //#
-//# $Id$
+//# $Id: BeamFormerCoherentStep.h 42125 2019-03-08 13:17:27Z mol $
 
 #ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_COHERENT_STEP_H
 #define LOFAR_GPUPROC_CUDA_BEAM_FORMER_COHERENT_STEP_H
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerIncoherentStep.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerIncoherentStep.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerIncoherentStep.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerIncoherentStep.cc
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerIncoherentStep.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerIncoherentStep.h
similarity index 98%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerIncoherentStep.h
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerIncoherentStep.h
index 30e9c1062e7bf3aacecf5b7828e0db387597eb60..04cfcf5bf6f86ac9e2fd790ed58ff04fc3c94e1f 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerIncoherentStep.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerIncoherentStep.h
@@ -16,7 +16,7 @@
 //# You should have received a copy of the GNU General Public License along
 //# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 //#
-//# $Id$
+//# $Id: BeamFormerIncoherentStep.h 42125 2019-03-08 13:17:27Z mol $
 
 #ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_INCOHERENT_STEP_H
 #define LOFAR_GPUPROC_CUDA_BEAM_FORMER_INCOHERENT_STEP_H
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerPreprocessingStep.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerPreprocessingStep.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.cc
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerPreprocessingStep.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.h
similarity index 97%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerPreprocessingStep.h
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.h
index f5fb0ac09dfe905c89549cfdde307aeb4c877e11..5c7e6f39cd52c2b9840bbc9aae3b9e3f00322492 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/BeamFormerPreprocessingStep.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/BeamFormerPreprocessingStep.h
@@ -16,7 +16,7 @@
 //# You should have received a copy of the GNU General Public License along
 //# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 //#
-//# $Id$
+//# $Id: BeamFormerPreprocessingStep.h 42125 2019-03-08 13:17:27Z mol $
 
 #ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_PREPROCESSING_STEP_H
 #define LOFAR_GPUPROC_CUDA_BEAM_FORMER_PREPROCESSING_STEP_H
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/CorrelatorStep.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/CorrelatorStep.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.cc
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/CorrelatorStep.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.h
similarity index 99%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/CorrelatorStep.h
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.h
index 3fa9e3d79cd2a1e51820e56d5d33130fdea66fe0..152e6c3af1a0541a1dd96e93dfed0aeb450d1311 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/CorrelatorStep.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/CorrelatorStep.h
@@ -16,7 +16,7 @@
 //# You should have received a copy of the GNU General Public License along
 //# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 //#
-//# $Id$
+//# $Id: CorrelatorStep.h 42125 2019-03-08 13:17:27Z mol $
 
 #ifndef LOFAR_GPUPROC_CUDA_CORRELATOR_STEP_H
 #define LOFAR_GPUPROC_CUDA_CORRELATOR_STEP_H
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/KernelFactories.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/KernelFactories.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/KernelFactories.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/KernelFactories.cc
diff --git a/RTCP/Cobalt/GPUProc/src/SubbandProcs/KernelFactories.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/KernelFactories.h
index 5990243f2e857132790dbbdacd2d7e581ecb42f8..c58eaaf914f60d33d3d8b718175b779d5581cc70 100644
--- a/RTCP/Cobalt/GPUProc/src/SubbandProcs/KernelFactories.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/KernelFactories.h
@@ -1,6 +1,6 @@
 //# KernelFactories.h
 //#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +19,35 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_FACTORIES_H
+#define LOFAR_GPUPROC_CUDA_BEAM_FORMER_FACTORIES_H
 
-#ifndef LOFAR_GPUPROC_BEAM_FORMER_FACTORIES_H
-#define LOFAR_GPUPROC_BEAM_FORMER_FACTORIES_H
+#include <CoInterface/Parset.h>
+#include <CoInterface/SmartPtr.h>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include "CorrelatorStep.h"
+#include "BeamFormerPreprocessingStep.h"
+#include "BeamFormerCoherentStep.h"
+#include "BeamFormerIncoherentStep.h"
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/SubbandProcs/KernelFactories.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/SubbandProcs/KernelFactories.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    struct KernelFactories
+    {
+      KernelFactories(const Parset &ps, 
+                            size_t nrSubbandsPerSubbandProc = 1);
 
-#endif
+      SmartPtr<CorrelatorStep::Factories> correlator;
+
+      SmartPtr<BeamFormerPreprocessingStep::Factories> preprocessing;
 
+      SmartPtr<BeamFormerCoherentStep::Factories> coherentStokes;
+      SmartPtr<BeamFormerIncoherentStep::Factories> incoherentStokes;
+    };
+
+  }
+}
+
+#endif
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/ProcessStep.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/ProcessStep.h
similarity index 96%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/ProcessStep.h
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/ProcessStep.h
index 63ed74a484c0e26e788636737c52be38afe17630..195fd34108ac320e1d2a49f0b019693570a7d1b3 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/ProcessStep.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/ProcessStep.h
@@ -16,7 +16,7 @@
 //# You should have received a copy of the GNU General Public License along
 //# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 //#
-//# $Id$
+//# $Id: ProcessStep.h 29848 2014-07-31 09:32:20Z mol $
 
 #ifndef LOFAR_GPUPROC_CUDA_PROCESS_STEP_H
 #define LOFAR_GPUPROC_CUDA_PROCESS_STEP_H
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProc.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProc.cc
similarity index 90%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProc.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProc.cc
index 4afaa20123c7c54840ec5905fb1156f1b5a09c31..4a35c04a6db39bd0b6c48c897810acd1bf7dabbe 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProc.cc
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProc.cc
@@ -45,7 +45,7 @@ namespace LOFAR
       size_t nrSubbandsPerSubbandProc)
     :
       inputPool("SubbandProc::inputPool", ps.settings.realTime),
-      processPool("SubbandProc::processPool", ps.settings.realTime),
+      processPool("SubbandProc::processPool", ps.settings.realTime, nrSubbandsPerSubbandProc),
       outputPool("SubbandProc::outputPool", ps.settings.realTime),
 
       ps(ps),
@@ -136,10 +136,22 @@ namespace LOFAR
       // put enough objects in the outputPool to operate
       for (size_t i = 0; i < nrOutputElements(); ++i)
       {
-        outputPool.free.append(new SubbandProcOutputData(ps, context));
+        outputPool.free.append(new SubbandProcOutputData(ps, context), false);
       }
     }
 
+    SubbandProc::~SubbandProc()
+    {
+      const double averageGPURunTime = totalCounter.getStats().mean() / 1000.0; /* counters are in ms */
+      const double blockDuration =  ps.settings.blockDuration();
+
+      // Report how our processing relates to real time
+      LOG_INFO_STR("[GPU] Processing ran at " << (100.0 * (averageGPURunTime * nrSubbandsPerSubbandProc) / blockDuration) << "% of real time (GPU required " << averageGPURunTime << "s to process " << blockDuration << "s of data for one subband, and needs to process " << nrSubbandsPerSubbandProc << " subbands per GPU).");
+
+      // Report how many subbands would yield up to 99% load
+      LOG_INFO_STR("[GPU] I can process at most  " << static_cast<int>(floor(0.99 * blockDuration / averageGPURunTime)) << " subbands per GPU at real time.");
+    }
+
 
     size_t SubbandProc::nrOutputElements() const
     {
diff --git a/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProc.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProc.h
index a988863c3c53cb10d3b7731b4bdc05258a7bee81..f1b70855fc72abadc3cc927506437838ff63e7f0 100644
--- a/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProc.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProc.h
@@ -1,6 +1,5 @@
 //# SubbandProc.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,144 @@
 //#
 //# $Id$
 
+#ifndef LOFAR_GPUPROC_CUDA_SUBBAND_PROC_H
+#define LOFAR_GPUPROC_CUDA_SUBBAND_PROC_H
+
+#include <string>
+#include <map>
+#include <complex>
+#include <memory>
+
+#include <boost/shared_ptr.hpp>
+#include <Common/LofarLogger.h>
+#include <CoInterface/BudgetTimer.h>
+#include <CoInterface/CorrelatedData.h>
+#include <CoInterface/Parset.h>
+#include <CoInterface/Pool.h>
+#include <CoInterface/SmartPtr.h>
+#include <CoInterface/BlockID.h>
+#include <CoInterface/Config.h>
+#include <CoInterface/SubbandMetaData.h>
+#include <GPUProc/PerformanceCounter.h>
+#include <GPUProc/gpu_wrapper.h>
+#include <GPUProc/MultiDimArrayHostBuffer.h>
+
+#include "SubbandProcInputData.h"
+#include "SubbandProcOutputData.h"
+#include "CorrelatorStep.h"
+#include "BeamFormerPreprocessingStep.h"
+#include "BeamFormerCoherentStep.h"
+#include "BeamFormerIncoherentStep.h"
+
 // \file
-// Include the right GPU API include with our options.
+// TODO: Update documentation
 
-#ifndef LOFAR_GPUPROC_SUBBAND_PROC_H
-#define LOFAR_GPUPROC_SUBBAND_PROC_H
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    //# Forward declarations
+    struct KernelFactories;
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+    /*
+     * The SubbandProc does the following transformation:
+     *   SubbandProcInputData -> SubbandProcOutputData
+     *
+     * The SubbandProcInputData represents one block of one subband
+     * of input data, and the SubbandProcOutputData (for example) the complex
+     * visibilities of such a block.
+     *
+     * For both input and output, a fixed set of objects is created,
+     * tied to the GPU specific for the SubbandProc, for increased
+     * performance. The objects are recycled by using Pool objects.
+     *
+     * The data flows as follows:
+     *
+     *   // Fetch the next input object to fill
+     *   SmartPtr<SubbandProcInputData> input = queue.inputPool.free.remove();
+     *
+     *   // Provide input
+     *   receiveInput(input);
+     *
+     *   // Annotate input
+     *   input->blockID.block = block;
+     *   input->blockID.globalSubbandIdx = subband;
+     *   input->blockID.localSubbandIdx  = subbandIdx;
+     *
+     *   // Fetch the next output object to fill
+     *   SmartPtr<SubbandProcOutputData> output = queue.outputPool.free.remove();
+     *
+     *   // Process block
+     *   queue.processSubband(input, output);
+     *
+     *   // Give back input and output objects to queue
+     *   queue.inputPool.free.append(input);
+     *   queue.outputPool.free.append(output);
+     *
+     *   The queue.inputPool.filled and queue.outputPool.filled can be used to
+     *   temporarily store filled input and output objects. Such is needed to
+     *   obtain parallellism (i.e. read/process/write in separate threads).
+     */
+    class SubbandProc {
+    public:
+      SubbandProc(const Parset &ps, gpu::Context &context,
+                  KernelFactories &factories,
+                  size_t nrSubbandsPerSubbandProc = 1);
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/SubbandProcs/SubbandProc.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/SubbandProcs/SubbandProc.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+      ~SubbandProc();
+
+      // A pool of input data, to allow items to be filled and
+      // computed on in parallel.
+      Pool<SubbandProcInputData> inputPool;
+
+      // A pool of input data, that has been pre processed.
+      Pool<SubbandProcInputData> processPool;
+
+      // A pool of output data, to allow items to be filled
+      // and written in parallel.
+      Pool<SubbandProcOutputData> outputPool;
+
+      // Correlate the data found in the input data buffer
+      void processSubband(SubbandProcInputData &input, SubbandProcOutputData &output);
+
+      // Do post processing on the CPU.
+      void postprocessSubband(SubbandProcOutputData &output);
+
+    protected:
+      const Parset &ps;
+      const size_t nrSubbandsPerSubbandProc;
+
+      gpu::Stream queue;
+
+      // The previously processed SAP/block, or -1 if nothing has been
+      // processed yet. Used in order to determine if new delays have
+      // to be uploaded.
+      ssize_t prevBlock;
+      signed int prevSAP;
+
+      // @{
+      // Device memory buffers. These buffers are used interleaved. For details,
+      // please refer to the document bf-pipeline.txt in the directory
+      // GPUProc/doc.
+      boost::shared_ptr<gpu::DeviceMemory> devA;
+      boost::shared_ptr<gpu::DeviceMemory> devB;
+      // @}
+
+      PerformanceCounter totalCounter;
+      PerformanceCounter inputCounter;
+      BudgetTimer processCPUTimer;
+
+      std::unique_ptr<CorrelatorStep> correlatorStep;
+      std::unique_ptr<BeamFormerPreprocessingStep> preprocessingStep;
+      std::unique_ptr<BeamFormerCoherentStep> coherentStep;
+      std::unique_ptr<BeamFormerIncoherentStep> incoherentStep;
+
+      // Returns the number of output elements to create to get a smooth
+      // running pipeline.
+      size_t nrOutputElements() const;
+    };
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcInputData.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcInputData.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcInputData.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcInputData.cc
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcInputData.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcInputData.h
similarity index 98%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcInputData.h
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcInputData.h
index a002bf5b75111b862dfdba844e2e234454fb0270..d36c27877393bf6644f4f1bdbab12baa81147f66 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcInputData.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcInputData.h
@@ -16,7 +16,7 @@
 //# You should have received a copy of the GNU General Public License along
 //# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 //#
-//# $Id$
+//# $Id: SubbandProcInputData.h 29848 2014-07-31 09:32:20Z mol $
 
 #ifndef LOFAR_GPUPROC_CUDA_SUBBAND_PROC_INPUT_DATA_H
 #define LOFAR_GPUPROC_CUDA_SUBBAND_PROC_INPUT_DATA_H
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcOutputData.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcOutputData.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcOutputData.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcOutputData.cc
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcOutputData.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcOutputData.h
similarity index 96%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcOutputData.h
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcOutputData.h
index 5f29ad3ea2cc5a7a0329c3c1be6c5c0bf0847702..11f5225727ac3d5622307fc15d54e65e2d151f58 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProcOutputData.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/SubbandProcOutputData.h
@@ -16,7 +16,7 @@
 //# You should have received a copy of the GNU General Public License along
 //# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 //#
-//# $Id$
+//# $Id: SubbandProcOutputData.h 30219 2014-10-15 12:15:41Z mol $
 
 #ifndef LOFAR_GPUPROC_CUDA_SUBBAND_PROC_OUTPUT_DATA_H
 #define LOFAR_GPUPROC_CUDA_SUBBAND_PROC_OUTPUT_DATA_H
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/UHEP_SubbandProc.cc b/RTCP/Cobalt/GPUProc/src/SubbandProcs/UHEP_SubbandProc.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/UHEP_SubbandProc.cc
rename to RTCP/Cobalt/GPUProc/src/SubbandProcs/UHEP_SubbandProc.cc
diff --git a/RTCP/Cobalt/GPUProc/src/SubbandProcs/UHEP_SubbandProc.h b/RTCP/Cobalt/GPUProc/src/SubbandProcs/UHEP_SubbandProc.h
index 9f7ebd9c4fdf1460a9fd59642e18cd17732b7dbe..03169c57f7175a537efe47ffa7dba49fa05c0507 100644
--- a/RTCP/Cobalt/GPUProc/src/SubbandProcs/UHEP_SubbandProc.h
+++ b/RTCP/Cobalt/GPUProc/src/SubbandProcs/UHEP_SubbandProc.h
@@ -1,6 +1,5 @@
 //# UHEP_SubbandProc.h
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
+//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
 //# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
 //#
 //# This file is part of the LOFAR software suite.
@@ -19,23 +18,52 @@
 //#
 //# $Id$
 
-// \file
-// Include the right GPU API include with our options.
+#ifndef LOFAR_GPUPROC_CUDA_UHEP_SUBBAND_PROC_H
+#define LOFAR_GPUPROC_CUDA_UHEP_SUBBAND_PROC_H
 
-#ifndef LOFAR_GPUPROC_UHEP_SUBBAND_PROC_H
-#define LOFAR_GPUPROC_UHEP_SUBBAND_PROC_H
+#include <complex>
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <Common/LofarLogger.h>
+#include <CoInterface/Parset.h>
 
-#if defined (USE_CUDA)
-# include <GPUProc/cuda/SubbandProcs/UHEP_SubbandProc.h>
-#elif defined (USE_OPENCL)
-# include <GPUProc/opencl/SubbandProcs/UHEP_SubbandProc.h>
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+#include <GPUProc/global_defines.h>
+#include <GPUProc/MultiDimArrayHostBuffer.h>
+#include <GPUProc/Pipelines/UHEP_Pipeline.h>
+#include <GPUProc/Kernels/UHEP_TriggerKernel.h>
+#include "SubbandProc.h"
+
+namespace LOFAR
+{
+  namespace Cobalt
+  {
+    class UHEP_SubbandProc : public SubbandProc
+    {
+    public:
+      UHEP_SubbandProc(UHEP_Pipeline &, unsigned queueNumber);
+
+      void doWork(const float *delaysAtBegin, const float *delaysAfterEnd, const float *phaseOffsets);
+
+      UHEP_Pipeline       &pipeline;
+      gpu::Event inputSamplesEvent, beamFormerWeightsEvent;
+
+      gpu::DeviceMemory devBuffers[2];
+      gpu::DeviceMemory devInputSamples;
+      MultiArrayHostBuffer<char, 5> hostInputSamples;
+
+      gpu::DeviceMemory devBeamFormerWeights;
+      MultiArrayHostBuffer<std::complex<float>, 3> hostBeamFormerWeights;
+
+      gpu::DeviceMemory devComplexVoltages;
+      gpu::DeviceMemory devReverseSubbandMapping;
+      gpu::DeviceMemory devFFTedData;
+      gpu::DeviceMemory devInvFIRfilteredData;
+      gpu::DeviceMemory devInvFIRfilterWeights;
+
+      gpu::DeviceMemory devTriggerInfo;
+      MultiArraySharedBuffer<TriggerInfo, 1> hostTriggerInfo;
+    };
+  }
+}
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/backward/CL/cl.hpp b/RTCP/Cobalt/GPUProc/src/backward/CL/cl.hpp
deleted file mode 100644
index 8cd2f1c6e062dc9ccb12c99ea1eef8b367b223f6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/backward/CL/cl.hpp
+++ /dev/null
@@ -1,75025 +0,0 @@
-//#include <iostream>
-/*******************************************************************************
- * Copyright (c) 2008-2011 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- ******************************************************************************/
-
-/*! \file
- *
- *   \brief C++ bindings for OpenCL 1.0 (rev 48) and OpenCL 1.1 (rev 33)    
- *   \author Benedict R. Gaster and Laurent Morichetti
- *   
- *   Additions and fixes from Brian Cole, March 3rd 2010.
- *   
- *   \version 1.1
- *   \date June 2010
- *
- *   Optional extension support
- *
- *         cl
- *         cl_ext_device_fission
- *				#define USE_CL_DEVICE_FISSION
- */
-
-/*! \mainpage
- * \section intro Introduction
- * For many large applications C++ is the language of choice and so it seems
- * reasonable to define C++ bindings for OpenCL.
- *
- *
- * The interface is contained with a single C++ header file \em cl.hpp and all
- * definitions are contained within the namespace \em cl. There is no additional
- * requirement to include \em cl.h and to use either the C++ or original C
- * bindings it is enough to simply include \em cl.hpp.
- *
- * The bindings themselves are lightweight and correspond closely to the
- * underlying C API. Using the C++ bindings introduces no additional execution
- * overhead.
- *
- * For detail documentation on the bindings see:
- *
- * The OpenCL C++ Wrapper API 1.1 (revision 04)
- *  http://www.khronos.org/registry/cl/specs/opencl-cplusplus-1.1.pdf
- *
- * \section example Example
- *
- * The following example shows a general use case for the C++
- * bindings, including support for the optional exception feature and
- * also the supplied vector and string classes, see following sections for
- * decriptions of these features.
- *
- * \code
- * #define __CL_ENABLE_EXCEPTIONS
- * 
- * #if defined(__APPLE__) || defined(__MACOSX)
- * #include <OpenCL/cl.hpp>
- * #else
- * #include <CL/cl.hpp>
- * #endif
- * #include <cstdio>
- * #include <cstdlib>
- * #include <iostream>
- * 
- *  const char * helloStr  = "__kernel void "
- *                           "hello(void) "
- *                           "{ "
- *                           "  "
- *                           "} ";
- * 
- *  int
- *  main(void)
- *  {
- *     cl_int err = CL_SUCCESS;
- *     try {
- *
- *       std::vector<cl::Platform> platforms;
- *       cl::Platform::get(&platforms);
- *       if (platforms.size() == 0) {
- *           std::cout << "Platform size 0\n";
- *           return -1;
- *       }
- *
- *       cl_context_properties properties[] = 
- *          { CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(), 0};
- *       cl::Context context(CL_DEVICE_TYPE_CPU, properties); 
- * 
- *       std::vector<cl::Device> devices = context.getInfo<CL_CONTEXT_DEVICES>();
- * 
- *       cl::Program::Sources source(1,
- *           std::make_pair(helloStr,strlen(helloStr)));
- *       cl::Program program_ = cl::Program(context, source);
- *       program_.build(devices);
- * 
- *       cl::Kernel kernel(program_, "hello", &err);
- * 
- *       cl::Event event;
- *       cl::CommandQueue queue(context, devices[0], 0, &err);
- *       queue.enqueueNDRangeKernel(
- *           kernel, 
- *           cl::NullRange, 
- *           cl::NDRange(4,4),
- *           cl::NullRange,
- *           NULL,
- *           &event); 
- * 
- *       event.wait();
- *     }
- *     catch (cl::Error err) {
- *        std::cerr 
- *           << "ERROR: "
- *           << err.what()
- *           << "("
- *           << err.err()
- *           << ")"
- *           << std::endl;
- *     }
- * 
- *    return EXIT_SUCCESS;
- *  }
- * 
- * \endcode
- *
- */
-#ifndef CL_HPP_
-#define CL_HPP_
-
-#ifdef _WIN32
-#include <windows.h>
-#include <malloc.h>
-#pragma push_macro("max")
-#undef max
-#if defined(USE_DX_INTEROP)
-#include <CL/cl_d3d10.h>
-#endif
-#endif // _WIN32
-
-// 
-#if defined(USE_CL_DEVICE_FISSION)
-#include <CL/cl_ext.h>
-#endif
-
-#if defined(__APPLE__) || defined(__MACOSX)
-#include <OpenGL/OpenGL.h>
-#include <OpenCL/opencl.h>
-#include <libkern/OSAtomic.h>
-#else
-#include <GL/gl.h>
-#include <CL/opencl.h>
-#endif // !__APPLE__
-
-#if !defined(CL_CALLBACK)
-#define CL_CALLBACK
-#endif //CL_CALLBACK
-
-#include <utility>
-#include <limits>
-
-#if !defined(__NO_STD_VECTOR)
-#include <vector>
-#endif
-
-#if !defined(__NO_STD_STRING)
-#include <string>
-#endif 
-
-#if defined(linux) || defined(__APPLE__) || defined(__MACOSX)
-# include <alloca.h>
-#endif // linux
-
-#include <cstring>
-
-#if defined(_WIN32)
-#include <functional>
-#else
-#include <tr1/functional>
-#endif
-
-#include "Common/Exception.h"
-
-/*! \namespace cl
- *
- * \brief The OpenCL C++ bindings are defined within this namespace.
- *
- */
-namespace cl {
-
-#define __INIT_CL_EXT_FCN_PTR(name) \
-    if(!pfn_##name) { \
-        pfn_##name = (PFN_##name) \
-            clGetExtensionFunctionAddress(#name); \
-        if(!pfn_##name) { \
-        } \
-    }
-
-class Program;
-class Device;
-class Context;
-class CommandQueue;
-class Memory;
-
-#if defined(__CL_ENABLE_EXCEPTIONS)
-//#include <exception>
-/*! \class Error
- * \brief Exception class
- */
-//class Error : public std::exception
-class Error : public LOFAR::Exception
-{
-private:
-    cl_int err_;
-    const char * errStr_;
-public:
-    /*! Create a new CL error exception for a given error code
-     *  and corresponding message.
-     */
-    //Error(cl_int err, const char * errStr = NULL) : err_(err), errStr_(errStr)
-    Error(cl_int err, const char * errStr = NULL) :
-      LOFAR::Exception(errStr ? errStr : "", THROW_ARGS),
-      err_(err), errStr_(errStr)
-    {}
-
-    ~Error() throw() {}
-
-    /*! \brief Get error string associated with exception
-     *
-     * \return A memory pointer to the error message string.
-     */
-    virtual const char * what() const throw ()
-    {
-        if (errStr_ == NULL) {
-            return "empty";
-        }
-        else {
-            return errStr_;
-        }
-    }
-
-    /*! \brief Get error code associated with exception
-     *
-     *  \return The error code.
-     */
-    cl_int err(void) const { return err_; }
-};
-
-#define __ERR_STR(x) #x
-#else
-#define __ERR_STR(x) NULL
-#endif // __CL_ENABLE_EXCEPTIONS
-
-//! \cond DOXYGEN_DETAIL
-#if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
-#define __GET_DEVICE_INFO_ERR               __ERR_STR(clGetDeviceInfo)
-#define __GET_PLATFORM_INFO_ERR             __ERR_STR(clGetPlatformInfo)
-#define __GET_DEVICE_IDS_ERR                __ERR_STR(clGetDeviceIDs)
-#define __GET_PLATFORM_IDS_ERR              __ERR_STR(clGetPlatformIDs)
-#define __GET_CONTEXT_INFO_ERR              __ERR_STR(clGetContextInfo)
-#define __GET_EVENT_INFO_ERR                __ERR_STR(clGetEventInfo)
-#define __GET_EVENT_PROFILE_INFO_ERR        __ERR_STR(clGetEventProfileInfo)
-#define __GET_MEM_OBJECT_INFO_ERR           __ERR_STR(clGetMemObjectInfo)
-#define __GET_IMAGE_INFO_ERR                __ERR_STR(clGetImageInfo)
-#define __GET_SAMPLER_INFO_ERR              __ERR_STR(clGetSamplerInfo)
-#define __GET_KERNEL_INFO_ERR               __ERR_STR(clGetKernelInfo)
-#define __GET_KERNEL_WORK_GROUP_INFO_ERR    __ERR_STR(clGetKernelWorkGroupInfo)
-#define __GET_PROGRAM_INFO_ERR              __ERR_STR(clGetProgramInfo)
-#define __GET_PROGRAM_BUILD_INFO_ERR        __ERR_STR(clGetProgramBuildInfo)
-#define __GET_COMMAND_QUEUE_INFO_ERR        __ERR_STR(clGetCommandQueueInfo)
-
-#define __CREATE_CONTEXT_ERR                __ERR_STR(clCreateContext)
-#define __CREATE_CONTEXT_FROM_TYPE_ERR      __ERR_STR(clCreateContextFromType)
-#define __GET_SUPPORTED_IMAGE_FORMATS_ERR   __ERR_STR(clGetSupportedImageFormats)
-
-#define __CREATE_BUFFER_ERR                 __ERR_STR(clCreateBuffer)
-#define __CREATE_SUBBUFFER_ERR              __ERR_STR(clCreateSubBuffer)
-#define __CREATE_GL_BUFFER_ERR              __ERR_STR(clCreateFromGLBuffer)
-#define __CREATE_GL_RENDER_BUFFER_ERR       __ERR_STR(clCreateFromGLBuffer)
-#define __CREATE_GL_TEXTURE_2D_ERR          __ERR_STR(clCreateFromGLTexture2D)
-#define __CREATE_GL_TEXTURE_3D_ERR          __ERR_STR(clCreateFromGLTexture3D)
-#define __GET_GL_OBJECT_INFO_ERR            __ERR_STR(clGetGLObjectInfo)
-#define __CREATE_IMAGE2D_ERR                __ERR_STR(clCreateImage2D)
-#define __CREATE_IMAGE3D_ERR                __ERR_STR(clCreateImage3D)
-#define __CREATE_SAMPLER_ERR                __ERR_STR(clCreateSampler)
-#define __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR __ERR_STR(clSetMemObjectDestructorCallback)
-
-#define __CREATE_USER_EVENT_ERR             __ERR_STR(clCreateUserEvent)
-#define __SET_USER_EVENT_STATUS_ERR         __ERR_STR(clSetUserEventStatus)
-#define __SET_EVENT_CALLBACK_ERR            __ERR_STR(clSetEventCallback)
-#define __WAIT_FOR_EVENTS_ERR               __ERR_STR(clWaitForEvents)
-
-#define __CREATE_KERNEL_ERR                 __ERR_STR(clCreateKernel)
-#define __SET_KERNEL_ARGS_ERR               __ERR_STR(clSetKernelArg)
-#define __CREATE_PROGRAM_WITH_SOURCE_ERR    __ERR_STR(clCreateProgramWithSource)
-#define __CREATE_PROGRAM_WITH_BINARY_ERR    __ERR_STR(clCreateProgramWithBinary)
-#define __BUILD_PROGRAM_ERR                 __ERR_STR(clBuildProgram)
-#define __CREATE_KERNELS_IN_PROGRAM_ERR     __ERR_STR(clCreateKernelsInProgram)
-
-#define __CREATE_COMMAND_QUEUE_ERR          __ERR_STR(clCreateCommandQueue)
-#define __SET_COMMAND_QUEUE_PROPERTY_ERR    __ERR_STR(clSetCommandQueueProperty)
-#define __ENQUEUE_READ_BUFFER_ERR           __ERR_STR(clEnqueueReadBuffer)
-#define __ENQUEUE_READ_BUFFER_RECT_ERR      __ERR_STR(clEnqueueReadBufferRect)
-#define __ENQUEUE_WRITE_BUFFER_ERR          __ERR_STR(clEnqueueWriteBuffer)
-#define __ENQUEUE_WRITE_BUFFER_RECT_ERR     __ERR_STR(clEnqueueWriteBufferRect)
-#define __ENQEUE_COPY_BUFFER_ERR            __ERR_STR(clEnqueueCopyBuffer)
-#define __ENQEUE_COPY_BUFFER_RECT_ERR       __ERR_STR(clEnqueueCopyBufferRect)
-#define __ENQUEUE_READ_IMAGE_ERR            __ERR_STR(clEnqueueReadImage)
-#define __ENQUEUE_WRITE_IMAGE_ERR           __ERR_STR(clEnqueueWriteImage)
-#define __ENQUEUE_COPY_IMAGE_ERR            __ERR_STR(clEnqueueCopyImage)
-#define __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR  __ERR_STR(clEnqueueCopyImageToBuffer)
-#define __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR  __ERR_STR(clEnqueueCopyBufferToImage)
-#define __ENQUEUE_MAP_BUFFER_ERR            __ERR_STR(clEnqueueMapBuffer)
-#define __ENQUEUE_MAP_IMAGE_ERR             __ERR_STR(clEnqueueMapImage)
-#define __ENQUEUE_UNMAP_MEM_OBJECT_ERR      __ERR_STR(clEnqueueUnMapMemObject)
-#define __ENQUEUE_NDRANGE_KERNEL_ERR        __ERR_STR(clEnqueueNDRangeKernel)
-#define __ENQUEUE_TASK_ERR                  __ERR_STR(clEnqueueTask)
-#define __ENQUEUE_NATIVE_KERNEL             __ERR_STR(clEnqueueNativeKernel)
-#define __ENQUEUE_MARKER_ERR                __ERR_STR(clEnqueueMarker)
-#define __ENQUEUE_WAIT_FOR_EVENTS_ERR       __ERR_STR(clEnqueueWaitForEvents)
-#define __ENQUEUE_BARRIER_ERR               __ERR_STR(clEnqueueBarrier)
-
-#define __ENQUEUE_ACQUIRE_GL_ERR            __ERR_STR(clEnqueueAcquireGLObjects)
-#define __ENQUEUE_RELEASE_GL_ERR            __ERR_STR(clEnqueueReleaseGLObjects)
-
-#define __UNLOAD_COMPILER_ERR               __ERR_STR(clUnloadCompiler)
-
-#define __FLUSH_ERR                         __ERR_STR(clFlush)
-#define __FINISH_ERR                        __ERR_STR(clFinish)
-
-#define __CREATE_SUB_DEVICES                __ERR_STR(clCreateSubDevicesEXT)
-#endif // __CL_USER_OVERRIDE_ERROR_STRINGS
-//! \endcond
-
-/*! \class string
- * \brief Simple string class, that provides a limited subset of std::string
- * functionality but avoids many of the issues that come with that class.
- */
-class string
-{
-private:
-    ::size_t size_;
-    char * str_;
-public:
-    string(void) : size_(0), str_(NULL)
-    {
-    }
-
-    string(char * str, ::size_t size) :
-        size_(size),
-        str_(NULL)
-    {
-        str_ = new char[size_+1];
-        if (str_ != NULL) {
-            memcpy(str_, str, size_  * sizeof(char));
-            str_[size_] = '\0';
-        }
-        else {
-            size_ = 0;
-        }
-    }
-
-    string(char * str) :
-        str_(NULL)
-    {
-        size_= ::strlen(str);
-        str_ = new char[size_ + 1];
-        if (str_ != NULL) {
-            memcpy(str_, str, (size_ + 1) * sizeof(char));
-        }
-        else {
-            size_ = 0;
-        }
-    }
-
-    string& operator=(const string& rhs)
-    {
-        if (this == &rhs) {
-            return *this;
-        }
-
-        if (rhs.size_ == 0 || rhs.str_ == NULL) {
-            size_ = 0;
-            str_  = NULL;
-        } 
-        else {
-            size_ = rhs.size_;
-            str_ = new char[size_ + 1];
-            if (str_ != NULL) {
-                memcpy(str_, rhs.str_, (size_ + 1) * sizeof(char));
-            }
-            else {
-                size_ = 0;
-            }
-        }
-
-        return *this;
-    }
-
-    string(const string& rhs)
-    {
-        *this = rhs;
-    }
-
-    ~string()
-    {
-        if (str_ != NULL) {
-            delete[] str_;
-        }
-    }
-
-    ::size_t size(void) const   { return size_; }
-    ::size_t length(void) const { return size(); }
-
-    const char * c_str(void) const { return (str_) ? str_ : "";}
-};
-
-#if !defined(__USE_DEV_STRING) && !defined(__NO_STD_STRING)
-#include <string>
-typedef std::string STRING_CLASS;
-#elif !defined(__USE_DEV_STRING) 
-typedef cl::string STRING_CLASS;
-#endif
-
-#if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR)
-#include <vector>
-#define VECTOR_CLASS std::vector
-#elif !defined(__USE_DEV_VECTOR) 
-#define VECTOR_CLASS cl::vector 
-#endif
-
-#if !defined(__MAX_DEFAULT_VECTOR_SIZE)
-#define __MAX_DEFAULT_VECTOR_SIZE 10
-#endif
-
-/*! \class vector
- * \brief Fixed sized vector implementation that mirroring 
- * std::vector functionality.
- */
-template <typename T, unsigned int N = __MAX_DEFAULT_VECTOR_SIZE>
-class vector
-{
-private:
-    T data_[N];
-    unsigned int size_;
-    bool empty_;
-public:
-    vector() : 
-        size_(static_cast<unsigned int>(-1)),
-        empty_(true)
-    {}
-
-    ~vector() {}
-
-    unsigned int size(void) const
-    {
-        return size_ + 1;
-    }
-
-    void clear()
-    {
-        size_ = -1;
-        empty_ = true;
-    }
-
-    void push_back (const T& x)
-    { 
-        if (size() < N) {
-            size_++;  
-            data_[size_] = x;
-            empty_ = false;
-        }
-    }
-
-    void pop_back(void)
-    {
-        if (!empty_) {
-            data_[size_].~T();
-            size_--;
-            if (size_ == -1) {
-                empty_ = true;
-            }
-        }
-    }
-  
-    vector(const vector<T, N>& vec) : 
-        size_(vec.size_),
-        empty_(vec.empty_)
-    {
-        if (!empty_) {
-            memcpy(&data_[0], &vec.data_[0], size() * sizeof(T));
-        }
-    } 
-
-    vector(unsigned int size, const T& val = T()) :
-        size_(-1),
-        empty_(true)
-    {
-        for (unsigned int i = 0; i < size; i++) {
-            push_back(val);
-        }
-    }
-
-    vector<T, N>& operator=(const vector<T, N>& rhs)
-    {
-        if (this == &rhs) {
-            return *this;
-        }
-
-        size_  = rhs.size_;
-        empty_ = rhs.empty_;
-
-        if (!empty_) {	
-            memcpy(&data_[0], &rhs.data_[0], size() * sizeof(T));
-        }
-    
-        return *this;
-    }
-
-    bool operator==(vector<T,N> &vec)
-    {
-        if (empty_ && vec.empty_) {
-            return true;
-        }
-
-        if (size() != vec.size()) {
-            return false;
-        }
-
-        return memcmp(&data_[0], &vec.data_[0], size() * sizeof(T)) == 0 ? true : false;
-    }
-  
-    operator T* ()             { return data_; }
-    operator const T* () const { return data_; }
-   
-    bool empty (void) const
-    {
-        return empty_;
-    }
-  
-    unsigned int max_size (void) const
-    {
-        return N;
-    }
-
-    unsigned int capacity () const
-   {
-        return sizeof(T) * N;
-    }
-
-    T& operator[](int index)
-    {
-        return data_[index];
-    }
-  
-    T operator[](int index) const
-    {
-        return data_[index];
-    }
-  
-    template<class I>
-    void assign(I start, I end)
-    {
-        clear();   
-        while(start < end) {
-            push_back(*start);
-            start++;
-        }
-    }
-
-    /*! \class iterator
-     * \brief Iterator class for vectors
-     */
-    class iterator
-    {
-    private:
-        vector<T,N> vec_;
-        int index_;
-        bool initialized_;
-    public:
-        iterator(void) : 
-            index_(-1),
-            initialized_(false)
-        {
-            index_ = -1;
-            initialized_ = false;
-        }
-
-        ~iterator(void) {}
-
-        static iterator begin(vector<T,N> &vec)
-        {
-            iterator i;
-
-            if (!vec.empty()) {
-                i.index_ = 0;
-            }
-
-            i.vec_ = vec;
-            i.initialized_ = true;
-            return i;
-        }
-
-        static iterator end(vector<T,N> &vec)
-        {
-            iterator i;
-
-            if (!vec.empty()) {
-                i.index_ = vec.size();
-            }
-            i.vec_ = vec;
-            i.initialized_ = true;
-            return i;
-        }
-    
-        bool operator==(iterator i)
-        {
-            return ((vec_ == i.vec_) && 
-                    (index_ == i.index_) && 
-                    (initialized_ == i.initialized_));
-        }
-
-        bool operator!=(iterator i)
-        {
-            return (!(*this==i));
-        }
-
-        void operator++()
-        {
-            index_++;
-        }
-
-        void operator++(int x)
-        {
-            index_ += x;
-        }
-
-        void operator--()
-        {
-            index_--;
-        }
-
-        void operator--(int x)
-        {
-            index_ -= x;
-        }
-
-        T operator *()
-        {
-            return vec_[index_];
-        }
-    };
-
-    iterator begin(void)
-    {
-        return iterator::begin(*this);
-    }
-
-    iterator end(void)
-    {
-        return iterator::end(*this);
-    }
-
-    T& front(void)
-    {
-        return data_[0];
-    }
-
-    T& back(void)
-    {
-        return data_[size_];
-    }
-
-    const T& front(void) const
-    {
-        return data_[0];
-    }
-
-    const T& back(void) const
-    {
-        return data_[size_];
-    }
-};  
-
-namespace detail {
-#define __DEFAULT_NOT_INITIALIZED 1
-#define __DEFAULT_BEING_INITIALIZED 2
-#define __DEFAULT_INITIALIZED 4
-
-    /*
-     * Compare and exchange primitives are needed for handling of defaults
-    */
-    inline int compare_exchange(volatile int * dest, int exchange, int comparand)
-    {
-#ifdef _WIN32
-        return (int)(InterlockedCompareExchange(
-           (volatile long*)dest, 
-           (long)exchange, 
-           (long)comparand));
-#elif defined(__APPLE__) || defined(__MACOSX)
-		return OSAtomicOr32Orig((uint32_t)exchange, (volatile uint32_t*)dest);
-#else // !_WIN32 || defined(__APPLE__) || defined(__MACOSX)
-        return (__sync_val_compare_and_swap(
-            dest, 
-            comparand, 
-            exchange));
-#endif // !_WIN32
-    }
-}; // namespace detail
-
-    
-/*!
- * \brief size_t class used to interface between C++ and
- * OpenCL C calls that require arrays of size_t values, who's
- * size is known statically.
- */
-template <int N>
-struct size_t : public cl::vector< ::size_t, N> { };
-
-namespace detail {
-
-// GetInfo help struct
-template <typename Functor, typename T>
-struct GetInfoHelper
-{
-    static cl_int
-    get(Functor f, cl_uint name, T* param)
-    {
-        return f(name, sizeof(T), param, NULL);
-    }
-};
-
-// Specialized GetInfoHelper for VECTOR_CLASS params
-template <typename Func, typename T>
-struct GetInfoHelper<Func, VECTOR_CLASS<T> >
-{
-    static cl_int get(Func f, cl_uint name, VECTOR_CLASS<T>* param)
-    {
-        ::size_t required;
-        cl_int err = f(name, 0, NULL, &required);
-        if (err != CL_SUCCESS) {
-            return err;
-        }
-
-        T* value = (T*) alloca(required);
-        err = f(name, required, value, NULL);
-        if (err != CL_SUCCESS) {
-            return err;
-        }
-
-        param->assign(&value[0], &value[required/sizeof(T)]);
-        return CL_SUCCESS;
-    }
-};
-
-// Specialized for getInfo<CL_PROGRAM_BINARIES>
-template <typename Func>
-struct GetInfoHelper<Func, VECTOR_CLASS<char *> >
-{
-    static cl_int
-    get(Func f, cl_uint name, VECTOR_CLASS<char *>* param)
-    {
-      ::size_t nDevices;
-      ::size_t * binary_sizes;
-      char ** values;
-
-      cl_int err = f(CL_PROGRAM_NUM_DEVICES, sizeof(nDevices), &nDevices, NULL);
-      if (err != CL_SUCCESS) {
-          return err;
-      }
-
-      binary_sizes = (::size_t*)alloca(sizeof(::size_t)*nDevices);
-      err = f(CL_PROGRAM_BINARY_SIZES, sizeof(::size_t)*nDevices, binary_sizes, NULL);
-      if (err != CL_SUCCESS) {
-          return err;
-      }
-
-      values = (char **) alloca(sizeof(char*)*nDevices);
-      for(cl_uint i = 0; i < nDevices; i++ )
-      {
-        if( binary_sizes[i] != 0 )
-        {     		 
-            values[i]= (char *)alloca( sizeof(char)*binary_sizes[i]);
-        }
-        else
-        {
-            values[i] = NULL;
-        }
-      }
-      err = f(name, sizeof(char *)*nDevices, values, NULL);
-      if (err != CL_SUCCESS) {
-        return err;
-      }
-      
-      param->assign(values,values+nDevices);
-      return CL_SUCCESS;
-    }
-};
-
-// Specialized GetInfoHelper for STRING_CLASS params
-template <typename Func>
-struct GetInfoHelper<Func, STRING_CLASS>
-{
-    static cl_int get(Func f, cl_uint name, STRING_CLASS* param)
-    {
-        ::size_t required;
-        cl_int err = f(name, 0, NULL, &required);
-        if (err != CL_SUCCESS) {
-            return err;
-        }
-
-        char* value = (char*) alloca(required);
-        err = f(name, required, value, NULL);
-        if (err != CL_SUCCESS) {
-            return err;
-        }
-
-        *param = value;
-        return CL_SUCCESS;
-    }
-};
-
-// Specialized GetInfoHelper for cl::size_t params
-template <typename Func, ::size_t N>
-struct GetInfoHelper<Func, size_t<N> >
-{
-    static cl_int get(Func f, cl_uint name, size_t<N>* param)
-    {
-        ::size_t required;
-        cl_int err = f(name, 0, NULL, &required);
-        if (err != CL_SUCCESS) {
-            return err;
-        }
-
-        ::size_t* value = (::size_t*) alloca(required);
-        err = f(name, required, value, NULL);
-        if (err != CL_SUCCESS) {
-            return err;
-        }
-
-        param->assign(&value[0], &value[required/sizeof(::size_t)]);
-        return CL_SUCCESS;
-    }
-};
-
-#define __GET_INFO_HELPER_WITH_RETAIN(CPP_TYPE) \
-namespace detail { \
-template <typename Func> \
-struct GetInfoHelper<Func, CPP_TYPE> \
-{ \
-    static cl_int get(Func f, cl_uint name, CPP_TYPE* param) \
-    { \
-      cl_uint err = f(name, sizeof(CPP_TYPE), param, NULL); \
-      if (err != CL_SUCCESS) { \
-        return err; \
-      } \
-      \
-      return ReferenceHandler<CPP_TYPE::cl_type>::retain((*param)()); \
-    } \
-}; \
-} 
-
-
-#define __PARAM_NAME_INFO_1_0(F) \
-    F(cl_platform_info, CL_PLATFORM_PROFILE, STRING_CLASS) \
-    F(cl_platform_info, CL_PLATFORM_VERSION, STRING_CLASS) \
-    F(cl_platform_info, CL_PLATFORM_NAME, STRING_CLASS) \
-    F(cl_platform_info, CL_PLATFORM_VENDOR, STRING_CLASS) \
-    F(cl_platform_info, CL_PLATFORM_EXTENSIONS, STRING_CLASS) \
-    \
-    F(cl_device_info, CL_DEVICE_TYPE, cl_device_type) \
-    F(cl_device_info, CL_DEVICE_VENDOR_ID, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MAX_COMPUTE_UNITS, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MAX_WORK_GROUP_SIZE, ::size_t) \
-    F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_SIZES, VECTOR_CLASS< ::size_t>) \
-    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, cl_uint) \
-    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, cl_uint) \
-    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, cl_uint) \
-    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, cl_uint) \
-    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, cl_uint) \
-    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MAX_CLOCK_FREQUENCY, cl_uint) \
-    F(cl_device_info, CL_DEVICE_ADDRESS_BITS, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MAX_READ_IMAGE_ARGS, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MAX_MEM_ALLOC_SIZE, cl_ulong) \
-    F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_WIDTH, ::size_t) \
-    F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_HEIGHT, ::size_t) \
-    F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_WIDTH, ::size_t) \
-    F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_HEIGHT, ::size_t) \
-    F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_DEPTH, ::size_t) \
-    F(cl_device_info, CL_DEVICE_IMAGE_SUPPORT, cl_bool) \
-    F(cl_device_info, CL_DEVICE_MAX_PARAMETER_SIZE, ::size_t) \
-    F(cl_device_info, CL_DEVICE_MAX_SAMPLERS, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \
-    F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \
-    F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \
-    F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \
-    F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\
-    F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \
-    F(cl_device_info, CL_DEVICE_GLOBAL_MEM_SIZE, cl_ulong) \
-    F(cl_device_info, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, cl_ulong) \
-    F(cl_device_info, CL_DEVICE_MAX_CONSTANT_ARGS, cl_uint) \
-    F(cl_device_info, CL_DEVICE_LOCAL_MEM_TYPE, cl_device_local_mem_type) \
-    F(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE, cl_ulong) \
-    F(cl_device_info, CL_DEVICE_ERROR_CORRECTION_SUPPORT, cl_bool) \
-    F(cl_device_info, CL_DEVICE_PROFILING_TIMER_RESOLUTION, ::size_t) \
-    F(cl_device_info, CL_DEVICE_ENDIAN_LITTLE, cl_bool) \
-    F(cl_device_info, CL_DEVICE_AVAILABLE, cl_bool) \
-    F(cl_device_info, CL_DEVICE_COMPILER_AVAILABLE, cl_bool) \
-    F(cl_device_info, CL_DEVICE_EXECUTION_CAPABILITIES, cl_device_exec_capabilities) \
-    F(cl_device_info, CL_DEVICE_QUEUE_PROPERTIES, cl_command_queue_properties) \
-    F(cl_device_info, CL_DEVICE_PLATFORM, cl_platform_id) \
-    F(cl_device_info, CL_DEVICE_NAME, STRING_CLASS) \
-    F(cl_device_info, CL_DEVICE_VENDOR, STRING_CLASS) \
-    F(cl_device_info, CL_DRIVER_VERSION, STRING_CLASS) \
-    F(cl_device_info, CL_DEVICE_PROFILE, STRING_CLASS) \
-    F(cl_device_info, CL_DEVICE_VERSION, STRING_CLASS) \
-    F(cl_device_info, CL_DEVICE_EXTENSIONS, STRING_CLASS) \
-    \
-    F(cl_context_info, CL_CONTEXT_REFERENCE_COUNT, cl_uint) \
-    F(cl_context_info, CL_CONTEXT_DEVICES, VECTOR_CLASS<Device>) \
-    F(cl_context_info, CL_CONTEXT_PROPERTIES, VECTOR_CLASS<cl_context_properties>) \
-    \
-    F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \
-    F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \
-    F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \
-    F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_uint) \
-    \
-    F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \
-    F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \
-    F(cl_profiling_info, CL_PROFILING_COMMAND_START, cl_ulong) \
-    F(cl_profiling_info, CL_PROFILING_COMMAND_END, cl_ulong) \
-    \
-    F(cl_mem_info, CL_MEM_TYPE, cl_mem_object_type) \
-    F(cl_mem_info, CL_MEM_FLAGS, cl_mem_flags) \
-    F(cl_mem_info, CL_MEM_SIZE, ::size_t) \
-    F(cl_mem_info, CL_MEM_HOST_PTR, void*) \
-    F(cl_mem_info, CL_MEM_MAP_COUNT, cl_uint) \
-    F(cl_mem_info, CL_MEM_REFERENCE_COUNT, cl_uint) \
-    F(cl_mem_info, CL_MEM_CONTEXT, cl::Context) \
-    \
-    F(cl_image_info, CL_IMAGE_FORMAT, cl_image_format) \
-    F(cl_image_info, CL_IMAGE_ELEMENT_SIZE, ::size_t) \
-    F(cl_image_info, CL_IMAGE_ROW_PITCH, ::size_t) \
-    F(cl_image_info, CL_IMAGE_SLICE_PITCH, ::size_t) \
-    F(cl_image_info, CL_IMAGE_WIDTH, ::size_t) \
-    F(cl_image_info, CL_IMAGE_HEIGHT, ::size_t) \
-    F(cl_image_info, CL_IMAGE_DEPTH, ::size_t) \
-    \
-    F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \
-    F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \
-    F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_addressing_mode) \
-    F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_filter_mode) \
-    F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_bool) \
-    \
-    F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \
-    F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \
-    F(cl_program_info, CL_PROGRAM_NUM_DEVICES, cl_uint) \
-    F(cl_program_info, CL_PROGRAM_DEVICES, VECTOR_CLASS<cl_device_id>) \
-    F(cl_program_info, CL_PROGRAM_SOURCE, STRING_CLASS) \
-    F(cl_program_info, CL_PROGRAM_BINARY_SIZES, VECTOR_CLASS< ::size_t>) \
-    F(cl_program_info, CL_PROGRAM_BINARIES, VECTOR_CLASS<char *>) \
-    \
-    F(cl_program_build_info, CL_PROGRAM_BUILD_STATUS, cl_build_status) \
-    F(cl_program_build_info, CL_PROGRAM_BUILD_OPTIONS, STRING_CLASS) \
-    F(cl_program_build_info, CL_PROGRAM_BUILD_LOG, STRING_CLASS) \
-    \
-    F(cl_kernel_info, CL_KERNEL_FUNCTION_NAME, STRING_CLASS) \
-    F(cl_kernel_info, CL_KERNEL_NUM_ARGS, cl_uint) \
-    F(cl_kernel_info, CL_KERNEL_REFERENCE_COUNT, cl_uint) \
-    F(cl_kernel_info, CL_KERNEL_CONTEXT, cl::Context) \
-    F(cl_kernel_info, CL_KERNEL_PROGRAM, cl::Program) \
-    \
-    F(cl_kernel_work_group_info, CL_KERNEL_WORK_GROUP_SIZE, ::size_t) \
-    F(cl_kernel_work_group_info, CL_KERNEL_COMPILE_WORK_GROUP_SIZE, cl::size_t<3>) \
-    F(cl_kernel_work_group_info, CL_KERNEL_LOCAL_MEM_SIZE, cl_ulong) \
-    \
-    F(cl_command_queue_info, CL_QUEUE_CONTEXT, cl::Context) \
-    F(cl_command_queue_info, CL_QUEUE_DEVICE, cl::Device) \
-    F(cl_command_queue_info, CL_QUEUE_REFERENCE_COUNT, cl_uint) \
-    F(cl_command_queue_info, CL_QUEUE_PROPERTIES, cl_command_queue_properties)
-
-#if defined(CL_VERSION_1_1)
-#define __PARAM_NAME_INFO_1_1(F) \
-    F(cl_context_info, CL_CONTEXT_NUM_DEVICES, cl_uint)\
-    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, cl_uint) \
-    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, cl_uint) \
-    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, cl_uint) \
-    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, cl_uint) \
-    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, cl_uint) \
-    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \
-    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \
-    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \
-    F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \
-    F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \
-    F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool) \
-    F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, STRING_CLASS) \
-    \
-    F(cl_mem_info, CL_MEM_ASSOCIATED_MEMOBJECT, cl::Memory) \
-    F(cl_mem_info, CL_MEM_OFFSET, ::size_t) \
-    \
-    F(cl_kernel_work_group_info, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, ::size_t) \
-    F(cl_kernel_work_group_info, CL_KERNEL_PRIVATE_MEM_SIZE, cl_ulong) \
-    \
-    F(cl_event_info, CL_EVENT_CONTEXT, cl::Context)
-#endif // CL_VERSION_1_1
-
-#if defined(USE_CL_DEVICE_FISSION)
-#define __PARAM_NAME_DEVICE_FISSION(F) \
-    F(cl_device_info, CL_DEVICE_PARENT_DEVICE_EXT, cl_device_id) \
-    F(cl_device_info, CL_DEVICE_PARTITION_TYPES_EXT, VECTOR_CLASS<cl_device_partition_property_ext>) \
-    F(cl_device_info, CL_DEVICE_AFFINITY_DOMAINS_EXT, VECTOR_CLASS<cl_device_partition_property_ext>) \
-    F(cl_device_info, CL_DEVICE_REFERENCE_COUNT_EXT , cl_uint) \
-    F(cl_device_info, CL_DEVICE_PARTITION_STYLE_EXT, VECTOR_CLASS<cl_device_partition_property_ext>)
-#endif // USE_CL_DEVICE_FISSION
-
-template <typename enum_type, cl_int Name>
-struct param_traits {};
-
-#define __CL_DECLARE_PARAM_TRAITS(token, param_name, T) \
-struct token;                                        \
-template<>                                           \
-struct param_traits<detail:: token,param_name>       \
-{                                                    \
-    enum { value = param_name };                     \
-    typedef T param_type;                            \
-};
-
-__PARAM_NAME_INFO_1_0(__CL_DECLARE_PARAM_TRAITS)
-#if defined(CL_VERSION_1_1)
-__PARAM_NAME_INFO_1_1(__CL_DECLARE_PARAM_TRAITS)
-#endif // CL_VERSION_1_1
-
-#if defined(USE_CL_DEVICE_FISSION)
-__PARAM_NAME_DEVICE_FISSION(__CL_DECLARE_PARAM_TRAITS);
-#endif // USE_CL_DEVICE_FISSION
-
-#ifdef CL_PLATFORM_ICD_SUFFIX_KHR
-__CL_DECLARE_PARAM_TRAITS(cl_platform_info, CL_PLATFORM_ICD_SUFFIX_KHR, STRING_CLASS)
-#endif
-
-#ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD
-__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_PROFILING_TIMER_OFFSET_AMD, cl_ulong)
-#endif
-
-#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV
-__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, cl_uint)
-#endif
-#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV
-__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, cl_uint)
-#endif
-#ifdef CL_DEVICE_REGISTERS_PER_BLOCK_NV
-__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_REGISTERS_PER_BLOCK_NV, cl_uint)
-#endif
-#ifdef CL_DEVICE_WARP_SIZE_NV
-__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_WARP_SIZE_NV, cl_uint)
-#endif
-#ifdef CL_DEVICE_GPU_OVERLAP_NV
-__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GPU_OVERLAP_NV, cl_bool)
-#endif
-#ifdef CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV
-__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, cl_bool)
-#endif
-#ifdef CL_DEVICE_INTEGRATED_MEMORY_NV
-__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_bool)
-#endif
-
-// Convenience functions
-
-template <typename Func, typename T>
-inline cl_int
-getInfo(Func f, cl_uint name, T* param)
-{
-    return GetInfoHelper<Func, T>::get(f, name, param);
-}
-
-template <typename Func, typename Arg0>
-struct GetInfoFunctor0
-{
-    Func f_; const Arg0& arg0_;
-    cl_int operator ()(
-        cl_uint param, ::size_t size, void* value, ::size_t* size_ret)
-    { return f_(arg0_, param, size, value, size_ret); }
-};
-
-template <typename Func, typename Arg0, typename Arg1>
-struct GetInfoFunctor1
-{
-    Func f_; const Arg0& arg0_; const Arg1& arg1_;
-    cl_int operator ()(
-        cl_uint param, ::size_t size, void* value, ::size_t* size_ret)
-    { return f_(arg0_, arg1_, param, size, value, size_ret); }
-};
-
-template <typename Func, typename Arg0, typename T>
-inline cl_int
-getInfo(Func f, const Arg0& arg0, cl_uint name, T* param)
-{
-    GetInfoFunctor0<Func, Arg0> f0 = { f, arg0 };
-    return GetInfoHelper<GetInfoFunctor0<Func, Arg0>, T>
-        ::get(f0, name, param);
-}
-
-template <typename Func, typename Arg0, typename Arg1, typename T>
-inline cl_int
-getInfo(Func f, const Arg0& arg0, const Arg1& arg1, cl_uint name, T* param)
-{
-    GetInfoFunctor1<Func, Arg0, Arg1> f0 = { f, arg0, arg1 };
-    return GetInfoHelper<GetInfoFunctor1<Func, Arg0, Arg1>, T>
-        ::get(f0, name, param);
-}
-
-template<typename T>
-struct ReferenceHandler
-{ };
-
-template <>
-struct ReferenceHandler<cl_device_id>
-{
-    // cl_device_id does not have retain().
-    static cl_int retain(cl_device_id)
-    { return CL_INVALID_DEVICE; }
-    // cl_device_id does not have release().
-    static cl_int release(cl_device_id)
-    { return CL_INVALID_DEVICE; }
-};
-
-template <>
-struct ReferenceHandler<cl_platform_id>
-{
-    // cl_platform_id does not have retain().
-    static cl_int retain(cl_platform_id)
-    { return CL_INVALID_PLATFORM; }
-    // cl_platform_id does not have release().
-    static cl_int release(cl_platform_id)
-    { return CL_INVALID_PLATFORM; }
-};
-
-template <>
-struct ReferenceHandler<cl_context>
-{
-    static cl_int retain(cl_context context)
-    { return ::clRetainContext(context); }
-    static cl_int release(cl_context context)
-    { return ::clReleaseContext(context); }
-};
-
-template <>
-struct ReferenceHandler<cl_command_queue>
-{
-    static cl_int retain(cl_command_queue queue)
-    { return ::clRetainCommandQueue(queue); }
-    static cl_int release(cl_command_queue queue)
-    { return ::clReleaseCommandQueue(queue); }
-};
-
-template <>
-struct ReferenceHandler<cl_mem>
-{
-    static cl_int retain(cl_mem memory)
-    { return ::clRetainMemObject(memory); }
-    static cl_int release(cl_mem memory)
-    { return ::clReleaseMemObject(memory); }
-};
-
-template <>
-struct ReferenceHandler<cl_sampler>
-{
-    static cl_int retain(cl_sampler sampler)
-    { return ::clRetainSampler(sampler); }
-    static cl_int release(cl_sampler sampler)
-    { return ::clReleaseSampler(sampler); }
-};
-
-template <>
-struct ReferenceHandler<cl_program>
-{
-    static cl_int retain(cl_program program)
-    { return ::clRetainProgram(program); }
-    static cl_int release(cl_program program)
-    { return ::clReleaseProgram(program); }
-};
-
-template <>
-struct ReferenceHandler<cl_kernel>
-{
-    static cl_int retain(cl_kernel kernel)
-    { return ::clRetainKernel(kernel); }
-    static cl_int release(cl_kernel kernel)
-    { return ::clReleaseKernel(kernel); }
-};
-
-template <>
-struct ReferenceHandler<cl_event>
-{
-    static cl_int retain(cl_event event)
-    { return ::clRetainEvent(event); }
-    static cl_int release(cl_event event)
-    { return ::clReleaseEvent(event); }
-};
-
-template <typename T>
-class Wrapper
-{
-public:
-    typedef T cl_type;
-
-protected:
-    cl_type object_;
-
-public:
-    Wrapper() : object_(NULL) { }
-
-    Wrapper(const cl_type &obj) : object_(obj) { }
-
-    ~Wrapper()
-    {
-        if (object_ != NULL) { release(); }
-    }
-
-    Wrapper(const Wrapper<cl_type>& rhs)
-    {
-        object_ = rhs.object_;
-        if (object_ != NULL) { retain(); }
-    }
-
-    Wrapper<cl_type>& operator = (const Wrapper<cl_type>& rhs)
-    {
-        if (object_ != NULL) { release(); }
-        object_ = rhs.object_;
-        if (object_ != NULL) { retain(); }
-        return *this;
-    }
-
-    Wrapper<cl_type>& operator = (const cl_type &rhs)
-    {
-        if (object_ != NULL) { release(); }
-        object_ = rhs;
-        return *this;
-    }
-
-    cl_type operator ()() const { return object_; }
-
-    cl_type& operator ()() { return object_; }
-
-protected:
-
-    cl_int retain() const
-    {
-        return ReferenceHandler<cl_type>::retain(object_);
-    }
-
-    cl_int release() const
-    {
-        return ReferenceHandler<cl_type>::release(object_);
-    }
-};
-
-#if defined(__CL_ENABLE_EXCEPTIONS)
-static inline cl_int errHandler (
-    cl_int err,
-    const char * errStr = NULL) throw(Error)
-{
-    if (err != CL_SUCCESS) {
-        throw Error(err, errStr);
-    }
-    return err;
-}
-#else
-static inline cl_int errHandler (cl_int err, const char * errStr = NULL )
-{
-    (void)errStr;
-    return err;
-}
-#endif // __CL_ENABLE_EXCEPTIONS
-
-} // namespace detail
-//! \endcond
-
-/*! \stuct ImageFormat
- * \brief ImageFormat interface fro cl_image_format.
- */
-struct ImageFormat : public cl_image_format
-{
-    ImageFormat(){}
-
-    ImageFormat(cl_channel_order order, cl_channel_type type)
-    {
-        image_channel_order = order;
-        image_channel_data_type = type;
-    }
-
-    ImageFormat& operator = (const ImageFormat& rhs)
-    {
-        if (this != &rhs) {
-            this->image_channel_data_type = rhs.image_channel_data_type;
-            this->image_channel_order     = rhs.image_channel_order;
-        }
-        return *this;
-    }
-};
-
-/*! \class Device
- * \brief Device interface for cl_device_id.
- */
-class Device : public detail::Wrapper<cl_device_id>
-{
-public:
-    Device() : detail::Wrapper<cl_type>() { }
-
-    Device(const Device& device) : detail::Wrapper<cl_type>(device) { }
-
-    Device(const cl_device_id &device) : detail::Wrapper<cl_type>(device) { }
-
-    static Device getDefault(cl_int * err = NULL);
-
-    Device& operator = (const Device& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Device& operator = (const cl_device_id& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    template <typename T>
-    cl_int getInfo(cl_device_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetDeviceInfo, object_, name, param),
-            __GET_DEVICE_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_device_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_device_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-#if defined(USE_CL_DEVICE_FISSION)
-    cl_int createSubDevices(
-        const cl_device_partition_property_ext * properties,
-        VECTOR_CLASS<Device>* devices)
-    {
-        typedef CL_API_ENTRY cl_int 
-            ( CL_API_CALL * PFN_clCreateSubDevicesEXT)(
-                cl_device_id /*in_device*/,
-                const cl_device_partition_property_ext * /* properties */,
-                cl_uint /*num_entries*/,
-                cl_device_id * /*out_devices*/,
-                cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
-
-        static PFN_clCreateSubDevicesEXT pfn_clCreateSubDevicesEXT = NULL;
-        __INIT_CL_EXT_FCN_PTR(clCreateSubDevicesEXT);
-
-        cl_uint n = 0;
-        cl_int err = pfn_clCreateSubDevicesEXT(object_, properties, 0, NULL, &n);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __CREATE_SUB_DEVICES);
-        }
-
-        cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
-        err = pfn_clCreateSubDevicesEXT(object_, properties, n, ids, NULL);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __CREATE_SUB_DEVICES);
-        }
-
-        devices->assign(&ids[0], &ids[n]);
-        return CL_SUCCESS;
-    }
-#endif
-};
-
-/*! \class Platform
- *  \brief Platform interface.
- */
-class Platform : public detail::Wrapper<cl_platform_id>
-{
-public:
-    static const Platform null();
-
-    Platform() : detail::Wrapper<cl_type>()  { }
-
-    Platform(const Platform& platform) : detail::Wrapper<cl_type>(platform) { }
-
-    Platform(const cl_platform_id &platform) : detail::Wrapper<cl_type>(platform) { }
-
-    Platform& operator = (const Platform& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Platform& operator = (const cl_platform_id& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    cl_int getInfo(cl_platform_info name, STRING_CLASS* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetPlatformInfo, object_, name, param),
-            __GET_PLATFORM_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_platform_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_platform_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    cl_int getDevices(
-        cl_device_type type,
-        VECTOR_CLASS<Device>* devices) const
-    {
-        cl_uint n = 0;
-        cl_int err = ::clGetDeviceIDs(object_, type, 0, NULL, &n);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
-        }
-
-        cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
-        err = ::clGetDeviceIDs(object_, type, n, ids, NULL);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
-        }
-
-        devices->assign(&ids[0], &ids[n]);
-        return CL_SUCCESS;
-    }
-
-#if defined(USE_DX_INTEROP)
-   /*! \brief Get the list of available D3D10 devices.
-     *
-     *  \param d3d_device_source.
-     *
-     *  \param d3d_object.
-     *
-     *  \param d3d_device_set.
-     *
-     *  \param devices returns a vector of OpenCL D3D10 devices found. The cl::Device
-     *  values returned in devices can be used to identify a specific OpenCL
-     *  device. If \a devices argument is NULL, this argument is ignored.
-     *
-     *  \return One of the following values:
-     *    - CL_SUCCESS if the function is executed successfully.
-     *
-     *  The application can query specific capabilities of the OpenCL device(s)
-     *  returned by cl::getDevices. This can be used by the application to
-     *  determine which device(s) to use.
-     *
-     * \note In the case that exceptions are enabled and a return value
-     * other than CL_SUCCESS is generated, then cl::Error exception is
-     * generated.
-     */
-    cl_int getDevices(
-        cl_d3d10_device_source_khr d3d_device_source,
-        void *                     d3d_object,
-        cl_d3d10_device_set_khr    d3d_device_set,
-        VECTOR_CLASS<Device>* devices) const
-    {
-        typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clGetDeviceIDsFromD3D10KHR)(
-            cl_platform_id platform, 
-            cl_d3d10_device_source_khr d3d_device_source, 
-            void * d3d_object,
-            cl_d3d10_device_set_khr d3d_device_set,
-            cl_uint num_entries,
-            cl_device_id * devices,
-            cl_uint* num_devices);
-
-        static PFN_clGetDeviceIDsFromD3D10KHR pfn_clGetDeviceIDsFromD3D10KHR = NULL;
-        __INIT_CL_EXT_FCN_PTR(clGetDeviceIDsFromD3D10KHR);
-
-        cl_uint n = 0;
-        cl_int err = pfn_clGetDeviceIDsFromD3D10KHR(
-            object_, 
-            d3d_device_source, 
-            d3d_object,
-            d3d_device_set, 
-            0, 
-            NULL, 
-            &n);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
-        }
-
-        cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
-        err = pfn_clGetDeviceIDsFromD3D10KHR(
-            object_, 
-            d3d_device_source, 
-            d3d_object,
-            d3d_device_set,
-            n, 
-            ids, 
-            NULL);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
-        }
-
-        devices->assign(&ids[0], &ids[n]);
-        return CL_SUCCESS;
-    }
-#endif
-
-    static cl_int get(
-        VECTOR_CLASS<Platform>* platforms)
-    {
-        cl_uint n = 0;
-        cl_int err = ::clGetPlatformIDs(0, NULL, &n);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
-        }
-
-        cl_platform_id* ids = (cl_platform_id*) alloca(
-            n * sizeof(cl_platform_id));
-        err = ::clGetPlatformIDs(n, ids, NULL);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
-        }
-
-        platforms->assign(&ids[0], &ids[n]);
-        return CL_SUCCESS;
-    }
-
-    static cl_int get(
-        Platform * platform)
-    {
-        cl_uint n = 0;
-        cl_int err = ::clGetPlatformIDs(0, NULL, &n);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
-        }
-
-        cl_platform_id* ids = (cl_platform_id*) alloca(
-            n * sizeof(cl_platform_id));
-        err = ::clGetPlatformIDs(n, ids, NULL);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
-        }
-
-        *platform = ids[0];
-        return CL_SUCCESS;
-    }
-
-    static Platform get(
-        cl_int * errResult = NULL)
-    {
-        Platform platform;
-        cl_uint n = 0;
-        cl_int err = ::clGetPlatformIDs(0, NULL, &n);
-        if (err != CL_SUCCESS) {
-            detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
-            if (errResult != NULL) {
-                *errResult = err;
-            }
-        }
-
-        cl_platform_id* ids = (cl_platform_id*) alloca(
-            n * sizeof(cl_platform_id));
-        err = ::clGetPlatformIDs(n, ids, NULL);
-
-        if (err != CL_SUCCESS) {
-            detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
-        }
-
-        if (errResult != NULL) {
-            *errResult = err;
-        }
-        
-        return ids[0];
-    }
-};
-
-static inline cl_int
-UnloadCompiler()
-{
-    return ::clUnloadCompiler();
-}
-
-class Context : public detail::Wrapper<cl_context>
-{
-private:
-    static volatile int default_initialized_;
-    static Context default_;
-    static volatile cl_int default_error_;
-public:
-    Context(
-        const VECTOR_CLASS<Device>& devices,
-        cl_context_properties* properties = NULL,
-        void (CL_CALLBACK * notifyFptr)(
-            const char *,
-            const void *,
-            ::size_t,
-            void *) = NULL,
-        void* data = NULL,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateContext(
-            properties, (cl_uint) devices.size(),
-            (cl_device_id*) &devices.front(),
-            notifyFptr, data, &error);
-
-        detail::errHandler(error, __CREATE_CONTEXT_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Context(
-        cl_device_type type,
-        cl_context_properties* properties = NULL,
-        void (CL_CALLBACK * notifyFptr)(
-            const char *,
-            const void *,
-            ::size_t,
-            void *) = NULL,
-        void* data = NULL,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-
-#if !defined(__APPLE__) || !defined(__MACOS)
-        cl_context_properties prop[4] = {CL_CONTEXT_PLATFORM, 0, 0, 0 };	
-        if (properties == NULL) {
-            prop[1] = (cl_context_properties)Platform::get(&error)();
-            if (error != CL_SUCCESS) {
-                detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
-                if (err != NULL) {
-                    *err = error;
-                    return;
-                }
-            }
-
-            properties = &prop[0];
-        }
-#endif
-        object_ = ::clCreateContextFromType(
-            properties, type, notifyFptr, data, &error);
-
-        detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    static Context getDefault(cl_int * err = NULL) 
-    {
-        int state = detail::compare_exchange(
-            &default_initialized_, 
-            __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED);
-        
-        if (state & __DEFAULT_INITIALIZED) {
-            if (err != NULL) {
-                *err = default_error_;
-            }
-            return default_;
-        }
-
-        if (state & __DEFAULT_BEING_INITIALIZED) {
-              // Assume writes will propagate eventually...
-              while(default_initialized_ != __DEFAULT_INITIALIZED) {
-                                ;
-              }
-
-            if (err != NULL) {
-                *err = default_error_;
-            }
-            return default_;
-        }
-
-        cl_int error;
-        default_ = Context(
-            CL_DEVICE_TYPE_DEFAULT,
-            NULL,
-            NULL,
-            NULL,
-            &error);
-
-        default_error_ = error;
-        // Assume writes will propagate eventually...
-        default_initialized_ = __DEFAULT_INITIALIZED;
-        if (err != NULL) {
-            *err = default_error_;
-        }
-        return default_;
-
-    }
-
-    Context() : detail::Wrapper<cl_type>() { }
-
-    Context(const Context& context) : detail::Wrapper<cl_type>(context) { }
-
-    Context(const cl_context& context) : detail::Wrapper<cl_type>(context) { }
-
-    Context& operator = (const Context& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Context& operator = (const cl_context& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    template <typename T>
-    cl_int getInfo(cl_context_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetContextInfo, object_, name, param),
-            __GET_CONTEXT_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_context_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_context_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    cl_int getSupportedImageFormats(
-        cl_mem_flags flags,
-        cl_mem_object_type type,
-        VECTOR_CLASS<ImageFormat>* formats) const
-    {
-        cl_uint numEntries;
-        cl_int err = ::clGetSupportedImageFormats(
-           object_, 
-           flags,
-           type, 
-           0, 
-           NULL, 
-           &numEntries);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
-        }
-
-        ImageFormat* value = (ImageFormat*)
-            alloca(numEntries * sizeof(ImageFormat));
-        err = ::clGetSupportedImageFormats(
-            object_, 
-            flags, 
-            type, 
-            numEntries,
-            (cl_image_format*) value, 
-            NULL);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
-        }
-
-        formats->assign(&value[0], &value[numEntries]);
-        return CL_SUCCESS;
-    }
-};
-
-inline Device Device::getDefault(cl_int * err)
-{
-    cl_int error;
-    Device device;
-
-    Context context = Context::getDefault(&error);
-    detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
-
-    if (error != CL_SUCCESS) {
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-    else {
-        device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
-        if (err != NULL) {
-            *err = CL_SUCCESS;
-        }
-    }
-
-    return device;
-}
-
-#ifdef _WIN32
-__declspec(selectany) volatile int Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
-__declspec(selectany) Context Context::default_;
-__declspec(selectany) volatile cl_int Context::default_error_ = CL_SUCCESS;
-#else
-__attribute__((weak)) volatile int Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
-__attribute__((weak)) Context Context::default_;
-__attribute__((weak)) volatile cl_int Context::default_error_ = CL_SUCCESS;
-#endif
-
-__GET_INFO_HELPER_WITH_RETAIN(cl::Context)
-
-/*! \class Event
- * \brief Event interface for cl_event.
- */
-class Event : public detail::Wrapper<cl_event>
-{
-public:
-    Event() : detail::Wrapper<cl_type>() { }
-
-    Event(const Event& event) : detail::Wrapper<cl_type>(event) { }
-
-    Event(const cl_event& event) : detail::Wrapper<cl_type>(event) { }
-
-    Event& operator = (const Event& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Event& operator = (const cl_event& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    template <typename T>
-    cl_int getInfo(cl_event_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetEventInfo, object_, name, param),
-            __GET_EVENT_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_event_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_event_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    template <typename T>
-    cl_int getProfilingInfo(cl_profiling_info name, T* param) const
-    {
-        return detail::errHandler(detail::getInfo(
-            &::clGetEventProfilingInfo, object_, name, param),
-            __GET_EVENT_PROFILE_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_profiling_info, name>::param_type
-    getProfilingInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_profiling_info, name>::param_type param;
-        cl_int result = getProfilingInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    cl_int wait() const
-    {
-        return detail::errHandler(
-            ::clWaitForEvents(1, &object_),
-            __WAIT_FOR_EVENTS_ERR);
-    }
-
-#if defined(CL_VERSION_1_1)
-    cl_int setCallback(
-        cl_int type,
-        void (CL_CALLBACK * pfn_notify)(cl_event, cl_int, void *),		
-        void * user_data = NULL)
-    {
-        return detail::errHandler(
-            ::clSetEventCallback(
-                object_,
-                type,
-                pfn_notify,
-                user_data), 
-            __SET_EVENT_CALLBACK_ERR);
-    }
-#endif
-
-    static cl_int
-    waitForEvents(const VECTOR_CLASS<Event>& events)
-    {
-        return detail::errHandler(
-            ::clWaitForEvents(
-                (cl_uint) events.size(), (cl_event*)&events.front()),
-            __WAIT_FOR_EVENTS_ERR);
-    }
-};
-
-__GET_INFO_HELPER_WITH_RETAIN(cl::Event)
-
-#if defined(CL_VERSION_1_1)
-/*! \class UserEvent
- * \brief User event interface for cl_event.
- */
-class UserEvent : public Event
-{
-public:
-    UserEvent(
-        const Context& context,
-        cl_int * err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateUserEvent(
-            context(),
-            &error);
-
-        detail::errHandler(error, __CREATE_USER_EVENT_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    UserEvent() : Event() { }
-
-    UserEvent(const UserEvent& event) : Event(event) { }
-
-    UserEvent& operator = (const UserEvent& rhs)
-    {
-        if (this != &rhs) {
-            Event::operator=(rhs);
-        }
-        return *this;
-    }
-
-    cl_int setStatus(cl_int status)
-    {
-        return detail::errHandler(
-            ::clSetUserEventStatus(object_,status), 
-            __SET_USER_EVENT_STATUS_ERR);
-    }
-};
-#endif
-
-inline static cl_int
-WaitForEvents(const VECTOR_CLASS<Event>& events)
-{
-    return detail::errHandler(
-        ::clWaitForEvents(
-            (cl_uint) events.size(), (cl_event*)&events.front()),
-        __WAIT_FOR_EVENTS_ERR);
-}
-
-/*! \class Memory
- * \brief Memory interface for cl_mem.
- */
-class Memory : public detail::Wrapper<cl_mem>
-{
-public:
-    Memory() : detail::Wrapper<cl_type>() { }
-
-    Memory(const Memory& memory) : detail::Wrapper<cl_type>(memory) { }
-
-    Memory(const cl_mem& memory) : detail::Wrapper<cl_type>(memory) { }
-
-    Memory& operator = (const Memory& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Memory& operator = (const cl_mem& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    template <typename T>
-    cl_int getInfo(cl_mem_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetMemObjectInfo, object_, name, param),
-            __GET_MEM_OBJECT_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_mem_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_mem_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-#if defined(CL_VERSION_1_1)
-    cl_int setDestructorCallback(
-        void (CL_CALLBACK * pfn_notify)(cl_mem, void *),		
-        void * user_data = NULL)
-    {
-        return detail::errHandler(
-            ::clSetMemObjectDestructorCallback(
-                object_,
-                pfn_notify,
-                user_data), 
-            __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR);
-    }
-#endif
-
-};
-
-__GET_INFO_HELPER_WITH_RETAIN(cl::Memory)
-
-/*! \class Buffer
- * \brief Memory buffer interface.
- */
-class Buffer : public Memory
-{
-public:
-    Buffer(
-        const Context& context,
-        cl_mem_flags flags,
-        ::size_t size,
-        void* host_ptr = NULL,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
-//if (!(flags & CL_MEM_ALLOC_HOST_PTR))
-//#pragma omp critical (cout)
-//std::cout << "A: Allocating " << size << " bytes" << std::endl;
-
-        detail::errHandler(error, __CREATE_BUFFER_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Buffer(
-         cl_mem_flags flags,
-        ::size_t size,
-        void* host_ptr = NULL,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-
-        Context context = Context::getDefault(err);
-
-        object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
-//if (!(flags & CL_MEM_ALLOC_HOST_PTR))
-//#pragma omp critical (cout)
-//std::cout << "B: Allocating " << size << " bytes" << std::endl;
-
-        detail::errHandler(error, __CREATE_BUFFER_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-
-    Buffer() : Memory() { }
-
-    Buffer(const Buffer& buffer) : Memory(buffer) { }
-
-    Buffer(const cl_mem& buffer) : Memory(buffer) { }
-
-    Buffer& operator = (const Buffer& rhs)
-    {
-        if (this != &rhs) {
-            Memory::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Buffer& operator = (const cl_mem& rhs)
-    {
-        Memory::operator=(rhs);
-        return *this;
-    }
-
-#if defined(CL_VERSION_1_1)
-    Buffer createSubBuffer(
-        cl_mem_flags flags,
-        cl_buffer_create_type buffer_create_type,
-        const void * buffer_create_info,
-        cl_int * err = NULL)
-    {
-        Buffer result;
-        cl_int error;
-        result.object_ = ::clCreateSubBuffer(
-            object_, 
-            flags, 
-            buffer_create_type, 
-            buffer_create_info, 
-            &error);
-
-        detail::errHandler(error, __CREATE_SUBBUFFER_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-
-        return result;
-    }		
-#endif
-};
-
-#if defined (USE_DX_INTEROP)
-class BufferD3D10 : public Buffer
-{
-public:
-    typedef CL_API_ENTRY cl_mem (CL_API_CALL *PFN_clCreateFromD3D10BufferKHR)(
-    cl_context context, cl_mem_flags flags, ID3D10Buffer*  buffer,
-    cl_int* errcode_ret);
-
-    BufferD3D10(
-        const Context& context,
-        cl_mem_flags flags,
-        ID3D10Buffer* bufobj,
-        cl_int * err = NULL)
-    {
-        static PFN_clCreateFromD3D10BufferKHR pfn_clCreateFromD3D10BufferKHR = NULL;
-        __INIT_CL_EXT_FCN_PTR(clCreateFromD3D10BufferKHR);
-
-        cl_int error;
-        object_ = pfn_clCreateFromD3D10BufferKHR(
-            context(),
-            flags,
-            bufobj,
-            &error);
-
-        detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    BufferD3D10() : Buffer() { }
-
-    BufferD3D10(const BufferD3D10& buffer) : Buffer(buffer) { }
-
-    BufferD3D10(const cl_mem& buffer) : Buffer(buffer) { }
-
-    BufferD3D10& operator = (const BufferD3D10& rhs)
-    {
-        if (this != &rhs) {
-            Buffer::operator=(rhs);
-        }
-        return *this;
-    }
-
-    BufferD3D10& operator = (const cl_mem& rhs)
-    {
-        Buffer::operator=(rhs);
-        return *this;
-    }
-};
-#endif
-
-/*! \class BufferGL
- * \brief Memory buffer interface for GL interop.
- */
-class BufferGL : public Buffer
-{
-public:
-    BufferGL(
-        const Context& context,
-        cl_mem_flags flags,
-        GLuint bufobj,
-        cl_int * err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateFromGLBuffer(
-            context(),
-            flags,
-            bufobj,
-            &error);
-
-        detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    BufferGL() : Buffer() { }
-
-    BufferGL(const BufferGL& buffer) : Buffer(buffer) { }
-
-    BufferGL(const cl_mem& buffer) : Buffer(buffer) { }
-
-    BufferGL& operator = (const BufferGL& rhs)
-    {
-        if (this != &rhs) {
-            Buffer::operator=(rhs);
-        }
-        return *this;
-    }
-
-    BufferGL& operator = (const cl_mem& rhs)
-    {
-        Buffer::operator=(rhs);
-        return *this;
-    }
-
-    cl_int getObjectInfo(
-        cl_gl_object_type *type,
-        GLuint * gl_object_name)
-    {
-        return detail::errHandler(
-            ::clGetGLObjectInfo(object_,type,gl_object_name),
-            __GET_GL_OBJECT_INFO_ERR);
-    }
-};
-
-/*! \class BufferRenderGL
- * \brief Memory buffer interface for GL interop with renderbuffer.
- */
-class BufferRenderGL : public Buffer
-{
-public:
-    BufferRenderGL(
-        const Context& context,
-        cl_mem_flags flags,
-        GLuint bufobj,
-        cl_int * err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateFromGLRenderbuffer(
-            context(),
-            flags,
-            bufobj,
-            &error);
-
-        detail::errHandler(error, __CREATE_GL_RENDER_BUFFER_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    BufferRenderGL() : Buffer() { }
-
-    BufferRenderGL(const BufferGL& buffer) : Buffer(buffer) { }
-
-    BufferRenderGL(const cl_mem& buffer) : Buffer(buffer) { }
-
-    BufferRenderGL& operator = (const BufferRenderGL& rhs)
-    {
-        if (this != &rhs) {
-            Buffer::operator=(rhs);
-        }
-        return *this;
-    }
-
-    BufferRenderGL& operator = (const cl_mem& rhs)
-    {
-        Buffer::operator=(rhs);
-        return *this;
-    }
-
-    cl_int getObjectInfo(
-        cl_gl_object_type *type,
-        GLuint * gl_object_name)
-    {
-        return detail::errHandler(
-            ::clGetGLObjectInfo(object_,type,gl_object_name),
-            __GET_GL_OBJECT_INFO_ERR);
-    }
-};
-
-/*! \class Image
- * \brief Base class  interface for all images.
- */
-class Image : public Memory
-{
-protected:
-    Image() : Memory() { }
-
-    Image(const Image& image) : Memory(image) { }
-
-    Image(const cl_mem& image) : Memory(image) { }
-
-    Image& operator = (const Image& rhs)
-    {
-        if (this != &rhs) {
-            Memory::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Image& operator = (const cl_mem& rhs)
-    {
-        Memory::operator=(rhs);
-        return *this;
-    }
-
-public:
-    template <typename T>
-    cl_int getImageInfo(cl_image_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetImageInfo, object_, name, param),
-            __GET_IMAGE_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_image_info, name>::param_type
-    getImageInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_image_info, name>::param_type param;
-        cl_int result = getImageInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-};
-
-/*! \class Image2D
- * \brief Image interface for 2D images.
- */
-class Image2D : public Image
-{
-public:
-    Image2D(
-        const Context& context,
-        cl_mem_flags flags,
-        ImageFormat format,
-        ::size_t width,
-        ::size_t height,
-        ::size_t row_pitch = 0,
-        void* host_ptr = NULL,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateImage2D(
-            context(), flags,&format, width, height, row_pitch, host_ptr, &error);
-
-        detail::errHandler(error, __CREATE_IMAGE2D_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Image2D() { }
-
-    Image2D(const Image2D& image2D) : Image(image2D) { }
-
-    Image2D(const cl_mem& image2D) : Image(image2D) { }
-
-    Image2D& operator = (const Image2D& rhs)
-    {
-        if (this != &rhs) {
-            Image::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Image2D& operator = (const cl_mem& rhs)
-    {
-        Image::operator=(rhs);
-        return *this;
-    }
-};
-
-/*! \class Image2DGL
- * \brief 2D image interface for GL interop.
- */
-class Image2DGL : public Image2D
-{
-public:
-    Image2DGL(
-        const Context& context,
-        cl_mem_flags flags,
-        GLenum target,
-        GLint  miplevel,
-        GLuint texobj,
-        cl_int * err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateFromGLTexture2D(
-            context(),
-            flags,
-            target,
-            miplevel,
-            texobj,
-            &error);
-
-        detail::errHandler(error, __CREATE_GL_TEXTURE_2D_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Image2DGL() : Image2D() { }
-
-    Image2DGL(const Image2DGL& image) : Image2D(image) { }
-
-    Image2DGL(const cl_mem& image) : Image2D(image) { }
-
-    Image2DGL& operator = (const Image2DGL& rhs)
-    {
-        if (this != &rhs) {
-            Image2D::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Image2DGL& operator = (const cl_mem& rhs)
-    {
-        Image2D::operator=(rhs);
-        return *this;
-    }
-};
-
-/*! \class Image3D
- * \brief Image interface for 3D images.
- */
-class Image3D : public Image
-{
-public:
-    Image3D(
-        const Context& context,
-        cl_mem_flags flags,
-        ImageFormat format,
-        ::size_t width,
-        ::size_t height,
-        ::size_t depth,
-        ::size_t row_pitch = 0,
-        ::size_t slice_pitch = 0,
-        void* host_ptr = NULL,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateImage3D(
-            context(), flags, &format, width, height, depth, row_pitch,
-            slice_pitch, host_ptr, &error);
-
-        detail::errHandler(error, __CREATE_IMAGE3D_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Image3D() { }
-
-    Image3D(const Image3D& image3D) : Image(image3D) { }
-
-    Image3D(const cl_mem& image3D) : Image(image3D) { }
-
-    Image3D& operator = (const Image3D& rhs)
-    {
-        if (this != &rhs) {
-            Image::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Image3D& operator = (const cl_mem& rhs)
-    {
-        Image::operator=(rhs);
-        return *this;
-    }
-};
-
-/*! \class Image2DGL
- * \brief 2D image interface for GL interop.
- */
-class Image3DGL : public Image3D
-{
-public:
-    Image3DGL(
-        const Context& context,
-        cl_mem_flags flags,
-        GLenum target,
-        GLint  miplevel,
-        GLuint texobj,
-        cl_int * err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateFromGLTexture3D(
-            context(),
-            flags,
-            target,
-            miplevel,
-            texobj,
-            &error);
-
-        detail::errHandler(error, __CREATE_GL_TEXTURE_3D_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Image3DGL() : Image3D() { }
-
-    Image3DGL(const Image3DGL& image) : Image3D(image) { }
-
-    Image3DGL(const cl_mem& image) : Image3D(image) { }
-
-    Image3DGL& operator = (const Image3DGL& rhs)
-    {
-        if (this != &rhs) {
-            Image3D::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Image3DGL& operator = (const cl_mem& rhs)
-    {
-        Image3D::operator=(rhs);
-        return *this;
-    }
-};
-
-/*! \class Sampler
- * \brief Sampler interface for cl_sampler.
- */
-class Sampler : public detail::Wrapper<cl_sampler>
-{
-public:
-    Sampler() { }
-
-    Sampler(
-        const Context& context,
-        cl_bool normalized_coords,
-        cl_addressing_mode addressing_mode,
-        cl_filter_mode filter_mode,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateSampler(
-            context(), 
-            normalized_coords,
-            addressing_mode,
-            filter_mode,
-            &error);
-
-        detail::errHandler(error, __CREATE_SAMPLER_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Sampler(const Sampler& sampler) : detail::Wrapper<cl_type>(sampler) { }
-
-    Sampler(const cl_sampler& sampler) : detail::Wrapper<cl_type>(sampler) { }
-
-    Sampler& operator = (const Sampler& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Sampler& operator = (const cl_sampler& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    template <typename T>
-    cl_int getInfo(cl_sampler_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetSamplerInfo, object_, name, param),
-            __GET_SAMPLER_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_sampler_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_sampler_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-};
-
-__GET_INFO_HELPER_WITH_RETAIN(cl::Sampler)
-
-class Program;
-class CommandQueue;
-class Kernel;
-
-/*! \class NDRange
- * \brief NDRange interface
- */
-class NDRange
-{
-private:
-    size_t<3> sizes_;
-    cl_uint dimensions_;
-
-public:
-    NDRange()
-        : dimensions_(0)
-    { }
-
-    NDRange(::size_t size0)
-        : dimensions_(1)
-    {
-        sizes_.push_back(size0);
-    }
-
-    NDRange(::size_t size0, ::size_t size1)
-        : dimensions_(2)
-    {
-        sizes_.push_back(size0);
-        sizes_.push_back(size1);
-    }
-
-    NDRange(::size_t size0, ::size_t size1, ::size_t size2)
-        : dimensions_(3)
-    {
-        sizes_.push_back(size0);
-        sizes_.push_back(size1);
-        sizes_.push_back(size2);
-    }
-
-    operator const ::size_t*() const { return (const ::size_t*) sizes_; }
-    ::size_t dimensions() const { return dimensions_; }
-};
-
-static const NDRange NullRange;
-
-/*!
- * \struct LocalSpaceArg
- * \brief Local address raper for use with Kernel::setArg
- */
-struct LocalSpaceArg
-{
-    ::size_t size_;
-};
-
-namespace detail {
-
-template <typename T>
-struct KernelArgumentHandler
-{
-    static ::size_t size(const T&) { return sizeof(T); }
-    static T* ptr(T& value) { return &value; }
-};
-
-template <>
-struct KernelArgumentHandler<LocalSpaceArg>
-{
-    static ::size_t size(const LocalSpaceArg& value) { return value.size_; }
-    static void* ptr(LocalSpaceArg&) { return NULL; }
-};
-
-} 
-//! \endcond
-
-inline LocalSpaceArg
-__local(::size_t size)
-{
-    LocalSpaceArg ret = { size };
-    return ret;
-}
-
-//class KernelFunctor;
-
-/*! \class Kernel
- * \brief Kernel interface that implements cl_kernel
- */
-class Kernel : public detail::Wrapper<cl_kernel>
-{
-public:
-    inline Kernel(const Program& program, const char* name, cl_int* err = NULL);
-
-    Kernel() { }
-
-    Kernel(const Kernel& kernel) : detail::Wrapper<cl_type>(kernel) { }
-
-    Kernel(const cl_kernel& kernel) : detail::Wrapper<cl_type>(kernel) { }
-
-    Kernel& operator = (const Kernel& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Kernel& operator = (const cl_kernel& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    template <typename T>
-    cl_int getInfo(cl_kernel_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetKernelInfo, object_, name, param),
-            __GET_KERNEL_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_kernel_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_kernel_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    template <typename T>
-    cl_int getWorkGroupInfo(
-        const Device& device, cl_kernel_work_group_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(
-                &::clGetKernelWorkGroupInfo, object_, device(), name, param),
-                __GET_KERNEL_WORK_GROUP_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_kernel_work_group_info, name>::param_type
-        getWorkGroupInfo(const Device& device, cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-        detail::cl_kernel_work_group_info, name>::param_type param;
-        cl_int result = getWorkGroupInfo(device, name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    template <typename T>
-    cl_int setArg(cl_uint index, T value)
-    {
-        return detail::errHandler(
-            ::clSetKernelArg(
-                object_,
-                index,
-                detail::KernelArgumentHandler<T>::size(value),
-                detail::KernelArgumentHandler<T>::ptr(value)),
-            __SET_KERNEL_ARGS_ERR);
-    }
-
-    cl_int setArg(cl_uint index, ::size_t size, void* argPtr)
-    {
-        return detail::errHandler(
-            ::clSetKernelArg(object_, index, size, argPtr),
-            __SET_KERNEL_ARGS_ERR);
-    }
-};
-
-__GET_INFO_HELPER_WITH_RETAIN(cl::Kernel)
-
-/*! \class Program
- * \brief Program interface that implements cl_program.
- */
-class Program : public detail::Wrapper<cl_program>
-{
-public:
-    typedef VECTOR_CLASS<std::pair<const void*, ::size_t> > Binaries;
-    typedef VECTOR_CLASS<std::pair<const char*, ::size_t> > Sources;
-
-    Program(
-        const STRING_CLASS& source,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-
-        const char * strings = source.c_str();
-        const ::size_t length  = source.size();
-
-        Context context = Context::getDefault(err);
-
-        object_ = ::clCreateProgramWithSource(
-            context(), (cl_uint)1, &strings, &length, &error);
-
-        detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
-
-        if (error == CL_SUCCESS) {
-
-            error = ::clBuildProgram(
-                object_,
-                0,
-                NULL,
-                "",
-                NULL,
-                NULL);
-
-            detail::errHandler(error, __BUILD_PROGRAM_ERR);
-        }
-
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Program(
-        const STRING_CLASS& source,
-		bool build,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-
-        const char * strings = source.c_str();
-        const ::size_t length  = source.size();
-
-        Context context = Context::getDefault(err);
-
-        object_ = ::clCreateProgramWithSource(
-            context(), (cl_uint)1, &strings, &length, &error);
-
-        detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
-
-        if (error == CL_SUCCESS && build) {
-
-            error = ::clBuildProgram(
-                object_,
-                0,
-                NULL,
-                "",
-                NULL,
-                NULL);
-
-            detail::errHandler(error, __BUILD_PROGRAM_ERR);
-        }
-
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Program(
-        const Context& context,
-        const STRING_CLASS& source,
-        bool build = false,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-
-        const char * strings = source.c_str();
-        const ::size_t length  = source.size();
-
-        object_ = ::clCreateProgramWithSource(
-            context(), (cl_uint)1, &strings, &length, &error);
-
-        detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
-
-        if (error == CL_SUCCESS && build) {
-
-            error = ::clBuildProgram(
-                object_,
-                0,
-                NULL,
-                "",
-                NULL,
-                NULL);
-
-            detail::errHandler(error, __BUILD_PROGRAM_ERR);
-        }
-
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Program(
-        const Context& context,
-        const Sources& sources,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-
-        const ::size_t n = (::size_t)sources.size();
-        ::size_t* lengths = (::size_t*) alloca(n * sizeof(::size_t));
-        const char** strings = (const char**) alloca(n * sizeof(const char*));
-
-        for (::size_t i = 0; i < n; ++i) {
-            strings[i] = sources[(int)i].first;
-            lengths[i] = sources[(int)i].second;
-        }
-
-        object_ = ::clCreateProgramWithSource(
-            context(), (cl_uint)n, strings, lengths, &error);
-
-        detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Program(
-        const Context& context,
-        const VECTOR_CLASS<Device>& devices,
-        const Binaries& binaries,
-        VECTOR_CLASS<cl_int>* binaryStatus = NULL,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-        const ::size_t n = binaries.size();
-        ::size_t* lengths = (::size_t*) alloca(n * sizeof(::size_t));
-        const unsigned char** images = (const unsigned char**) alloca(n * sizeof(const void*));
-
-        for (::size_t i = 0; i < n; ++i) {
-            images[i] = (const unsigned char*)binaries[(int)i].first;
-            lengths[i] = binaries[(int)i].second;
-        }
-
-        object_ = ::clCreateProgramWithBinary(
-            context(), (cl_uint) devices.size(),
-            (cl_device_id*)&devices.front(),
-            lengths, images, binaryStatus != NULL
-               ? (cl_int*) &binaryStatus->front()
-               : NULL, &error);
-
-        detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    Program() { }
-
-    Program(const Program& program) : detail::Wrapper<cl_type>(program) { }
-
-    Program(const cl_program& program) : detail::Wrapper<cl_type>(program) { }
-
-    Program& operator = (const Program& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    Program& operator = (const cl_program& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    cl_int build(
-        const VECTOR_CLASS<Device>& devices,
-        const char* options = NULL,
-        void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
-        void* data = NULL) const
-    {
-        return detail::errHandler(
-            ::clBuildProgram(
-                object_,
-                (cl_uint)
-                devices.size(),
-                (cl_device_id*)&devices.front(),
-                options,
-                notifyFptr,
-                data),
-                __BUILD_PROGRAM_ERR);
-    }
-
-    cl_int build(
-        const char* options = NULL,
-        void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
-        void* data = NULL) const
-    {
-        return detail::errHandler(
-            ::clBuildProgram(
-                object_,
-                0,
-                NULL,
-                options,
-                notifyFptr,
-                data),
-                __BUILD_PROGRAM_ERR);
-    }
-
-    template <typename T>
-    cl_int getInfo(cl_program_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(&::clGetProgramInfo, object_, name, param),
-            __GET_PROGRAM_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_program_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_program_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    template <typename T>
-    cl_int getBuildInfo(
-        const Device& device, cl_program_build_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(
-                &::clGetProgramBuildInfo, object_, device(), name, param),
-                __GET_PROGRAM_BUILD_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_program_build_info, name>::param_type
-    getBuildInfo(const Device& device, cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_program_build_info, name>::param_type param;
-        cl_int result = getBuildInfo(device, name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    cl_int createKernels(VECTOR_CLASS<Kernel>* kernels)
-    {
-        cl_uint numKernels;
-        cl_int err = ::clCreateKernelsInProgram(object_, 0, NULL, &numKernels);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR);
-        }
-
-        Kernel* value = (Kernel*) alloca(numKernels * sizeof(Kernel));
-        err = ::clCreateKernelsInProgram(
-            object_, numKernels, (cl_kernel*) value, NULL);
-        if (err != CL_SUCCESS) {
-            return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR);
-        }
-
-        kernels->assign(&value[0], &value[numKernels]);
-        return CL_SUCCESS;
-    }
-};
-
-template<>
-inline VECTOR_CLASS<char *> cl::Program::getInfo<CL_PROGRAM_BINARIES>(cl_int* err) const
-{
-    VECTOR_CLASS< ::size_t> sizes = getInfo<CL_PROGRAM_BINARY_SIZES>();
-    VECTOR_CLASS<char *> binaries;
-    for (VECTOR_CLASS< ::size_t>::iterator s = sizes.begin(); s != sizes.end(); ++s) 
-    {
-        char *ptr = NULL;
-        if (*s != 0) 
-            ptr = new char[*s];
-        binaries.push_back(ptr);
-    }
-    
-    cl_int result = getInfo(CL_PROGRAM_BINARIES, &binaries);
-    if (err != NULL) {
-        *err = result;
-    }
-    return binaries;
-}
-
-__GET_INFO_HELPER_WITH_RETAIN(cl::Program)
-
-inline Kernel::Kernel(const Program& program, const char* name, cl_int* err)
-{
-    cl_int error;
-
-    object_ = ::clCreateKernel(program(), name, &error);
-    detail::errHandler(error, __CREATE_KERNEL_ERR);
-
-    if (err != NULL) {
-        *err = error;
-    }
-
-}
-
-/*! \class CommandQueue
- * \brief CommandQueue interface for cl_command_queue.
- */
-class CommandQueue : public detail::Wrapper<cl_command_queue>
-{
-private:
-    static volatile int default_initialized_;
-    static CommandQueue default_;
-    static volatile cl_int default_error_;
-public:
-   CommandQueue(
-        cl_command_queue_properties properties,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-
-        Context context = Context::getDefault(&error);
-        detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
-
-        if (error != CL_SUCCESS) {
-            if (err != NULL) {
-                *err = error;
-            }
-        }
-        else {
-            Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
-
-            object_ = ::clCreateCommandQueue(
-                context(), device(), properties, &error);
-
-            detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
-            if (err != NULL) {
-                *err = error;
-            }
-        }
-    }
-
-    CommandQueue(
-        const Context& context,
-        const Device& device,
-        cl_command_queue_properties properties = 0,
-        cl_int* err = NULL)
-    {
-        cl_int error;
-        object_ = ::clCreateCommandQueue(
-            context(), device(), properties, &error);
-
-        detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-    }
-
-    static CommandQueue getDefault(cl_int * err = NULL) 
-    {
-        int state = detail::compare_exchange(
-            &default_initialized_, 
-            __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED);
-
-        if (state & __DEFAULT_INITIALIZED) {
-            if (err != NULL) {
-                *err = default_error_;
-            }
-            return default_;
-        }
-
-        if (state & __DEFAULT_BEING_INITIALIZED) {
-              // Assume writes will propagate eventually...
-              while(default_initialized_ != __DEFAULT_INITIALIZED) {
-                                ;
-              }
-
-            if (err != NULL) {
-                *err = default_error_;
-            }
-            return default_;
-        }
-
-        cl_int error;
-
-        Context context = Context::getDefault(&error);
-        detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
-
-        if (error != CL_SUCCESS) {
-            if (err != NULL) {
-                *err = error;
-            }
-        }
-        else {
-            Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
-
-
-            default_ = CommandQueue(context, device, 0, &error);
-
-            detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
-            if (err != NULL) {
-                *err = error;
-            }
-        }
-
-        default_error_ = error;
-        // Assume writes will propagate eventually...
-        default_initialized_ = __DEFAULT_INITIALIZED;
-        if (err != NULL) {
-            *err = default_error_;
-        }
-        return default_;
-
-    }
-
-    CommandQueue() { }
-
-    CommandQueue(const CommandQueue& commandQueue) : detail::Wrapper<cl_type>(commandQueue) { }
-
-    CommandQueue(const cl_command_queue& commandQueue) : detail::Wrapper<cl_type>(commandQueue) { }
-
-    CommandQueue& operator = (const CommandQueue& rhs)
-    {
-        if (this != &rhs) {
-            detail::Wrapper<cl_type>::operator=(rhs);
-        }
-        return *this;
-    }
-
-    CommandQueue& operator = (const cl_command_queue& rhs)
-    {
-        detail::Wrapper<cl_type>::operator=(rhs);
-        return *this;
-    }
-
-    template <typename T>
-    cl_int getInfo(cl_command_queue_info name, T* param) const
-    {
-        return detail::errHandler(
-            detail::getInfo(
-                &::clGetCommandQueueInfo, object_, name, param),
-                __GET_COMMAND_QUEUE_INFO_ERR);
-    }
-
-    template <cl_int name> typename
-    detail::param_traits<detail::cl_command_queue_info, name>::param_type
-    getInfo(cl_int* err = NULL) const
-    {
-        typename detail::param_traits<
-            detail::cl_command_queue_info, name>::param_type param;
-        cl_int result = getInfo(name, &param);
-        if (err != NULL) {
-            *err = result;
-        }
-        return param;
-    }
-
-    cl_int enqueueReadBuffer(
-        const Buffer& buffer,
-        cl_bool blocking,
-        ::size_t offset,
-        ::size_t size,
-        void* ptr,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueReadBuffer(
-                object_, buffer(), blocking, offset, size,
-                ptr,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_READ_BUFFER_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueWriteBuffer(
-        const Buffer& buffer,
-        cl_bool blocking,
-        ::size_t offset,
-        ::size_t size,
-        const void* ptr,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueWriteBuffer(
-                object_, buffer(), blocking, offset, size,
-                ptr,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-                __ENQUEUE_WRITE_BUFFER_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueCopyBuffer(
-        const Buffer& src,
-        const Buffer& dst,
-        ::size_t src_offset,
-        ::size_t dst_offset,
-        ::size_t size,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueCopyBuffer(
-                object_, src(), dst(), src_offset, dst_offset, size,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQEUE_COPY_BUFFER_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-#if defined(CL_VERSION_1_1)
-    cl_int enqueueReadBufferRect(
-        const Buffer& buffer,
-        cl_bool blocking,
-        const size_t<3>& buffer_offset,
-        const size_t<3>& host_offset,
-        const size_t<3>& region,
-        ::size_t buffer_row_pitch,
-        ::size_t buffer_slice_pitch,
-        ::size_t host_row_pitch,
-        ::size_t host_slice_pitch,
-        void *ptr,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueReadBufferRect(
-                object_, 
-                buffer(), 
-                blocking, 
-                (const ::size_t *)buffer_offset,
-                (const ::size_t *)host_offset,
-                (const ::size_t *)region,
-                buffer_row_pitch,
-                buffer_slice_pitch,
-                host_row_pitch,
-                host_slice_pitch,
-                ptr,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-                __ENQUEUE_READ_BUFFER_RECT_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-
-    cl_int enqueueWriteBufferRect(
-        const Buffer& buffer,
-        cl_bool blocking,
-        const size_t<3>& buffer_offset,
-        const size_t<3>& host_offset,
-        const size_t<3>& region,
-        ::size_t buffer_row_pitch,
-        ::size_t buffer_slice_pitch,
-        ::size_t host_row_pitch,
-        ::size_t host_slice_pitch,
-        void *ptr,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueWriteBufferRect(
-                object_, 
-                buffer(), 
-                blocking, 
-                (const ::size_t *)buffer_offset,
-                (const ::size_t *)host_offset,
-                (const ::size_t *)region,
-                buffer_row_pitch,
-                buffer_slice_pitch,
-                host_row_pitch,
-                host_slice_pitch,
-                ptr,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-                __ENQUEUE_WRITE_BUFFER_RECT_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueCopyBufferRect(
-        const Buffer& src,
-        const Buffer& dst,
-        const size_t<3>& src_origin,
-        const size_t<3>& dst_origin,
-        const size_t<3>& region,
-        ::size_t src_row_pitch,
-        ::size_t src_slice_pitch,
-        ::size_t dst_row_pitch,
-        ::size_t dst_slice_pitch,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueCopyBufferRect(
-                object_, 
-                src(), 
-                dst(), 
-                (const ::size_t *)src_origin, 
-                (const ::size_t *)dst_origin, 
-                (const ::size_t *)region,
-                src_row_pitch,
-                src_slice_pitch,
-                dst_row_pitch,
-                dst_slice_pitch,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQEUE_COPY_BUFFER_RECT_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-#endif
-
-    cl_int enqueueReadImage(
-        const Image& image,
-        cl_bool blocking,
-        const size_t<3>& origin,
-        const size_t<3>& region,
-        ::size_t row_pitch,
-        ::size_t slice_pitch,
-        void* ptr,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueReadImage(
-                object_, image(), blocking, (const ::size_t *) origin,
-                (const ::size_t *) region, row_pitch, slice_pitch, ptr,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_READ_IMAGE_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueWriteImage(
-        const Image& image,
-        cl_bool blocking,
-        const size_t<3>& origin,
-        const size_t<3>& region,
-        ::size_t row_pitch,
-        ::size_t slice_pitch,
-        void* ptr,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueWriteImage(
-                object_, image(), blocking, (const ::size_t *) origin,
-                (const ::size_t *) region, row_pitch, slice_pitch, ptr,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_WRITE_IMAGE_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueCopyImage(
-        const Image& src,
-        const Image& dst,
-        const size_t<3>& src_origin,
-        const size_t<3>& dst_origin,
-        const size_t<3>& region,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueCopyImage(
-                object_, src(), dst(), (const ::size_t *) src_origin,
-                (const ::size_t *)dst_origin, (const ::size_t *) region,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_COPY_IMAGE_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueCopyImageToBuffer(
-        const Image& src,
-        const Buffer& dst,
-        const size_t<3>& src_origin,
-        const size_t<3>& region,
-        ::size_t dst_offset,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueCopyImageToBuffer(
-                object_, src(), dst(), (const ::size_t *) src_origin,
-                (const ::size_t *) region, dst_offset,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueCopyBufferToImage(
-        const Buffer& src,
-        const Image& dst,
-        ::size_t src_offset,
-        const size_t<3>& dst_origin,
-        const size_t<3>& region,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueCopyBufferToImage(
-                object_, src(), dst(), src_offset,
-                (const ::size_t *) dst_origin, (const ::size_t *) region,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    void* enqueueMapBuffer(
-        const Buffer& buffer,
-        cl_bool blocking,
-        cl_map_flags flags,
-        ::size_t offset,
-        ::size_t size,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL,
-        cl_int* err = NULL) const
-    {
-        cl_int error;
-        void * result = ::clEnqueueMapBuffer(
-            object_, buffer(), blocking, flags, offset, size,
-            (events != NULL) ? (cl_uint) events->size() : 0,
-            (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-            (cl_event*) event,
-            &error);
-
-        detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
-        if (err != NULL) {
-            *err = error;
-        }
-        return result;
-    }
-
-    void* enqueueMapImage(
-        const Image& buffer,
-        cl_bool blocking,
-        cl_map_flags flags,
-        const size_t<3>& origin,
-        const size_t<3>& region,
-        ::size_t * row_pitch,
-        ::size_t * slice_pitch,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL,
-        cl_int* err = NULL) const
-    {
-        cl_int error;
-        void * result = ::clEnqueueMapImage(
-            object_, buffer(), blocking, flags,
-            (const ::size_t *) origin, (const ::size_t *) region,
-            row_pitch, slice_pitch,
-            (events != NULL) ? (cl_uint) events->size() : 0,
-            (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-            (cl_event*) event,
-            &error);
-
-        detail::errHandler(error, __ENQUEUE_MAP_IMAGE_ERR);
-        if (err != NULL) {
-              *err = error;
-        }
-        return result;
-    }
-
-    cl_int enqueueUnmapMemObject(
-        const Memory& memory,
-        void* mapped_ptr,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueUnmapMemObject(
-                object_, memory(), mapped_ptr,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_UNMAP_MEM_OBJECT_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueNDRangeKernel(
-        const Kernel& kernel,
-        const NDRange& offset,
-        const NDRange& global,
-        const NDRange& local = NullRange,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueNDRangeKernel(
-                object_, kernel(), (cl_uint) global.dimensions(),
-                offset.dimensions() != 0 ? (const ::size_t*) offset : NULL,
-                (const ::size_t*) global,
-                local.dimensions() != 0 ? (const ::size_t*) local : NULL,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_NDRANGE_KERNEL_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueTask(
-        const Kernel& kernel,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueTask(
-                object_, kernel(),
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_TASK_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueNativeKernel(
-        void (*userFptr)(void *),
-        std::pair<void*, ::size_t> args,
-        const VECTOR_CLASS<Memory>* mem_objects = NULL,
-        const VECTOR_CLASS<const void*>* mem_locs = NULL,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL) const
-    {
-        cl_mem * mems = (mem_objects != NULL && mem_objects->size() > 0) 
-            ? (cl_mem*) alloca(mem_objects->size() * sizeof(cl_mem))
-            : NULL;
-
-        if (mems != NULL) {
-            for (unsigned int i = 0; i < mem_objects->size(); i++) {
-                mems[i] = ((*mem_objects)[i])();
-            }
-        }
-
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            ::clEnqueueNativeKernel(
-                object_, userFptr, args.first, args.second,
-                (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
-                mems,
-                (mem_locs != NULL) ? (const void **) &mem_locs->front() : NULL,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_NATIVE_KERNEL);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-
-    cl_int enqueueMarker(Event* event = NULL) const
-    {
-        return detail::errHandler(
-            ::clEnqueueMarker(object_, (cl_event*) event),
-            __ENQUEUE_MARKER_ERR);
-    }
-
-    cl_int enqueueWaitForEvents(const VECTOR_CLASS<Event>& events) const
-    {
-        return detail::errHandler(
-            ::clEnqueueWaitForEvents(
-                object_,
-                (cl_uint) events.size(),
-                (const cl_event*) &events.front()),
-            __ENQUEUE_WAIT_FOR_EVENTS_ERR);
-    }
-
-    cl_int enqueueAcquireGLObjects(
-         const VECTOR_CLASS<Memory>* mem_objects = NULL,
-         const VECTOR_CLASS<Event>* events = NULL,
-         Event* event = NULL) const
-     {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-             ::clEnqueueAcquireGLObjects(
-                 object_,
-                 (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
-                 (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
-                 (events != NULL) ? (cl_uint) events->size() : 0,
-                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                 (event != NULL) ? &tmp : NULL),
-             __ENQUEUE_ACQUIRE_GL_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-     }
-
-    cl_int enqueueReleaseGLObjects(
-         const VECTOR_CLASS<Memory>* mem_objects = NULL,
-         const VECTOR_CLASS<Event>* events = NULL,
-         Event* event = NULL) const
-     {
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-             ::clEnqueueReleaseGLObjects(
-                 object_,
-                 (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
-                 (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
-                 (events != NULL) ? (cl_uint) events->size() : 0,
-                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
-                 (event != NULL) ? &tmp : NULL),
-             __ENQUEUE_RELEASE_GL_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-     }
-
-#if defined (USE_DX_INTEROP)
-typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueAcquireD3D10ObjectsKHR)(
-    cl_command_queue command_queue, cl_uint num_objects,
-    const cl_mem* mem_objects, cl_uint num_events_in_wait_list,
-    const cl_event* event_wait_list, cl_event* event);
-typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
-    cl_command_queue command_queue, cl_uint num_objects,
-    const cl_mem* mem_objects,  cl_uint num_events_in_wait_list,
-    const cl_event* event_wait_list, cl_event* event);
-
-    cl_int enqueueAcquireD3D10Objects(
-         const VECTOR_CLASS<Memory>* mem_objects = NULL,
-         const VECTOR_CLASS<Event>* events = NULL,
-         Event* event = NULL) const
-     {
-         static PFN_clEnqueueAcquireD3D10ObjectsKHR pfn_clEnqueueAcquireD3D10ObjectsKHR = NULL;
-         __INIT_CL_EXT_FCN_PTR(clEnqueueAcquireD3D10ObjectsKHR);
-        
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-             pfn_clEnqueueAcquireD3D10ObjectsKHR(
-                 object_,
-                 (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
-                 (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
-                 (events != NULL) ? (cl_uint) events->size() : 0,
-                 (events != NULL) ? (cl_event*) &events->front() : NULL,
-                 (event != NULL) ? &tmp : NULL),
-             __ENQUEUE_ACQUIRE_GL_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-     }
-
-    cl_int enqueueReleaseD3D10Objects(
-         const VECTOR_CLASS<Memory>* mem_objects = NULL,
-         const VECTOR_CLASS<Event>* events = NULL,
-         Event* event = NULL) const
-    {
-        static PFN_clEnqueueReleaseD3D10ObjectsKHR pfn_clEnqueueReleaseD3D10ObjectsKHR = NULL;
-        __INIT_CL_EXT_FCN_PTR(clEnqueueReleaseD3D10ObjectsKHR);
-
-        cl_event tmp;
-        cl_int err = detail::errHandler(
-            pfn_clEnqueueReleaseD3D10ObjectsKHR(
-                object_,
-                (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
-                (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
-                (events != NULL) ? (cl_uint) events->size() : 0,
-                (events != NULL) ? (cl_event*) &events->front() : NULL,
-                (event != NULL) ? &tmp : NULL),
-            __ENQUEUE_RELEASE_GL_ERR);
-
-        if (event != NULL && err == CL_SUCCESS)
-            *event = tmp;
-
-        return err;
-    }
-#endif
-
-    cl_int enqueueBarrier() const
-    {
-        return detail::errHandler(
-            ::clEnqueueBarrier(object_),
-            __ENQUEUE_BARRIER_ERR);
-    }
-
-    cl_int flush() const
-    {
-        return detail::errHandler(::clFlush(object_), __FLUSH_ERR);
-    }
-
-    cl_int finish() const
-    {
-        return detail::errHandler(::clFinish(object_), __FINISH_ERR);
-    }
-};
-
-__GET_INFO_HELPER_WITH_RETAIN(cl::CommandQueue)
-
-#ifdef _WIN32
-__declspec(selectany) volatile int CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
-__declspec(selectany) CommandQueue CommandQueue::default_;
-__declspec(selectany) volatile cl_int CommandQueue::default_error_ = CL_SUCCESS;
-#else
-__attribute__((weak)) volatile int CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
-__attribute__((weak)) CommandQueue CommandQueue::default_;
-__attribute__((weak)) volatile cl_int CommandQueue::default_error_ = CL_SUCCESS;
-#endif
-
-inline cl_int enqueueReadBuffer(
-    const Buffer& buffer,
-    cl_bool blocking,
-    ::size_t offset,
-    ::size_t size,
-    void* ptr,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueReadBuffer(buffer, blocking, offset, size, ptr, events, event);
-}
-
-inline cl_int enqueueWriteBuffer(
-        const Buffer& buffer,
-        cl_bool blocking,
-        ::size_t offset,
-        ::size_t size,
-        const void* ptr,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueWriteBuffer(buffer, blocking, offset, size, ptr, events, event);
-}
-
-inline cl_int enqueueCopyBuffer(
-        const Buffer& src,
-        const Buffer& dst,
-        ::size_t src_offset,
-        ::size_t dst_offset,
-        ::size_t size,
-        const VECTOR_CLASS<Event>* events = NULL,
-        Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueCopyBuffer(src, dst, src_offset, dst_offset, size, events, event);
-}
-
-#if defined(CL_VERSION_1_1)
-inline cl_int enqueueReadBufferRect(
-    const Buffer& buffer,
-    cl_bool blocking,
-    const size_t<3>& buffer_offset,
-    const size_t<3>& host_offset,
-    const size_t<3>& region,
-    ::size_t buffer_row_pitch,
-    ::size_t /*buffer_slice_pitch*/,
-    ::size_t host_row_pitch,
-    ::size_t host_slice_pitch,
-    void *ptr,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueReadBufferRect(
-        buffer, 
-        blocking, 
-        buffer_offset, 
-        host_offset,
-        region,
-        buffer_row_pitch,
-        host_slice_pitch,
-        host_row_pitch,
-        host_slice_pitch,
-        ptr, 
-        events, 
-        event);
-}
-
-inline cl_int enqueueWriteBufferRect(
-    const Buffer& buffer,
-    cl_bool blocking,
-    const size_t<3>& buffer_offset,
-    const size_t<3>& host_offset,
-    const size_t<3>& region,
-    ::size_t buffer_row_pitch,
-    ::size_t buffer_slice_pitch,
-    ::size_t host_row_pitch,
-    ::size_t host_slice_pitch,
-    void *ptr,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueWriteBufferRect(
-        buffer, 
-        blocking, 
-        buffer_offset, 
-        host_offset,
-        region,
-        buffer_row_pitch,
-        buffer_slice_pitch,
-        host_row_pitch,
-        host_slice_pitch,
-        ptr, 
-        events, 
-        event);
-}
-
-inline cl_int enqueueCopyBufferRect(
-    const Buffer& src,
-    const Buffer& dst,
-    const size_t<3>& src_origin,
-    const size_t<3>& dst_origin,
-    const size_t<3>& region,
-    ::size_t src_row_pitch,
-    ::size_t src_slice_pitch,
-    ::size_t dst_row_pitch,
-    ::size_t dst_slice_pitch,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueCopyBufferRect(
-        src,
-        dst,
-        src_origin,
-        dst_origin,
-        region,
-        src_row_pitch,
-        src_slice_pitch,
-        dst_row_pitch,
-        dst_slice_pitch,
-        events, 
-        event);
-}
-#endif
-
-inline cl_int enqueueReadImage(
-    const Image& image,
-    cl_bool blocking,
-    const size_t<3>& origin,
-    const size_t<3>& region,
-    ::size_t row_pitch,
-    ::size_t slice_pitch,
-    void* ptr,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL) 
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueReadImage(
-        image,
-        blocking,
-        origin,
-        region,
-        row_pitch,
-        slice_pitch,
-        ptr,
-        events, 
-        event);
-}
-
-inline cl_int enqueueWriteImage(
-    const Image& image,
-    cl_bool blocking,
-    const size_t<3>& origin,
-    const size_t<3>& region,
-    ::size_t row_pitch,
-    ::size_t slice_pitch,
-    void* ptr,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueWriteImage(
-        image,
-        blocking,
-        origin,
-        region,
-        row_pitch,
-        slice_pitch,
-        ptr,
-        events, 
-        event);
-}
-
-inline cl_int enqueueCopyImage(
-    const Image& src,
-    const Image& dst,
-    const size_t<3>& src_origin,
-    const size_t<3>& dst_origin,
-    const size_t<3>& region,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueCopyImage(
-        src,
-        dst,
-        src_origin,
-        dst_origin,
-        region,
-        events,
-        event);
-}
-
-inline cl_int enqueueCopyImageToBuffer(
-    const Image& src,
-    const Buffer& dst,
-    const size_t<3>& src_origin,
-    const size_t<3>& region,
-    ::size_t dst_offset,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueCopyImageToBuffer(
-        src,
-        dst,
-        src_origin,
-        region,
-        dst_offset,
-        events,
-        event);
-}
-
-inline cl_int enqueueCopyBufferToImage(
-    const Buffer& src,
-    const Image& dst,
-    ::size_t src_offset,
-    const size_t<3>& dst_origin,
-    const size_t<3>& region,
-    const VECTOR_CLASS<Event>* events = NULL,
-    Event* event = NULL)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.enqueueCopyBufferToImage(
-        src,
-        dst,
-        src_offset,
-        dst_origin,
-        region,
-        events,
-        event);
-}
-
-
-inline cl_int flush(void)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-    return queue.flush();
-}
-
-inline cl_int finish(void)
-{
-    cl_int error;
-    CommandQueue queue = CommandQueue::getDefault(&error);
-
-    if (error != CL_SUCCESS) {
-        return error;
-    }
-
-
-    return queue.finish();
-}
-
-
-// Kernel Functor support
-// New interface as of September 2011
-// Requires the C++11 std::tr1::function (note do not support TR1)
-// Visual Studio 2010 and GCC 4.2
-
-#if (defined(_WIN32) && (_MSC_VER >= 1600)) || defined(linux) || defined(__APPLE__) || defined(__MACOSX)
-struct EnqueueArgs
-{
-    CommandQueue queue_;
-    NDRange offset_;
-    NDRange global_;
-    NDRange local_;
-
-    EnqueueArgs(NDRange global) : 
-      queue_(CommandQueue::getDefault()),
-      offset_(NullRange), 
-      global_(global),
-      local_(NullRange)
-    {
-
-    }
-
-    EnqueueArgs(NDRange global, NDRange local) : 
-      queue_(CommandQueue::getDefault()),
-      offset_(NullRange), 
-      global_(global),
-      local_(local)
-    {
-
-    }
-
-    EnqueueArgs(NDRange offset, NDRange global, NDRange local) : 
-      queue_(CommandQueue::getDefault()),
-      offset_(offset), 
-      global_(global),
-      local_(local)
-    {
-
-    }
-
-    EnqueueArgs(CommandQueue queue, NDRange global) : 
-      queue_(queue),
-      offset_(NullRange), 
-      global_(global),
-      local_(NullRange)
-    {
-
-    }
-
-    EnqueueArgs(CommandQueue queue, NDRange global, NDRange local) : 
-      queue_(queue),
-      offset_(NullRange), 
-      global_(global),
-      local_(local)
-    {
-
-    }
-
-    EnqueueArgs(CommandQueue queue, NDRange offset, NDRange global, NDRange local) : 
-      queue_(queue),
-      offset_(offset), 
-      global_(global),
-      local_(local)
-    {
-
-    }
-};
-
-namespace detail {
-
-class NullType {};
-
-template<int index, typename T0>
-struct SetArg
-{
-    static void set (Kernel kernel, T0 arg)
-    {
-        kernel.setArg(index, arg);
-    }
-};
-
-
-template<int index>
-struct SetArg<index, NullType>
-{
-    static void set (Kernel kernel, NullType)
-    {
-    }
-};
-
-template<typename T>
-struct MoveToDevice
-{
-	static void move(CommandQueue, T)
-	{
-	}
-};
-
-
-template<typename T>
-struct MoveFromDevice
-{
-	static void move(CommandQueue, T)
-	{
-	}
-};
-
-
-template <
-   typename T0,   typename T1,   typename T2,   typename T3,
-   typename T4,   typename T5,   typename T6,   typename T7,
-   typename T8,   typename T9,   typename T10,   typename T11,
-   typename T12,   typename T13,   typename T14,   typename T15,
-   typename T16,   typename T17,   typename T18,   typename T19,
-   typename T20,   typename T21,   typename T22,   typename T23,
-   typename T24,   typename T25,   typename T26,   typename T27,
-   typename T28,   typename T29,   typename T30,   typename T31,
-   typename T32,   typename T33,   typename T34,   typename T35,
-   typename T36,   typename T37,   typename T38,   typename T39,
-   typename T40,   typename T41,   typename T42,   typename T43,
-   typename T44,   typename T45,   typename T46,   typename T47,
-   typename T48,   typename T49,   typename T50,   typename T51,
-   typename T52,   typename T53,   typename T54,   typename T55,
-   typename T56,   typename T57,   typename T58,   typename T59,
-   typename T60,   typename T61,   typename T62,   typename T63,
-   typename T64,   typename T65,   typename T66,   typename T67,
-   typename T68,   typename T69,   typename T70,   typename T71,
-   typename T72,   typename T73,   typename T74,   typename T75,
-   typename T76,   typename T77,   typename T78,   typename T79,
-   typename T80,   typename T81,   typename T82,   typename T83,
-   typename T84,   typename T85,   typename T86,   typename T87,
-   typename T88,   typename T89,   typename T90,   typename T91,
-   typename T92,   typename T93,   typename T94,   typename T95,
-   typename T96,   typename T97,   typename T98,   typename T99,
-   typename T100,   typename T101,   typename T102,   typename T103,
-   typename T104,   typename T105,   typename T106,   typename T107,
-   typename T108,   typename T109,   typename T110,   typename T111,
-   typename T112,   typename T113,   typename T114,   typename T115,
-   typename T116,   typename T117,   typename T118,   typename T119,
-   typename T120,   typename T121,   typename T122,   typename T123,
-   typename T124,   typename T125,   typename T126,   typename T127>
-class KernelFunctorGlobal
-{
-private:
-    Kernel kernel_;
-
-public:
-   KernelFunctorGlobal(
-        Kernel kernel,
-        cl_int * err = NULL) :
-            kernel_(kernel)
-    {}
-
-   KernelFunctorGlobal(
-        const Program& program,
-        const STRING_CLASS name,
-        cl_int * err = NULL) :
-            kernel_(program, name.c_str(), err)
-    {}
-
-    Event operator() (
-        const EnqueueArgs& args,
-        T0 t0,
-        T1 t1 = NullType(),
-        T2 t2 = NullType(),
-        T3 t3 = NullType(),
-        T4 t4 = NullType(),
-        T5 t5 = NullType(),
-        T6 t6 = NullType(),
-        T7 t7 = NullType(),
-        T8 t8 = NullType(),
-        T9 t9 = NullType(),
-        T10 t10 = NullType(),
-        T11 t11 = NullType(),
-        T12 t12 = NullType(),
-        T13 t13 = NullType(),
-        T14 t14 = NullType(),
-        T15 t15 = NullType(),
-        T16 t16 = NullType(),
-        T17 t17 = NullType(),
-        T18 t18 = NullType(),
-        T19 t19 = NullType(),
-        T20 t20 = NullType(),
-        T21 t21 = NullType(),
-        T22 t22 = NullType(),
-        T23 t23 = NullType(),
-        T24 t24 = NullType(),
-        T25 t25 = NullType(),
-        T26 t26 = NullType(),
-        T27 t27 = NullType(),
-        T28 t28 = NullType(),
-        T29 t29 = NullType(),
-        T30 t30 = NullType(),
-        T31 t31 = NullType(),
-        T32 t32 = NullType(),
-        T33 t33 = NullType(),
-        T34 t34 = NullType(),
-        T35 t35 = NullType(),
-        T36 t36 = NullType(),
-        T37 t37 = NullType(),
-        T38 t38 = NullType(),
-        T39 t39 = NullType(),
-        T40 t40 = NullType(),
-        T41 t41 = NullType(),
-        T42 t42 = NullType(),
-        T43 t43 = NullType(),
-        T44 t44 = NullType(),
-        T45 t45 = NullType(),
-        T46 t46 = NullType(),
-        T47 t47 = NullType(),
-        T48 t48 = NullType(),
-        T49 t49 = NullType(),
-        T50 t50 = NullType(),
-        T51 t51 = NullType(),
-        T52 t52 = NullType(),
-        T53 t53 = NullType(),
-        T54 t54 = NullType(),
-        T55 t55 = NullType(),
-        T56 t56 = NullType(),
-        T57 t57 = NullType(),
-        T58 t58 = NullType(),
-        T59 t59 = NullType(),
-        T60 t60 = NullType(),
-        T61 t61 = NullType(),
-        T62 t62 = NullType(),
-        T63 t63 = NullType(),
-        T64 t64 = NullType(),
-        T65 t65 = NullType(),
-        T66 t66 = NullType(),
-        T67 t67 = NullType(),
-        T68 t68 = NullType(),
-        T69 t69 = NullType(),
-        T70 t70 = NullType(),
-        T71 t71 = NullType(),
-        T72 t72 = NullType(),
-        T73 t73 = NullType(),
-        T74 t74 = NullType(),
-        T75 t75 = NullType(),
-        T76 t76 = NullType(),
-        T77 t77 = NullType(),
-        T78 t78 = NullType(),
-        T79 t79 = NullType(),
-        T80 t80 = NullType(),
-        T81 t81 = NullType(),
-        T82 t82 = NullType(),
-        T83 t83 = NullType(),
-        T84 t84 = NullType(),
-        T85 t85 = NullType(),
-        T86 t86 = NullType(),
-        T87 t87 = NullType(),
-        T88 t88 = NullType(),
-        T89 t89 = NullType(),
-        T90 t90 = NullType(),
-        T91 t91 = NullType(),
-        T92 t92 = NullType(),
-        T93 t93 = NullType(),
-        T94 t94 = NullType(),
-        T95 t95 = NullType(),
-        T96 t96 = NullType(),
-        T97 t97 = NullType(),
-        T98 t98 = NullType(),
-        T99 t99 = NullType(),
-        T100 t100 = NullType(),
-        T101 t101 = NullType(),
-        T102 t102 = NullType(),
-        T103 t103 = NullType(),
-        T104 t104 = NullType(),
-        T105 t105 = NullType(),
-        T106 t106 = NullType(),
-        T107 t107 = NullType(),
-        T108 t108 = NullType(),
-        T109 t109 = NullType(),
-        T110 t110 = NullType(),
-        T111 t111 = NullType(),
-        T112 t112 = NullType(),
-        T113 t113 = NullType(),
-        T114 t114 = NullType(),
-        T115 t115 = NullType(),
-        T116 t116 = NullType(),
-        T117 t117 = NullType(),
-        T118 t118 = NullType(),
-        T119 t119 = NullType(),
-        T120 t120 = NullType(),
-        T121 t121 = NullType(),
-        T122 t122 = NullType(),
-        T123 t123 = NullType(),
-        T124 t124 = NullType(),
-        T125 t125 = NullType(),
-        T126 t126 = NullType(),
-        T127 t127 = NullType())
-    {
-        Event event;
-        SetArg<0, T0>::set(kernel_, t0);
-        SetArg<1, T1>::set(kernel_, t1);
-        SetArg<2, T2>::set(kernel_, t2);
-        SetArg<3, T3>::set(kernel_, t3);
-        SetArg<4, T4>::set(kernel_, t4);
-        SetArg<5, T5>::set(kernel_, t5);
-        SetArg<6, T6>::set(kernel_, t6);
-        SetArg<7, T7>::set(kernel_, t7);
-        SetArg<8, T8>::set(kernel_, t8);
-        SetArg<9, T9>::set(kernel_, t9);
-        SetArg<10, T10>::set(kernel_, t10);
-        SetArg<11, T11>::set(kernel_, t11);
-        SetArg<12, T12>::set(kernel_, t12);
-        SetArg<13, T13>::set(kernel_, t13);
-        SetArg<14, T14>::set(kernel_, t14);
-        SetArg<15, T15>::set(kernel_, t15);
-        SetArg<16, T16>::set(kernel_, t16);
-        SetArg<17, T17>::set(kernel_, t17);
-        SetArg<18, T18>::set(kernel_, t18);
-        SetArg<19, T19>::set(kernel_, t19);
-        SetArg<20, T20>::set(kernel_, t20);
-        SetArg<21, T21>::set(kernel_, t21);
-        SetArg<22, T22>::set(kernel_, t22);
-        SetArg<23, T23>::set(kernel_, t23);
-        SetArg<24, T24>::set(kernel_, t24);
-        SetArg<25, T25>::set(kernel_, t25);
-        SetArg<26, T26>::set(kernel_, t26);
-        SetArg<27, T27>::set(kernel_, t27);
-        SetArg<28, T28>::set(kernel_, t28);
-        SetArg<29, T29>::set(kernel_, t29);
-        SetArg<30, T30>::set(kernel_, t30);
-        SetArg<31, T31>::set(kernel_, t31);
-        SetArg<32, T32>::set(kernel_, t32);
-        SetArg<33, T33>::set(kernel_, t33);
-        SetArg<34, T34>::set(kernel_, t34);
-        SetArg<35, T35>::set(kernel_, t35);
-        SetArg<36, T36>::set(kernel_, t36);
-        SetArg<37, T37>::set(kernel_, t37);
-        SetArg<38, T38>::set(kernel_, t38);
-        SetArg<39, T39>::set(kernel_, t39);
-        SetArg<40, T40>::set(kernel_, t40);
-        SetArg<41, T41>::set(kernel_, t41);
-        SetArg<42, T42>::set(kernel_, t42);
-        SetArg<43, T43>::set(kernel_, t43);
-        SetArg<44, T44>::set(kernel_, t44);
-        SetArg<45, T45>::set(kernel_, t45);
-        SetArg<46, T46>::set(kernel_, t46);
-        SetArg<47, T47>::set(kernel_, t47);
-        SetArg<48, T48>::set(kernel_, t48);
-        SetArg<49, T49>::set(kernel_, t49);
-        SetArg<50, T50>::set(kernel_, t50);
-        SetArg<51, T51>::set(kernel_, t51);
-        SetArg<52, T52>::set(kernel_, t52);
-        SetArg<53, T53>::set(kernel_, t53);
-        SetArg<54, T54>::set(kernel_, t54);
-        SetArg<55, T55>::set(kernel_, t55);
-        SetArg<56, T56>::set(kernel_, t56);
-        SetArg<57, T57>::set(kernel_, t57);
-        SetArg<58, T58>::set(kernel_, t58);
-        SetArg<59, T59>::set(kernel_, t59);
-        SetArg<60, T60>::set(kernel_, t60);
-        SetArg<61, T61>::set(kernel_, t61);
-        SetArg<62, T62>::set(kernel_, t62);
-        SetArg<63, T63>::set(kernel_, t63);
-        SetArg<64, T64>::set(kernel_, t64);
-        SetArg<65, T65>::set(kernel_, t65);
-        SetArg<66, T66>::set(kernel_, t66);
-        SetArg<67, T67>::set(kernel_, t67);
-        SetArg<68, T68>::set(kernel_, t68);
-        SetArg<69, T69>::set(kernel_, t69);
-        SetArg<70, T70>::set(kernel_, t70);
-        SetArg<71, T71>::set(kernel_, t71);
-        SetArg<72, T72>::set(kernel_, t72);
-        SetArg<73, T73>::set(kernel_, t73);
-        SetArg<74, T74>::set(kernel_, t74);
-        SetArg<75, T75>::set(kernel_, t75);
-        SetArg<76, T76>::set(kernel_, t76);
-        SetArg<77, T77>::set(kernel_, t77);
-        SetArg<78, T78>::set(kernel_, t78);
-        SetArg<79, T79>::set(kernel_, t79);
-        SetArg<80, T80>::set(kernel_, t80);
-        SetArg<81, T81>::set(kernel_, t81);
-        SetArg<82, T82>::set(kernel_, t82);
-        SetArg<83, T83>::set(kernel_, t83);
-        SetArg<84, T84>::set(kernel_, t84);
-        SetArg<85, T85>::set(kernel_, t85);
-        SetArg<86, T86>::set(kernel_, t86);
-        SetArg<87, T87>::set(kernel_, t87);
-        SetArg<88, T88>::set(kernel_, t88);
-        SetArg<89, T89>::set(kernel_, t89);
-        SetArg<90, T90>::set(kernel_, t90);
-        SetArg<91, T91>::set(kernel_, t91);
-        SetArg<92, T92>::set(kernel_, t92);
-        SetArg<93, T93>::set(kernel_, t93);
-        SetArg<94, T94>::set(kernel_, t94);
-        SetArg<95, T95>::set(kernel_, t95);
-        SetArg<96, T96>::set(kernel_, t96);
-        SetArg<97, T97>::set(kernel_, t97);
-        SetArg<98, T98>::set(kernel_, t98);
-        SetArg<99, T99>::set(kernel_, t99);
-        SetArg<100, T100>::set(kernel_, t100);
-        SetArg<101, T101>::set(kernel_, t101);
-        SetArg<102, T102>::set(kernel_, t102);
-        SetArg<103, T103>::set(kernel_, t103);
-        SetArg<104, T104>::set(kernel_, t104);
-        SetArg<105, T105>::set(kernel_, t105);
-        SetArg<106, T106>::set(kernel_, t106);
-        SetArg<107, T107>::set(kernel_, t107);
-        SetArg<108, T108>::set(kernel_, t108);
-        SetArg<109, T109>::set(kernel_, t109);
-        SetArg<110, T110>::set(kernel_, t110);
-        SetArg<111, T111>::set(kernel_, t111);
-        SetArg<112, T112>::set(kernel_, t112);
-        SetArg<113, T113>::set(kernel_, t113);
-        SetArg<114, T114>::set(kernel_, t114);
-        SetArg<115, T115>::set(kernel_, t115);
-        SetArg<116, T116>::set(kernel_, t116);
-        SetArg<117, T117>::set(kernel_, t117);
-        SetArg<118, T118>::set(kernel_, t118);
-        SetArg<119, T119>::set(kernel_, t119);
-        SetArg<120, T120>::set(kernel_, t120);
-        SetArg<121, T121>::set(kernel_, t121);
-        SetArg<122, T122>::set(kernel_, t122);
-        SetArg<123, T123>::set(kernel_, t123);
-        SetArg<124, T124>::set(kernel_, t124);
-        SetArg<125, T125>::set(kernel_, t125);
-        SetArg<126, T126>::set(kernel_, t126);
-        SetArg<127, T127>::set(kernel_, t127);
-
-		// Move any arguments that need moving
-        MoveToDevice<T0>::move(args.queue_, t0);
-        MoveToDevice<T1>::move(args.queue_, t1);
-        MoveToDevice<T2>::move(args.queue_, t2);
-        MoveToDevice<T3>::move(args.queue_, t3);
-        MoveToDevice<T4>::move(args.queue_, t4);
-        MoveToDevice<T5>::move(args.queue_, t5);
-        MoveToDevice<T6>::move(args.queue_, t6);
-        MoveToDevice<T7>::move(args.queue_, t7);
-        MoveToDevice<T8>::move(args.queue_, t8);
-        MoveToDevice<T9>::move(args.queue_, t9);
-        MoveToDevice<T10>::move(args.queue_, t10);
-        MoveToDevice<T11>::move(args.queue_, t11);
-        MoveToDevice<T12>::move(args.queue_, t12);
-        MoveToDevice<T13>::move(args.queue_, t13);
-        MoveToDevice<T14>::move(args.queue_, t14);
-        MoveToDevice<T15>::move(args.queue_, t15);
-        MoveToDevice<T16>::move(args.queue_, t16);
-        MoveToDevice<T17>::move(args.queue_, t17);
-        MoveToDevice<T18>::move(args.queue_, t18);
-        MoveToDevice<T19>::move(args.queue_, t19);
-        MoveToDevice<T20>::move(args.queue_, t20);
-        MoveToDevice<T21>::move(args.queue_, t21);
-        MoveToDevice<T22>::move(args.queue_, t22);
-        MoveToDevice<T23>::move(args.queue_, t23);
-        MoveToDevice<T24>::move(args.queue_, t24);
-        MoveToDevice<T25>::move(args.queue_, t25);
-        MoveToDevice<T26>::move(args.queue_, t26);
-        MoveToDevice<T27>::move(args.queue_, t27);
-        MoveToDevice<T28>::move(args.queue_, t28);
-        MoveToDevice<T29>::move(args.queue_, t29);
-        MoveToDevice<T30>::move(args.queue_, t30);
-        MoveToDevice<T31>::move(args.queue_, t31);
-        MoveToDevice<T32>::move(args.queue_, t32);
-        MoveToDevice<T33>::move(args.queue_, t33);
-        MoveToDevice<T34>::move(args.queue_, t34);
-        MoveToDevice<T35>::move(args.queue_, t35);
-        MoveToDevice<T36>::move(args.queue_, t36);
-        MoveToDevice<T37>::move(args.queue_, t37);
-        MoveToDevice<T38>::move(args.queue_, t38);
-        MoveToDevice<T39>::move(args.queue_, t39);
-        MoveToDevice<T40>::move(args.queue_, t40);
-        MoveToDevice<T41>::move(args.queue_, t41);
-        MoveToDevice<T42>::move(args.queue_, t42);
-        MoveToDevice<T43>::move(args.queue_, t43);
-        MoveToDevice<T44>::move(args.queue_, t44);
-        MoveToDevice<T45>::move(args.queue_, t45);
-        MoveToDevice<T46>::move(args.queue_, t46);
-        MoveToDevice<T47>::move(args.queue_, t47);
-        MoveToDevice<T48>::move(args.queue_, t48);
-        MoveToDevice<T49>::move(args.queue_, t49);
-        MoveToDevice<T50>::move(args.queue_, t50);
-        MoveToDevice<T51>::move(args.queue_, t51);
-        MoveToDevice<T52>::move(args.queue_, t52);
-        MoveToDevice<T53>::move(args.queue_, t53);
-        MoveToDevice<T54>::move(args.queue_, t54);
-        MoveToDevice<T55>::move(args.queue_, t55);
-        MoveToDevice<T56>::move(args.queue_, t56);
-        MoveToDevice<T57>::move(args.queue_, t57);
-        MoveToDevice<T58>::move(args.queue_, t58);
-        MoveToDevice<T59>::move(args.queue_, t59);
-        MoveToDevice<T60>::move(args.queue_, t60);
-        MoveToDevice<T61>::move(args.queue_, t61);
-        MoveToDevice<T62>::move(args.queue_, t62);
-        MoveToDevice<T63>::move(args.queue_, t63);
-        MoveToDevice<T64>::move(args.queue_, t64);
-        MoveToDevice<T65>::move(args.queue_, t65);
-        MoveToDevice<T66>::move(args.queue_, t66);
-        MoveToDevice<T67>::move(args.queue_, t67);
-        MoveToDevice<T68>::move(args.queue_, t68);
-        MoveToDevice<T69>::move(args.queue_, t69);
-        MoveToDevice<T70>::move(args.queue_, t70);
-        MoveToDevice<T71>::move(args.queue_, t71);
-        MoveToDevice<T72>::move(args.queue_, t72);
-        MoveToDevice<T73>::move(args.queue_, t73);
-        MoveToDevice<T74>::move(args.queue_, t74);
-        MoveToDevice<T75>::move(args.queue_, t75);
-        MoveToDevice<T76>::move(args.queue_, t76);
-        MoveToDevice<T77>::move(args.queue_, t77);
-        MoveToDevice<T78>::move(args.queue_, t78);
-        MoveToDevice<T79>::move(args.queue_, t79);
-        MoveToDevice<T80>::move(args.queue_, t80);
-        MoveToDevice<T81>::move(args.queue_, t81);
-        MoveToDevice<T82>::move(args.queue_, t82);
-        MoveToDevice<T83>::move(args.queue_, t83);
-        MoveToDevice<T84>::move(args.queue_, t84);
-        MoveToDevice<T85>::move(args.queue_, t85);
-        MoveToDevice<T86>::move(args.queue_, t86);
-        MoveToDevice<T87>::move(args.queue_, t87);
-        MoveToDevice<T88>::move(args.queue_, t88);
-        MoveToDevice<T89>::move(args.queue_, t89);
-        MoveToDevice<T90>::move(args.queue_, t90);
-        MoveToDevice<T91>::move(args.queue_, t91);
-        MoveToDevice<T92>::move(args.queue_, t92);
-        MoveToDevice<T93>::move(args.queue_, t93);
-        MoveToDevice<T94>::move(args.queue_, t94);
-        MoveToDevice<T95>::move(args.queue_, t95);
-        MoveToDevice<T96>::move(args.queue_, t96);
-        MoveToDevice<T97>::move(args.queue_, t97);
-        MoveToDevice<T98>::move(args.queue_, t98);
-        MoveToDevice<T99>::move(args.queue_, t99);
-        MoveToDevice<T100>::move(args.queue_, t100);
-        MoveToDevice<T101>::move(args.queue_, t101);
-        MoveToDevice<T102>::move(args.queue_, t102);
-        MoveToDevice<T103>::move(args.queue_, t103);
-        MoveToDevice<T104>::move(args.queue_, t104);
-        MoveToDevice<T105>::move(args.queue_, t105);
-        MoveToDevice<T106>::move(args.queue_, t106);
-        MoveToDevice<T107>::move(args.queue_, t107);
-        MoveToDevice<T108>::move(args.queue_, t108);
-        MoveToDevice<T109>::move(args.queue_, t109);
-        MoveToDevice<T110>::move(args.queue_, t110);
-        MoveToDevice<T111>::move(args.queue_, t111);
-        MoveToDevice<T112>::move(args.queue_, t112);
-        MoveToDevice<T113>::move(args.queue_, t113);
-        MoveToDevice<T114>::move(args.queue_, t114);
-        MoveToDevice<T115>::move(args.queue_, t115);
-        MoveToDevice<T116>::move(args.queue_, t116);
-        MoveToDevice<T117>::move(args.queue_, t117);
-        MoveToDevice<T118>::move(args.queue_, t118);
-        MoveToDevice<T119>::move(args.queue_, t119);
-        MoveToDevice<T120>::move(args.queue_, t120);
-        MoveToDevice<T121>::move(args.queue_, t121);
-        MoveToDevice<T122>::move(args.queue_, t122);
-        MoveToDevice<T123>::move(args.queue_, t123);
-        MoveToDevice<T124>::move(args.queue_, t124);
-        MoveToDevice<T125>::move(args.queue_, t125);
-        MoveToDevice<T126>::move(args.queue_, t126);
-        MoveToDevice<T127>::move(args.queue_, t127);
-
-        args.queue_.enqueueNDRangeKernel(
-            kernel_,
-            args.offset_,
-            args.global_,
-            args.local_,
-            NULL,
-            &event);
-
-		// Move any arguments that need moving
-        MoveFromDevice<T0>::move(args.queue_, t0);
-        MoveFromDevice<T1>::move(args.queue_, t1);
-        MoveFromDevice<T2>::move(args.queue_, t2);
-        MoveFromDevice<T3>::move(args.queue_, t3);
-        MoveFromDevice<T4>::move(args.queue_, t4);
-        MoveFromDevice<T5>::move(args.queue_, t5);
-        MoveFromDevice<T6>::move(args.queue_, t6);
-        MoveFromDevice<T7>::move(args.queue_, t7);
-        MoveFromDevice<T8>::move(args.queue_, t8);
-        MoveFromDevice<T9>::move(args.queue_, t9);
-        MoveFromDevice<T10>::move(args.queue_, t10);
-        MoveFromDevice<T11>::move(args.queue_, t11);
-        MoveFromDevice<T12>::move(args.queue_, t12);
-        MoveFromDevice<T13>::move(args.queue_, t13);
-        MoveFromDevice<T14>::move(args.queue_, t14);
-        MoveFromDevice<T15>::move(args.queue_, t15);
-        MoveFromDevice<T16>::move(args.queue_, t16);
-        MoveFromDevice<T17>::move(args.queue_, t17);
-        MoveFromDevice<T18>::move(args.queue_, t18);
-        MoveFromDevice<T19>::move(args.queue_, t19);
-        MoveFromDevice<T20>::move(args.queue_, t20);
-        MoveFromDevice<T21>::move(args.queue_, t21);
-        MoveFromDevice<T22>::move(args.queue_, t22);
-        MoveFromDevice<T23>::move(args.queue_, t23);
-        MoveFromDevice<T24>::move(args.queue_, t24);
-        MoveFromDevice<T25>::move(args.queue_, t25);
-        MoveFromDevice<T26>::move(args.queue_, t26);
-        MoveFromDevice<T27>::move(args.queue_, t27);
-        MoveFromDevice<T28>::move(args.queue_, t28);
-        MoveFromDevice<T29>::move(args.queue_, t29);
-        MoveFromDevice<T30>::move(args.queue_, t30);
-        MoveFromDevice<T31>::move(args.queue_, t31);
-        MoveFromDevice<T32>::move(args.queue_, t32);
-        MoveFromDevice<T33>::move(args.queue_, t33);
-        MoveFromDevice<T34>::move(args.queue_, t34);
-        MoveFromDevice<T35>::move(args.queue_, t35);
-        MoveFromDevice<T36>::move(args.queue_, t36);
-        MoveFromDevice<T37>::move(args.queue_, t37);
-        MoveFromDevice<T38>::move(args.queue_, t38);
-        MoveFromDevice<T39>::move(args.queue_, t39);
-        MoveFromDevice<T40>::move(args.queue_, t40);
-        MoveFromDevice<T41>::move(args.queue_, t41);
-        MoveFromDevice<T42>::move(args.queue_, t42);
-        MoveFromDevice<T43>::move(args.queue_, t43);
-        MoveFromDevice<T44>::move(args.queue_, t44);
-        MoveFromDevice<T45>::move(args.queue_, t45);
-        MoveFromDevice<T46>::move(args.queue_, t46);
-        MoveFromDevice<T47>::move(args.queue_, t47);
-        MoveFromDevice<T48>::move(args.queue_, t48);
-        MoveFromDevice<T49>::move(args.queue_, t49);
-        MoveFromDevice<T50>::move(args.queue_, t50);
-        MoveFromDevice<T51>::move(args.queue_, t51);
-        MoveFromDevice<T52>::move(args.queue_, t52);
-        MoveFromDevice<T53>::move(args.queue_, t53);
-        MoveFromDevice<T54>::move(args.queue_, t54);
-        MoveFromDevice<T55>::move(args.queue_, t55);
-        MoveFromDevice<T56>::move(args.queue_, t56);
-        MoveFromDevice<T57>::move(args.queue_, t57);
-        MoveFromDevice<T58>::move(args.queue_, t58);
-        MoveFromDevice<T59>::move(args.queue_, t59);
-        MoveFromDevice<T60>::move(args.queue_, t60);
-        MoveFromDevice<T61>::move(args.queue_, t61);
-        MoveFromDevice<T62>::move(args.queue_, t62);
-        MoveFromDevice<T63>::move(args.queue_, t63);
-        MoveFromDevice<T64>::move(args.queue_, t64);
-        MoveFromDevice<T65>::move(args.queue_, t65);
-        MoveFromDevice<T66>::move(args.queue_, t66);
-        MoveFromDevice<T67>::move(args.queue_, t67);
-        MoveFromDevice<T68>::move(args.queue_, t68);
-        MoveFromDevice<T69>::move(args.queue_, t69);
-        MoveFromDevice<T70>::move(args.queue_, t70);
-        MoveFromDevice<T71>::move(args.queue_, t71);
-        MoveFromDevice<T72>::move(args.queue_, t72);
-        MoveFromDevice<T73>::move(args.queue_, t73);
-        MoveFromDevice<T74>::move(args.queue_, t74);
-        MoveFromDevice<T75>::move(args.queue_, t75);
-        MoveFromDevice<T76>::move(args.queue_, t76);
-        MoveFromDevice<T77>::move(args.queue_, t77);
-        MoveFromDevice<T78>::move(args.queue_, t78);
-        MoveFromDevice<T79>::move(args.queue_, t79);
-        MoveFromDevice<T80>::move(args.queue_, t80);
-        MoveFromDevice<T81>::move(args.queue_, t81);
-        MoveFromDevice<T82>::move(args.queue_, t82);
-        MoveFromDevice<T83>::move(args.queue_, t83);
-        MoveFromDevice<T84>::move(args.queue_, t84);
-        MoveFromDevice<T85>::move(args.queue_, t85);
-        MoveFromDevice<T86>::move(args.queue_, t86);
-        MoveFromDevice<T87>::move(args.queue_, t87);
-        MoveFromDevice<T88>::move(args.queue_, t88);
-        MoveFromDevice<T89>::move(args.queue_, t89);
-        MoveFromDevice<T90>::move(args.queue_, t90);
-        MoveFromDevice<T91>::move(args.queue_, t91);
-        MoveFromDevice<T92>::move(args.queue_, t92);
-        MoveFromDevice<T93>::move(args.queue_, t93);
-        MoveFromDevice<T94>::move(args.queue_, t94);
-        MoveFromDevice<T95>::move(args.queue_, t95);
-        MoveFromDevice<T96>::move(args.queue_, t96);
-        MoveFromDevice<T97>::move(args.queue_, t97);
-        MoveFromDevice<T98>::move(args.queue_, t98);
-        MoveFromDevice<T99>::move(args.queue_, t99);
-        MoveFromDevice<T100>::move(args.queue_, t100);
-        MoveFromDevice<T101>::move(args.queue_, t101);
-        MoveFromDevice<T102>::move(args.queue_, t102);
-        MoveFromDevice<T103>::move(args.queue_, t103);
-        MoveFromDevice<T104>::move(args.queue_, t104);
-        MoveFromDevice<T105>::move(args.queue_, t105);
-        MoveFromDevice<T106>::move(args.queue_, t106);
-        MoveFromDevice<T107>::move(args.queue_, t107);
-        MoveFromDevice<T108>::move(args.queue_, t108);
-        MoveFromDevice<T109>::move(args.queue_, t109);
-        MoveFromDevice<T110>::move(args.queue_, t110);
-        MoveFromDevice<T111>::move(args.queue_, t111);
-        MoveFromDevice<T112>::move(args.queue_, t112);
-        MoveFromDevice<T113>::move(args.queue_, t113);
-        MoveFromDevice<T114>::move(args.queue_, t114);
-        MoveFromDevice<T115>::move(args.queue_, t115);
-        MoveFromDevice<T116>::move(args.queue_, t116);
-        MoveFromDevice<T117>::move(args.queue_, t117);
-        MoveFromDevice<T118>::move(args.queue_, t118);
-        MoveFromDevice<T119>::move(args.queue_, t119);
-        MoveFromDevice<T120>::move(args.queue_, t120);
-        MoveFromDevice<T121>::move(args.queue_, t121);
-        MoveFromDevice<T122>::move(args.queue_, t122);
-        MoveFromDevice<T123>::move(args.queue_, t123);
-        MoveFromDevice<T124>::move(args.queue_, t124);
-        MoveFromDevice<T125>::move(args.queue_, t125);
-        MoveFromDevice<T126>::move(args.queue_, t126);
-        MoveFromDevice<T127>::move(args.queue_, t127);
-
-        return event;
-    }
-
-    Event operator() (
-        const EnqueueArgs& args,
-        const Event& waitEvent,
-        T0 t0,
-        T1 t1 = NullType(),
-        T2 t2 = NullType(),
-        T3 t3 = NullType(),
-        T4 t4 = NullType(),
-        T5 t5 = NullType(),
-        T6 t6 = NullType(),
-        T7 t7 = NullType(),
-        T8 t8 = NullType(),
-        T9 t9 = NullType(),
-        T10 t10 = NullType(),
-        T11 t11 = NullType(),
-        T12 t12 = NullType(),
-        T13 t13 = NullType(),
-        T14 t14 = NullType(),
-        T15 t15 = NullType(),
-        T16 t16 = NullType(),
-        T17 t17 = NullType(),
-        T18 t18 = NullType(),
-        T19 t19 = NullType(),
-        T20 t20 = NullType(),
-        T21 t21 = NullType(),
-        T22 t22 = NullType(),
-        T23 t23 = NullType(),
-        T24 t24 = NullType(),
-        T25 t25 = NullType(),
-        T26 t26 = NullType(),
-        T27 t27 = NullType(),
-        T28 t28 = NullType(),
-        T29 t29 = NullType(),
-        T30 t30 = NullType(),
-        T31 t31 = NullType(),
-        T32 t32 = NullType(),
-        T33 t33 = NullType(),
-        T34 t34 = NullType(),
-        T35 t35 = NullType(),
-        T36 t36 = NullType(),
-        T37 t37 = NullType(),
-        T38 t38 = NullType(),
-        T39 t39 = NullType(),
-        T40 t40 = NullType(),
-        T41 t41 = NullType(),
-        T42 t42 = NullType(),
-        T43 t43 = NullType(),
-        T44 t44 = NullType(),
-        T45 t45 = NullType(),
-        T46 t46 = NullType(),
-        T47 t47 = NullType(),
-        T48 t48 = NullType(),
-        T49 t49 = NullType(),
-        T50 t50 = NullType(),
-        T51 t51 = NullType(),
-        T52 t52 = NullType(),
-        T53 t53 = NullType(),
-        T54 t54 = NullType(),
-        T55 t55 = NullType(),
-        T56 t56 = NullType(),
-        T57 t57 = NullType(),
-        T58 t58 = NullType(),
-        T59 t59 = NullType(),
-        T60 t60 = NullType(),
-        T61 t61 = NullType(),
-        T62 t62 = NullType(),
-        T63 t63 = NullType(),
-        T64 t64 = NullType(),
-        T65 t65 = NullType(),
-        T66 t66 = NullType(),
-        T67 t67 = NullType(),
-        T68 t68 = NullType(),
-        T69 t69 = NullType(),
-        T70 t70 = NullType(),
-        T71 t71 = NullType(),
-        T72 t72 = NullType(),
-        T73 t73 = NullType(),
-        T74 t74 = NullType(),
-        T75 t75 = NullType(),
-        T76 t76 = NullType(),
-        T77 t77 = NullType(),
-        T78 t78 = NullType(),
-        T79 t79 = NullType(),
-        T80 t80 = NullType(),
-        T81 t81 = NullType(),
-        T82 t82 = NullType(),
-        T83 t83 = NullType(),
-        T84 t84 = NullType(),
-        T85 t85 = NullType(),
-        T86 t86 = NullType(),
-        T87 t87 = NullType(),
-        T88 t88 = NullType(),
-        T89 t89 = NullType(),
-        T90 t90 = NullType(),
-        T91 t91 = NullType(),
-        T92 t92 = NullType(),
-        T93 t93 = NullType(),
-        T94 t94 = NullType(),
-        T95 t95 = NullType(),
-        T96 t96 = NullType(),
-        T97 t97 = NullType(),
-        T98 t98 = NullType(),
-        T99 t99 = NullType(),
-        T100 t100 = NullType(),
-        T101 t101 = NullType(),
-        T102 t102 = NullType(),
-        T103 t103 = NullType(),
-        T104 t104 = NullType(),
-        T105 t105 = NullType(),
-        T106 t106 = NullType(),
-        T107 t107 = NullType(),
-        T108 t108 = NullType(),
-        T109 t109 = NullType(),
-        T110 t110 = NullType(),
-        T111 t111 = NullType(),
-        T112 t112 = NullType(),
-        T113 t113 = NullType(),
-        T114 t114 = NullType(),
-        T115 t115 = NullType(),
-        T116 t116 = NullType(),
-        T117 t117 = NullType(),
-        T118 t118 = NullType(),
-        T119 t119 = NullType(),
-        T120 t120 = NullType(),
-        T121 t121 = NullType(),
-        T122 t122 = NullType(),
-        T123 t123 = NullType(),
-        T124 t124 = NullType(),
-        T125 t125 = NullType(),
-        T126 t126 = NullType(),
-        T127 t127 = NullType())
-    {
-        Event event;
-        SetArg<0, T0>::set(kernel_, t0);
-        SetArg<1, T1>::set(kernel_, t1);
-        SetArg<2, T2>::set(kernel_, t2);
-        SetArg<3, T3>::set(kernel_, t3);
-        SetArg<4, T4>::set(kernel_, t4);
-        SetArg<5, T5>::set(kernel_, t5);
-        SetArg<6, T6>::set(kernel_, t6);
-        SetArg<7, T7>::set(kernel_, t7);
-        SetArg<8, T8>::set(kernel_, t8);
-        SetArg<9, T9>::set(kernel_, t9);
-        SetArg<10, T10>::set(kernel_, t10);
-        SetArg<11, T11>::set(kernel_, t11);
-        SetArg<12, T12>::set(kernel_, t12);
-        SetArg<13, T13>::set(kernel_, t13);
-        SetArg<14, T14>::set(kernel_, t14);
-        SetArg<15, T15>::set(kernel_, t15);
-        SetArg<16, T16>::set(kernel_, t16);
-        SetArg<17, T17>::set(kernel_, t17);
-        SetArg<18, T18>::set(kernel_, t18);
-        SetArg<19, T19>::set(kernel_, t19);
-        SetArg<20, T20>::set(kernel_, t20);
-        SetArg<21, T21>::set(kernel_, t21);
-        SetArg<22, T22>::set(kernel_, t22);
-        SetArg<23, T23>::set(kernel_, t23);
-        SetArg<24, T24>::set(kernel_, t24);
-        SetArg<25, T25>::set(kernel_, t25);
-        SetArg<26, T26>::set(kernel_, t26);
-        SetArg<27, T27>::set(kernel_, t27);
-        SetArg<28, T28>::set(kernel_, t28);
-        SetArg<29, T29>::set(kernel_, t29);
-        SetArg<30, T30>::set(kernel_, t30);
-        SetArg<31, T31>::set(kernel_, t31);
-        SetArg<32, T32>::set(kernel_, t32);
-        SetArg<33, T33>::set(kernel_, t33);
-        SetArg<34, T34>::set(kernel_, t34);
-        SetArg<35, T35>::set(kernel_, t35);
-        SetArg<36, T36>::set(kernel_, t36);
-        SetArg<37, T37>::set(kernel_, t37);
-        SetArg<38, T38>::set(kernel_, t38);
-        SetArg<39, T39>::set(kernel_, t39);
-        SetArg<40, T40>::set(kernel_, t40);
-        SetArg<41, T41>::set(kernel_, t41);
-        SetArg<42, T42>::set(kernel_, t42);
-        SetArg<43, T43>::set(kernel_, t43);
-        SetArg<44, T44>::set(kernel_, t44);
-        SetArg<45, T45>::set(kernel_, t45);
-        SetArg<46, T46>::set(kernel_, t46);
-        SetArg<47, T47>::set(kernel_, t47);
-        SetArg<48, T48>::set(kernel_, t48);
-        SetArg<49, T49>::set(kernel_, t49);
-        SetArg<50, T50>::set(kernel_, t50);
-        SetArg<51, T51>::set(kernel_, t51);
-        SetArg<52, T52>::set(kernel_, t52);
-        SetArg<53, T53>::set(kernel_, t53);
-        SetArg<54, T54>::set(kernel_, t54);
-        SetArg<55, T55>::set(kernel_, t55);
-        SetArg<56, T56>::set(kernel_, t56);
-        SetArg<57, T57>::set(kernel_, t57);
-        SetArg<58, T58>::set(kernel_, t58);
-        SetArg<59, T59>::set(kernel_, t59);
-        SetArg<60, T60>::set(kernel_, t60);
-        SetArg<61, T61>::set(kernel_, t61);
-        SetArg<62, T62>::set(kernel_, t62);
-        SetArg<63, T63>::set(kernel_, t63);
-        SetArg<64, T64>::set(kernel_, t64);
-        SetArg<65, T65>::set(kernel_, t65);
-        SetArg<66, T66>::set(kernel_, t66);
-        SetArg<67, T67>::set(kernel_, t67);
-        SetArg<68, T68>::set(kernel_, t68);
-        SetArg<69, T69>::set(kernel_, t69);
-        SetArg<70, T70>::set(kernel_, t70);
-        SetArg<71, T71>::set(kernel_, t71);
-        SetArg<72, T72>::set(kernel_, t72);
-        SetArg<73, T73>::set(kernel_, t73);
-        SetArg<74, T74>::set(kernel_, t74);
-        SetArg<75, T75>::set(kernel_, t75);
-        SetArg<76, T76>::set(kernel_, t76);
-        SetArg<77, T77>::set(kernel_, t77);
-        SetArg<78, T78>::set(kernel_, t78);
-        SetArg<79, T79>::set(kernel_, t79);
-        SetArg<80, T80>::set(kernel_, t80);
-        SetArg<81, T81>::set(kernel_, t81);
-        SetArg<82, T82>::set(kernel_, t82);
-        SetArg<83, T83>::set(kernel_, t83);
-        SetArg<84, T84>::set(kernel_, t84);
-        SetArg<85, T85>::set(kernel_, t85);
-        SetArg<86, T86>::set(kernel_, t86);
-        SetArg<87, T87>::set(kernel_, t87);
-        SetArg<88, T88>::set(kernel_, t88);
-        SetArg<89, T89>::set(kernel_, t89);
-        SetArg<90, T90>::set(kernel_, t90);
-        SetArg<91, T91>::set(kernel_, t91);
-        SetArg<92, T92>::set(kernel_, t92);
-        SetArg<93, T93>::set(kernel_, t93);
-        SetArg<94, T94>::set(kernel_, t94);
-        SetArg<95, T95>::set(kernel_, t95);
-        SetArg<96, T96>::set(kernel_, t96);
-        SetArg<97, T97>::set(kernel_, t97);
-        SetArg<98, T98>::set(kernel_, t98);
-        SetArg<99, T99>::set(kernel_, t99);
-        SetArg<100, T100>::set(kernel_, t100);
-        SetArg<101, T101>::set(kernel_, t101);
-        SetArg<102, T102>::set(kernel_, t102);
-        SetArg<103, T103>::set(kernel_, t103);
-        SetArg<104, T104>::set(kernel_, t104);
-        SetArg<105, T105>::set(kernel_, t105);
-        SetArg<106, T106>::set(kernel_, t106);
-        SetArg<107, T107>::set(kernel_, t107);
-        SetArg<108, T108>::set(kernel_, t108);
-        SetArg<109, T109>::set(kernel_, t109);
-        SetArg<110, T110>::set(kernel_, t110);
-        SetArg<111, T111>::set(kernel_, t111);
-        SetArg<112, T112>::set(kernel_, t112);
-        SetArg<113, T113>::set(kernel_, t113);
-        SetArg<114, T114>::set(kernel_, t114);
-        SetArg<115, T115>::set(kernel_, t115);
-        SetArg<116, T116>::set(kernel_, t116);
-        SetArg<117, T117>::set(kernel_, t117);
-        SetArg<118, T118>::set(kernel_, t118);
-        SetArg<119, T119>::set(kernel_, t119);
-        SetArg<120, T120>::set(kernel_, t120);
-        SetArg<121, T121>::set(kernel_, t121);
-        SetArg<122, T122>::set(kernel_, t122);
-        SetArg<123, T123>::set(kernel_, t123);
-        SetArg<124, T124>::set(kernel_, t124);
-        SetArg<125, T125>::set(kernel_, t125);
-        SetArg<126, T126>::set(kernel_, t126);
-        SetArg<127, T127>::set(kernel_, t127);
-
-		// Move any arguments that need moving
-        MoveToDevice<T0>::move(args.queue_, t0);
-        MoveToDevice<T1>::move(args.queue_, t1);
-        MoveToDevice<T2>::move(args.queue_, t2);
-        MoveToDevice<T3>::move(args.queue_, t3);
-        MoveToDevice<T4>::move(args.queue_, t4);
-        MoveToDevice<T5>::move(args.queue_, t5);
-        MoveToDevice<T6>::move(args.queue_, t6);
-        MoveToDevice<T7>::move(args.queue_, t7);
-        MoveToDevice<T8>::move(args.queue_, t8);
-        MoveToDevice<T9>::move(args.queue_, t9);
-        MoveToDevice<T10>::move(args.queue_, t10);
-        MoveToDevice<T11>::move(args.queue_, t11);
-        MoveToDevice<T12>::move(args.queue_, t12);
-        MoveToDevice<T13>::move(args.queue_, t13);
-        MoveToDevice<T14>::move(args.queue_, t14);
-        MoveToDevice<T15>::move(args.queue_, t15);
-        MoveToDevice<T16>::move(args.queue_, t16);
-        MoveToDevice<T17>::move(args.queue_, t17);
-        MoveToDevice<T18>::move(args.queue_, t18);
-        MoveToDevice<T19>::move(args.queue_, t19);
-        MoveToDevice<T20>::move(args.queue_, t20);
-        MoveToDevice<T21>::move(args.queue_, t21);
-        MoveToDevice<T22>::move(args.queue_, t22);
-        MoveToDevice<T23>::move(args.queue_, t23);
-        MoveToDevice<T24>::move(args.queue_, t24);
-        MoveToDevice<T25>::move(args.queue_, t25);
-        MoveToDevice<T26>::move(args.queue_, t26);
-        MoveToDevice<T27>::move(args.queue_, t27);
-        MoveToDevice<T28>::move(args.queue_, t28);
-        MoveToDevice<T29>::move(args.queue_, t29);
-        MoveToDevice<T30>::move(args.queue_, t30);
-        MoveToDevice<T31>::move(args.queue_, t31);
-        MoveToDevice<T32>::move(args.queue_, t32);
-        MoveToDevice<T33>::move(args.queue_, t33);
-        MoveToDevice<T34>::move(args.queue_, t34);
-        MoveToDevice<T35>::move(args.queue_, t35);
-        MoveToDevice<T36>::move(args.queue_, t36);
-        MoveToDevice<T37>::move(args.queue_, t37);
-        MoveToDevice<T38>::move(args.queue_, t38);
-        MoveToDevice<T39>::move(args.queue_, t39);
-        MoveToDevice<T40>::move(args.queue_, t40);
-        MoveToDevice<T41>::move(args.queue_, t41);
-        MoveToDevice<T42>::move(args.queue_, t42);
-        MoveToDevice<T43>::move(args.queue_, t43);
-        MoveToDevice<T44>::move(args.queue_, t44);
-        MoveToDevice<T45>::move(args.queue_, t45);
-        MoveToDevice<T46>::move(args.queue_, t46);
-        MoveToDevice<T47>::move(args.queue_, t47);
-        MoveToDevice<T48>::move(args.queue_, t48);
-        MoveToDevice<T49>::move(args.queue_, t49);
-        MoveToDevice<T50>::move(args.queue_, t50);
-        MoveToDevice<T51>::move(args.queue_, t51);
-        MoveToDevice<T52>::move(args.queue_, t52);
-        MoveToDevice<T53>::move(args.queue_, t53);
-        MoveToDevice<T54>::move(args.queue_, t54);
-        MoveToDevice<T55>::move(args.queue_, t55);
-        MoveToDevice<T56>::move(args.queue_, t56);
-        MoveToDevice<T57>::move(args.queue_, t57);
-        MoveToDevice<T58>::move(args.queue_, t58);
-        MoveToDevice<T59>::move(args.queue_, t59);
-        MoveToDevice<T60>::move(args.queue_, t60);
-        MoveToDevice<T61>::move(args.queue_, t61);
-        MoveToDevice<T62>::move(args.queue_, t62);
-        MoveToDevice<T63>::move(args.queue_, t63);
-        MoveToDevice<T64>::move(args.queue_, t64);
-        MoveToDevice<T65>::move(args.queue_, t65);
-        MoveToDevice<T66>::move(args.queue_, t66);
-        MoveToDevice<T67>::move(args.queue_, t67);
-        MoveToDevice<T68>::move(args.queue_, t68);
-        MoveToDevice<T69>::move(args.queue_, t69);
-        MoveToDevice<T70>::move(args.queue_, t70);
-        MoveToDevice<T71>::move(args.queue_, t71);
-        MoveToDevice<T72>::move(args.queue_, t72);
-        MoveToDevice<T73>::move(args.queue_, t73);
-        MoveToDevice<T74>::move(args.queue_, t74);
-        MoveToDevice<T75>::move(args.queue_, t75);
-        MoveToDevice<T76>::move(args.queue_, t76);
-        MoveToDevice<T77>::move(args.queue_, t77);
-        MoveToDevice<T78>::move(args.queue_, t78);
-        MoveToDevice<T79>::move(args.queue_, t79);
-        MoveToDevice<T80>::move(args.queue_, t80);
-        MoveToDevice<T81>::move(args.queue_, t81);
-        MoveToDevice<T82>::move(args.queue_, t82);
-        MoveToDevice<T83>::move(args.queue_, t83);
-        MoveToDevice<T84>::move(args.queue_, t84);
-        MoveToDevice<T85>::move(args.queue_, t85);
-        MoveToDevice<T86>::move(args.queue_, t86);
-        MoveToDevice<T87>::move(args.queue_, t87);
-        MoveToDevice<T88>::move(args.queue_, t88);
-        MoveToDevice<T89>::move(args.queue_, t89);
-        MoveToDevice<T90>::move(args.queue_, t90);
-        MoveToDevice<T91>::move(args.queue_, t91);
-        MoveToDevice<T92>::move(args.queue_, t92);
-        MoveToDevice<T93>::move(args.queue_, t93);
-        MoveToDevice<T94>::move(args.queue_, t94);
-        MoveToDevice<T95>::move(args.queue_, t95);
-        MoveToDevice<T96>::move(args.queue_, t96);
-        MoveToDevice<T97>::move(args.queue_, t97);
-        MoveToDevice<T98>::move(args.queue_, t98);
-        MoveToDevice<T99>::move(args.queue_, t99);
-        MoveToDevice<T100>::move(args.queue_, t100);
-        MoveToDevice<T101>::move(args.queue_, t101);
-        MoveToDevice<T102>::move(args.queue_, t102);
-        MoveToDevice<T103>::move(args.queue_, t103);
-        MoveToDevice<T104>::move(args.queue_, t104);
-        MoveToDevice<T105>::move(args.queue_, t105);
-        MoveToDevice<T106>::move(args.queue_, t106);
-        MoveToDevice<T107>::move(args.queue_, t107);
-        MoveToDevice<T108>::move(args.queue_, t108);
-        MoveToDevice<T109>::move(args.queue_, t109);
-        MoveToDevice<T110>::move(args.queue_, t110);
-        MoveToDevice<T111>::move(args.queue_, t111);
-        MoveToDevice<T112>::move(args.queue_, t112);
-        MoveToDevice<T113>::move(args.queue_, t113);
-        MoveToDevice<T114>::move(args.queue_, t114);
-        MoveToDevice<T115>::move(args.queue_, t115);
-        MoveToDevice<T116>::move(args.queue_, t116);
-        MoveToDevice<T117>::move(args.queue_, t117);
-        MoveToDevice<T118>::move(args.queue_, t118);
-        MoveToDevice<T119>::move(args.queue_, t119);
-        MoveToDevice<T120>::move(args.queue_, t120);
-        MoveToDevice<T121>::move(args.queue_, t121);
-        MoveToDevice<T122>::move(args.queue_, t122);
-        MoveToDevice<T123>::move(args.queue_, t123);
-        MoveToDevice<T124>::move(args.queue_, t124);
-        MoveToDevice<T125>::move(args.queue_, t125);
-        MoveToDevice<T126>::move(args.queue_, t126);
-        MoveToDevice<T127>::move(args.queue_, t127);
-
-		VECTOR_CLASS<Event> events(&waitEvent, &waitEvent);
-
-        args.queue_.enqueueNDRangeKernel(
-            kernel_,
-            args.offset_,
-            args.global_,
-            args.local_,
-            &events,
-            &event);
-
-		// Move any arguments that need moving
-       MoveFromDevice<T0>::move(args.queue_, t0);
-        MoveFromDevice<T1>::move(args.queue_, t1);
-        MoveFromDevice<T2>::move(args.queue_, t2);
-        MoveFromDevice<T3>::move(args.queue_, t3);
-        MoveFromDevice<T4>::move(args.queue_, t4);
-        MoveFromDevice<T5>::move(args.queue_, t5);
-        MoveFromDevice<T6>::move(args.queue_, t6);
-        MoveFromDevice<T7>::move(args.queue_, t7);
-        MoveFromDevice<T8>::move(args.queue_, t8);
-        MoveFromDevice<T9>::move(args.queue_, t9);
-        MoveFromDevice<T10>::move(args.queue_, t10);
-        MoveFromDevice<T11>::move(args.queue_, t11);
-        MoveFromDevice<T12>::move(args.queue_, t12);
-        MoveFromDevice<T13>::move(args.queue_, t13);
-        MoveFromDevice<T14>::move(args.queue_, t14);
-        MoveFromDevice<T15>::move(args.queue_, t15);
-        MoveFromDevice<T16>::move(args.queue_, t16);
-        MoveFromDevice<T17>::move(args.queue_, t17);
-        MoveFromDevice<T18>::move(args.queue_, t18);
-        MoveFromDevice<T19>::move(args.queue_, t19);
-        MoveFromDevice<T20>::move(args.queue_, t20);
-        MoveFromDevice<T21>::move(args.queue_, t21);
-        MoveFromDevice<T22>::move(args.queue_, t22);
-        MoveFromDevice<T23>::move(args.queue_, t23);
-        MoveFromDevice<T24>::move(args.queue_, t24);
-        MoveFromDevice<T25>::move(args.queue_, t25);
-        MoveFromDevice<T26>::move(args.queue_, t26);
-        MoveFromDevice<T27>::move(args.queue_, t27);
-        MoveFromDevice<T28>::move(args.queue_, t28);
-        MoveFromDevice<T29>::move(args.queue_, t29);
-        MoveFromDevice<T30>::move(args.queue_, t30);
-        MoveFromDevice<T31>::move(args.queue_, t31);
-        MoveFromDevice<T32>::move(args.queue_, t32);
-        MoveFromDevice<T33>::move(args.queue_, t33);
-        MoveFromDevice<T34>::move(args.queue_, t34);
-        MoveFromDevice<T35>::move(args.queue_, t35);
-        MoveFromDevice<T36>::move(args.queue_, t36);
-        MoveFromDevice<T37>::move(args.queue_, t37);
-        MoveFromDevice<T38>::move(args.queue_, t38);
-        MoveFromDevice<T39>::move(args.queue_, t39);
-        MoveFromDevice<T40>::move(args.queue_, t40);
-        MoveFromDevice<T41>::move(args.queue_, t41);
-        MoveFromDevice<T42>::move(args.queue_, t42);
-        MoveFromDevice<T43>::move(args.queue_, t43);
-        MoveFromDevice<T44>::move(args.queue_, t44);
-        MoveFromDevice<T45>::move(args.queue_, t45);
-        MoveFromDevice<T46>::move(args.queue_, t46);
-        MoveFromDevice<T47>::move(args.queue_, t47);
-        MoveFromDevice<T48>::move(args.queue_, t48);
-        MoveFromDevice<T49>::move(args.queue_, t49);
-        MoveFromDevice<T50>::move(args.queue_, t50);
-        MoveFromDevice<T51>::move(args.queue_, t51);
-        MoveFromDevice<T52>::move(args.queue_, t52);
-        MoveFromDevice<T53>::move(args.queue_, t53);
-        MoveFromDevice<T54>::move(args.queue_, t54);
-        MoveFromDevice<T55>::move(args.queue_, t55);
-        MoveFromDevice<T56>::move(args.queue_, t56);
-        MoveFromDevice<T57>::move(args.queue_, t57);
-        MoveFromDevice<T58>::move(args.queue_, t58);
-        MoveFromDevice<T59>::move(args.queue_, t59);
-        MoveFromDevice<T60>::move(args.queue_, t60);
-        MoveFromDevice<T61>::move(args.queue_, t61);
-        MoveFromDevice<T62>::move(args.queue_, t62);
-        MoveFromDevice<T63>::move(args.queue_, t63);
-        MoveFromDevice<T64>::move(args.queue_, t64);
-        MoveFromDevice<T65>::move(args.queue_, t65);
-        MoveFromDevice<T66>::move(args.queue_, t66);
-        MoveFromDevice<T67>::move(args.queue_, t67);
-        MoveFromDevice<T68>::move(args.queue_, t68);
-        MoveFromDevice<T69>::move(args.queue_, t69);
-        MoveFromDevice<T70>::move(args.queue_, t70);
-        MoveFromDevice<T71>::move(args.queue_, t71);
-        MoveFromDevice<T72>::move(args.queue_, t72);
-        MoveFromDevice<T73>::move(args.queue_, t73);
-        MoveFromDevice<T74>::move(args.queue_, t74);
-        MoveFromDevice<T75>::move(args.queue_, t75);
-        MoveFromDevice<T76>::move(args.queue_, t76);
-        MoveFromDevice<T77>::move(args.queue_, t77);
-        MoveFromDevice<T78>::move(args.queue_, t78);
-        MoveFromDevice<T79>::move(args.queue_, t79);
-        MoveFromDevice<T80>::move(args.queue_, t80);
-        MoveFromDevice<T81>::move(args.queue_, t81);
-        MoveFromDevice<T82>::move(args.queue_, t82);
-        MoveFromDevice<T83>::move(args.queue_, t83);
-        MoveFromDevice<T84>::move(args.queue_, t84);
-        MoveFromDevice<T85>::move(args.queue_, t85);
-        MoveFromDevice<T86>::move(args.queue_, t86);
-        MoveFromDevice<T87>::move(args.queue_, t87);
-        MoveFromDevice<T88>::move(args.queue_, t88);
-        MoveFromDevice<T89>::move(args.queue_, t89);
-        MoveFromDevice<T90>::move(args.queue_, t90);
-        MoveFromDevice<T91>::move(args.queue_, t91);
-        MoveFromDevice<T92>::move(args.queue_, t92);
-        MoveFromDevice<T93>::move(args.queue_, t93);
-        MoveFromDevice<T94>::move(args.queue_, t94);
-        MoveFromDevice<T95>::move(args.queue_, t95);
-        MoveFromDevice<T96>::move(args.queue_, t96);
-        MoveFromDevice<T97>::move(args.queue_, t97);
-        MoveFromDevice<T98>::move(args.queue_, t98);
-        MoveFromDevice<T99>::move(args.queue_, t99);
-        MoveFromDevice<T100>::move(args.queue_, t100);
-        MoveFromDevice<T101>::move(args.queue_, t101);
-        MoveFromDevice<T102>::move(args.queue_, t102);
-        MoveFromDevice<T103>::move(args.queue_, t103);
-        MoveFromDevice<T104>::move(args.queue_, t104);
-        MoveFromDevice<T105>::move(args.queue_, t105);
-        MoveFromDevice<T106>::move(args.queue_, t106);
-        MoveFromDevice<T107>::move(args.queue_, t107);
-        MoveFromDevice<T108>::move(args.queue_, t108);
-        MoveFromDevice<T109>::move(args.queue_, t109);
-        MoveFromDevice<T110>::move(args.queue_, t110);
-        MoveFromDevice<T111>::move(args.queue_, t111);
-        MoveFromDevice<T112>::move(args.queue_, t112);
-        MoveFromDevice<T113>::move(args.queue_, t113);
-        MoveFromDevice<T114>::move(args.queue_, t114);
-        MoveFromDevice<T115>::move(args.queue_, t115);
-        MoveFromDevice<T116>::move(args.queue_, t116);
-        MoveFromDevice<T117>::move(args.queue_, t117);
-        MoveFromDevice<T118>::move(args.queue_, t118);
-        MoveFromDevice<T119>::move(args.queue_, t119);
-        MoveFromDevice<T120>::move(args.queue_, t120);
-        MoveFromDevice<T121>::move(args.queue_, t121);
-        MoveFromDevice<T122>::move(args.queue_, t122);
-        MoveFromDevice<T123>::move(args.queue_, t123);
-        MoveFromDevice<T124>::move(args.queue_, t124);
-        MoveFromDevice<T125>::move(args.queue_, t125);
-        MoveFromDevice<T126>::move(args.queue_, t126);
-        MoveFromDevice<T127>::move(args.queue_, t127);
-        return event;
-    }
-
-    Event operator() (
-        const EnqueueArgs& args,
-        const VECTOR_CLASS<Event>& waitEvents,
-        T0 t0,
-        T1 t1 = NullType(),
-        T2 t2 = NullType(),
-        T3 t3 = NullType(),
-        T4 t4 = NullType(),
-        T5 t5 = NullType(),
-        T6 t6 = NullType(),
-        T7 t7 = NullType(),
-        T8 t8 = NullType(),
-        T9 t9 = NullType(),
-        T10 t10 = NullType(),
-        T11 t11 = NullType(),
-        T12 t12 = NullType(),
-        T13 t13 = NullType(),
-        T14 t14 = NullType(),
-        T15 t15 = NullType(),
-        T16 t16 = NullType(),
-        T17 t17 = NullType(),
-        T18 t18 = NullType(),
-        T19 t19 = NullType(),
-        T20 t20 = NullType(),
-        T21 t21 = NullType(),
-        T22 t22 = NullType(),
-        T23 t23 = NullType(),
-        T24 t24 = NullType(),
-        T25 t25 = NullType(),
-        T26 t26 = NullType(),
-        T27 t27 = NullType(),
-        T28 t28 = NullType(),
-        T29 t29 = NullType(),
-        T30 t30 = NullType(),
-        T31 t31 = NullType(),
-        T32 t32 = NullType(),
-        T33 t33 = NullType(),
-        T34 t34 = NullType(),
-        T35 t35 = NullType(),
-        T36 t36 = NullType(),
-        T37 t37 = NullType(),
-        T38 t38 = NullType(),
-        T39 t39 = NullType(),
-        T40 t40 = NullType(),
-        T41 t41 = NullType(),
-        T42 t42 = NullType(),
-        T43 t43 = NullType(),
-        T44 t44 = NullType(),
-        T45 t45 = NullType(),
-        T46 t46 = NullType(),
-        T47 t47 = NullType(),
-        T48 t48 = NullType(),
-        T49 t49 = NullType(),
-        T50 t50 = NullType(),
-        T51 t51 = NullType(),
-        T52 t52 = NullType(),
-        T53 t53 = NullType(),
-        T54 t54 = NullType(),
-        T55 t55 = NullType(),
-        T56 t56 = NullType(),
-        T57 t57 = NullType(),
-        T58 t58 = NullType(),
-        T59 t59 = NullType(),
-        T60 t60 = NullType(),
-        T61 t61 = NullType(),
-        T62 t62 = NullType(),
-        T63 t63 = NullType(),
-        T64 t64 = NullType(),
-        T65 t65 = NullType(),
-        T66 t66 = NullType(),
-        T67 t67 = NullType(),
-        T68 t68 = NullType(),
-        T69 t69 = NullType(),
-        T70 t70 = NullType(),
-        T71 t71 = NullType(),
-        T72 t72 = NullType(),
-        T73 t73 = NullType(),
-        T74 t74 = NullType(),
-        T75 t75 = NullType(),
-        T76 t76 = NullType(),
-        T77 t77 = NullType(),
-        T78 t78 = NullType(),
-        T79 t79 = NullType(),
-        T80 t80 = NullType(),
-        T81 t81 = NullType(),
-        T82 t82 = NullType(),
-        T83 t83 = NullType(),
-        T84 t84 = NullType(),
-        T85 t85 = NullType(),
-        T86 t86 = NullType(),
-        T87 t87 = NullType(),
-        T88 t88 = NullType(),
-        T89 t89 = NullType(),
-        T90 t90 = NullType(),
-        T91 t91 = NullType(),
-        T92 t92 = NullType(),
-        T93 t93 = NullType(),
-        T94 t94 = NullType(),
-        T95 t95 = NullType(),
-        T96 t96 = NullType(),
-        T97 t97 = NullType(),
-        T98 t98 = NullType(),
-        T99 t99 = NullType(),
-        T100 t100 = NullType(),
-        T101 t101 = NullType(),
-        T102 t102 = NullType(),
-        T103 t103 = NullType(),
-        T104 t104 = NullType(),
-        T105 t105 = NullType(),
-        T106 t106 = NullType(),
-        T107 t107 = NullType(),
-        T108 t108 = NullType(),
-        T109 t109 = NullType(),
-        T110 t110 = NullType(),
-        T111 t111 = NullType(),
-        T112 t112 = NullType(),
-        T113 t113 = NullType(),
-        T114 t114 = NullType(),
-        T115 t115 = NullType(),
-        T116 t116 = NullType(),
-        T117 t117 = NullType(),
-        T118 t118 = NullType(),
-        T119 t119 = NullType(),
-        T120 t120 = NullType(),
-        T121 t121 = NullType(),
-        T122 t122 = NullType(),
-        T123 t123 = NullType(),
-        T124 t124 = NullType(),
-        T125 t125 = NullType(),
-        T126 t126 = NullType(),
-        T127 t127 = NullType())
-    {
-        Event event;
-        SetArg<0, T0>::set(kernel_, t0);
-        SetArg<1, T1>::set(kernel_, t1);
-        SetArg<2, T2>::set(kernel_, t2);
-        SetArg<3, T3>::set(kernel_, t3);
-        SetArg<4, T4>::set(kernel_, t4);
-        SetArg<5, T5>::set(kernel_, t5);
-        SetArg<6, T6>::set(kernel_, t6);
-        SetArg<7, T7>::set(kernel_, t7);
-        SetArg<8, T8>::set(kernel_, t8);
-        SetArg<9, T9>::set(kernel_, t9);
-        SetArg<10, T10>::set(kernel_, t10);
-        SetArg<11, T11>::set(kernel_, t11);
-        SetArg<12, T12>::set(kernel_, t12);
-        SetArg<13, T13>::set(kernel_, t13);
-        SetArg<14, T14>::set(kernel_, t14);
-        SetArg<15, T15>::set(kernel_, t15);
-        SetArg<16, T16>::set(kernel_, t16);
-        SetArg<17, T17>::set(kernel_, t17);
-        SetArg<18, T18>::set(kernel_, t18);
-        SetArg<19, T19>::set(kernel_, t19);
-        SetArg<20, T20>::set(kernel_, t20);
-        SetArg<21, T21>::set(kernel_, t21);
-        SetArg<22, T22>::set(kernel_, t22);
-        SetArg<23, T23>::set(kernel_, t23);
-        SetArg<24, T24>::set(kernel_, t24);
-        SetArg<25, T25>::set(kernel_, t25);
-        SetArg<26, T26>::set(kernel_, t26);
-        SetArg<27, T27>::set(kernel_, t27);
-        SetArg<28, T28>::set(kernel_, t28);
-        SetArg<29, T29>::set(kernel_, t29);
-        SetArg<30, T30>::set(kernel_, t30);
-        SetArg<31, T31>::set(kernel_, t31);
-        SetArg<32, T32>::set(kernel_, t32);
-        SetArg<33, T33>::set(kernel_, t33);
-        SetArg<34, T34>::set(kernel_, t34);
-        SetArg<35, T35>::set(kernel_, t35);
-        SetArg<36, T36>::set(kernel_, t36);
-        SetArg<37, T37>::set(kernel_, t37);
-        SetArg<38, T38>::set(kernel_, t38);
-        SetArg<39, T39>::set(kernel_, t39);
-        SetArg<40, T40>::set(kernel_, t40);
-        SetArg<41, T41>::set(kernel_, t41);
-        SetArg<42, T42>::set(kernel_, t42);
-        SetArg<43, T43>::set(kernel_, t43);
-        SetArg<44, T44>::set(kernel_, t44);
-        SetArg<45, T45>::set(kernel_, t45);
-        SetArg<46, T46>::set(kernel_, t46);
-        SetArg<47, T47>::set(kernel_, t47);
-        SetArg<48, T48>::set(kernel_, t48);
-        SetArg<49, T49>::set(kernel_, t49);
-        SetArg<50, T50>::set(kernel_, t50);
-        SetArg<51, T51>::set(kernel_, t51);
-        SetArg<52, T52>::set(kernel_, t52);
-        SetArg<53, T53>::set(kernel_, t53);
-        SetArg<54, T54>::set(kernel_, t54);
-        SetArg<55, T55>::set(kernel_, t55);
-        SetArg<56, T56>::set(kernel_, t56);
-        SetArg<57, T57>::set(kernel_, t57);
-        SetArg<58, T58>::set(kernel_, t58);
-        SetArg<59, T59>::set(kernel_, t59);
-        SetArg<60, T60>::set(kernel_, t60);
-        SetArg<61, T61>::set(kernel_, t61);
-        SetArg<62, T62>::set(kernel_, t62);
-        SetArg<63, T63>::set(kernel_, t63);
-        SetArg<64, T64>::set(kernel_, t64);
-        SetArg<65, T65>::set(kernel_, t65);
-        SetArg<66, T66>::set(kernel_, t66);
-        SetArg<67, T67>::set(kernel_, t67);
-        SetArg<68, T68>::set(kernel_, t68);
-        SetArg<69, T69>::set(kernel_, t69);
-        SetArg<70, T70>::set(kernel_, t70);
-        SetArg<71, T71>::set(kernel_, t71);
-        SetArg<72, T72>::set(kernel_, t72);
-        SetArg<73, T73>::set(kernel_, t73);
-        SetArg<74, T74>::set(kernel_, t74);
-        SetArg<75, T75>::set(kernel_, t75);
-        SetArg<76, T76>::set(kernel_, t76);
-        SetArg<77, T77>::set(kernel_, t77);
-        SetArg<78, T78>::set(kernel_, t78);
-        SetArg<79, T79>::set(kernel_, t79);
-        SetArg<80, T80>::set(kernel_, t80);
-        SetArg<81, T81>::set(kernel_, t81);
-        SetArg<82, T82>::set(kernel_, t82);
-        SetArg<83, T83>::set(kernel_, t83);
-        SetArg<84, T84>::set(kernel_, t84);
-        SetArg<85, T85>::set(kernel_, t85);
-        SetArg<86, T86>::set(kernel_, t86);
-        SetArg<87, T87>::set(kernel_, t87);
-        SetArg<88, T88>::set(kernel_, t88);
-        SetArg<89, T89>::set(kernel_, t89);
-        SetArg<90, T90>::set(kernel_, t90);
-        SetArg<91, T91>::set(kernel_, t91);
-        SetArg<92, T92>::set(kernel_, t92);
-        SetArg<93, T93>::set(kernel_, t93);
-        SetArg<94, T94>::set(kernel_, t94);
-        SetArg<95, T95>::set(kernel_, t95);
-        SetArg<96, T96>::set(kernel_, t96);
-        SetArg<97, T97>::set(kernel_, t97);
-        SetArg<98, T98>::set(kernel_, t98);
-        SetArg<99, T99>::set(kernel_, t99);
-        SetArg<100, T100>::set(kernel_, t100);
-        SetArg<101, T101>::set(kernel_, t101);
-        SetArg<102, T102>::set(kernel_, t102);
-        SetArg<103, T103>::set(kernel_, t103);
-        SetArg<104, T104>::set(kernel_, t104);
-        SetArg<105, T105>::set(kernel_, t105);
-        SetArg<106, T106>::set(kernel_, t106);
-        SetArg<107, T107>::set(kernel_, t107);
-        SetArg<108, T108>::set(kernel_, t108);
-        SetArg<109, T109>::set(kernel_, t109);
-        SetArg<110, T110>::set(kernel_, t110);
-        SetArg<111, T111>::set(kernel_, t111);
-        SetArg<112, T112>::set(kernel_, t112);
-        SetArg<113, T113>::set(kernel_, t113);
-        SetArg<114, T114>::set(kernel_, t114);
-        SetArg<115, T115>::set(kernel_, t115);
-        SetArg<116, T116>::set(kernel_, t116);
-        SetArg<117, T117>::set(kernel_, t117);
-        SetArg<118, T118>::set(kernel_, t118);
-        SetArg<119, T119>::set(kernel_, t119);
-        SetArg<120, T120>::set(kernel_, t120);
-        SetArg<121, T121>::set(kernel_, t121);
-        SetArg<122, T122>::set(kernel_, t122);
-        SetArg<123, T123>::set(kernel_, t123);
-        SetArg<124, T124>::set(kernel_, t124);
-        SetArg<125, T125>::set(kernel_, t125);
-        SetArg<126, T126>::set(kernel_, t126);
-        SetArg<127, T127>::set(kernel_, t127);
-
-		// Move any arguments that need moving
-        MoveToDevice<T0>::move(args.queue_, t0);
-        MoveToDevice<T1>::move(args.queue_, t1);
-        MoveToDevice<T2>::move(args.queue_, t2);
-        MoveToDevice<T3>::move(args.queue_, t3);
-        MoveToDevice<T4>::move(args.queue_, t4);
-        MoveToDevice<T5>::move(args.queue_, t5);
-        MoveToDevice<T6>::move(args.queue_, t6);
-        MoveToDevice<T7>::move(args.queue_, t7);
-        MoveToDevice<T8>::move(args.queue_, t8);
-        MoveToDevice<T9>::move(args.queue_, t9);
-        MoveToDevice<T10>::move(args.queue_, t10);
-        MoveToDevice<T11>::move(args.queue_, t11);
-        MoveToDevice<T12>::move(args.queue_, t12);
-        MoveToDevice<T13>::move(args.queue_, t13);
-        MoveToDevice<T14>::move(args.queue_, t14);
-        MoveToDevice<T15>::move(args.queue_, t15);
-        MoveToDevice<T16>::move(args.queue_, t16);
-        MoveToDevice<T17>::move(args.queue_, t17);
-        MoveToDevice<T18>::move(args.queue_, t18);
-        MoveToDevice<T19>::move(args.queue_, t19);
-        MoveToDevice<T20>::move(args.queue_, t20);
-        MoveToDevice<T21>::move(args.queue_, t21);
-        MoveToDevice<T22>::move(args.queue_, t22);
-        MoveToDevice<T23>::move(args.queue_, t23);
-        MoveToDevice<T24>::move(args.queue_, t24);
-        MoveToDevice<T25>::move(args.queue_, t25);
-        MoveToDevice<T26>::move(args.queue_, t26);
-        MoveToDevice<T27>::move(args.queue_, t27);
-        MoveToDevice<T28>::move(args.queue_, t28);
-        MoveToDevice<T29>::move(args.queue_, t29);
-        MoveToDevice<T30>::move(args.queue_, t30);
-        MoveToDevice<T31>::move(args.queue_, t31);
-        MoveToDevice<T32>::move(args.queue_, t32);
-        MoveToDevice<T33>::move(args.queue_, t33);
-        MoveToDevice<T34>::move(args.queue_, t34);
-        MoveToDevice<T35>::move(args.queue_, t35);
-        MoveToDevice<T36>::move(args.queue_, t36);
-        MoveToDevice<T37>::move(args.queue_, t37);
-        MoveToDevice<T38>::move(args.queue_, t38);
-        MoveToDevice<T39>::move(args.queue_, t39);
-        MoveToDevice<T40>::move(args.queue_, t40);
-        MoveToDevice<T41>::move(args.queue_, t41);
-        MoveToDevice<T42>::move(args.queue_, t42);
-        MoveToDevice<T43>::move(args.queue_, t43);
-        MoveToDevice<T44>::move(args.queue_, t44);
-        MoveToDevice<T45>::move(args.queue_, t45);
-        MoveToDevice<T46>::move(args.queue_, t46);
-        MoveToDevice<T47>::move(args.queue_, t47);
-        MoveToDevice<T48>::move(args.queue_, t48);
-        MoveToDevice<T49>::move(args.queue_, t49);
-        MoveToDevice<T50>::move(args.queue_, t50);
-        MoveToDevice<T51>::move(args.queue_, t51);
-        MoveToDevice<T52>::move(args.queue_, t52);
-        MoveToDevice<T53>::move(args.queue_, t53);
-        MoveToDevice<T54>::move(args.queue_, t54);
-        MoveToDevice<T55>::move(args.queue_, t55);
-        MoveToDevice<T56>::move(args.queue_, t56);
-        MoveToDevice<T57>::move(args.queue_, t57);
-        MoveToDevice<T58>::move(args.queue_, t58);
-        MoveToDevice<T59>::move(args.queue_, t59);
-        MoveToDevice<T60>::move(args.queue_, t60);
-        MoveToDevice<T61>::move(args.queue_, t61);
-        MoveToDevice<T62>::move(args.queue_, t62);
-        MoveToDevice<T63>::move(args.queue_, t63);
-        MoveToDevice<T64>::move(args.queue_, t64);
-        MoveToDevice<T65>::move(args.queue_, t65);
-        MoveToDevice<T66>::move(args.queue_, t66);
-        MoveToDevice<T67>::move(args.queue_, t67);
-        MoveToDevice<T68>::move(args.queue_, t68);
-        MoveToDevice<T69>::move(args.queue_, t69);
-        MoveToDevice<T70>::move(args.queue_, t70);
-        MoveToDevice<T71>::move(args.queue_, t71);
-        MoveToDevice<T72>::move(args.queue_, t72);
-        MoveToDevice<T73>::move(args.queue_, t73);
-        MoveToDevice<T74>::move(args.queue_, t74);
-        MoveToDevice<T75>::move(args.queue_, t75);
-        MoveToDevice<T76>::move(args.queue_, t76);
-        MoveToDevice<T77>::move(args.queue_, t77);
-        MoveToDevice<T78>::move(args.queue_, t78);
-        MoveToDevice<T79>::move(args.queue_, t79);
-        MoveToDevice<T80>::move(args.queue_, t80);
-        MoveToDevice<T81>::move(args.queue_, t81);
-        MoveToDevice<T82>::move(args.queue_, t82);
-        MoveToDevice<T83>::move(args.queue_, t83);
-        MoveToDevice<T84>::move(args.queue_, t84);
-        MoveToDevice<T85>::move(args.queue_, t85);
-        MoveToDevice<T86>::move(args.queue_, t86);
-        MoveToDevice<T87>::move(args.queue_, t87);
-        MoveToDevice<T88>::move(args.queue_, t88);
-        MoveToDevice<T89>::move(args.queue_, t89);
-        MoveToDevice<T90>::move(args.queue_, t90);
-        MoveToDevice<T91>::move(args.queue_, t91);
-        MoveToDevice<T92>::move(args.queue_, t92);
-        MoveToDevice<T93>::move(args.queue_, t93);
-        MoveToDevice<T94>::move(args.queue_, t94);
-        MoveToDevice<T95>::move(args.queue_, t95);
-        MoveToDevice<T96>::move(args.queue_, t96);
-        MoveToDevice<T97>::move(args.queue_, t97);
-        MoveToDevice<T98>::move(args.queue_, t98);
-        MoveToDevice<T99>::move(args.queue_, t99);
-        MoveToDevice<T100>::move(args.queue_, t100);
-        MoveToDevice<T101>::move(args.queue_, t101);
-        MoveToDevice<T102>::move(args.queue_, t102);
-        MoveToDevice<T103>::move(args.queue_, t103);
-        MoveToDevice<T104>::move(args.queue_, t104);
-        MoveToDevice<T105>::move(args.queue_, t105);
-        MoveToDevice<T106>::move(args.queue_, t106);
-        MoveToDevice<T107>::move(args.queue_, t107);
-        MoveToDevice<T108>::move(args.queue_, t108);
-        MoveToDevice<T109>::move(args.queue_, t109);
-        MoveToDevice<T110>::move(args.queue_, t110);
-        MoveToDevice<T111>::move(args.queue_, t111);
-        MoveToDevice<T112>::move(args.queue_, t112);
-        MoveToDevice<T113>::move(args.queue_, t113);
-        MoveToDevice<T114>::move(args.queue_, t114);
-        MoveToDevice<T115>::move(args.queue_, t115);
-        MoveToDevice<T116>::move(args.queue_, t116);
-        MoveToDevice<T117>::move(args.queue_, t117);
-        MoveToDevice<T118>::move(args.queue_, t118);
-        MoveToDevice<T119>::move(args.queue_, t119);
-        MoveToDevice<T120>::move(args.queue_, t120);
-        MoveToDevice<T121>::move(args.queue_, t121);
-        MoveToDevice<T122>::move(args.queue_, t122);
-        MoveToDevice<T123>::move(args.queue_, t123);
-        MoveToDevice<T124>::move(args.queue_, t124);
-        MoveToDevice<T125>::move(args.queue_, t125);
-        MoveToDevice<T126>::move(args.queue_, t126);
-        MoveToDevice<T127>::move(args.queue_, t127);
-
-        args.queue_.enqueueNDRangeKernel(
-            kernel_,
-            args.offset_,
-            args.global_,
-            args.local_,
-            &waitEvents,
-            &event);
-
-		// Move any arguments that need moving
-       MoveFromDevice<T0>::move(args.queue_, t0);
-        MoveFromDevice<T1>::move(args.queue_, t1);
-        MoveFromDevice<T2>::move(args.queue_, t2);
-        MoveFromDevice<T3>::move(args.queue_, t3);
-        MoveFromDevice<T4>::move(args.queue_, t4);
-        MoveFromDevice<T5>::move(args.queue_, t5);
-        MoveFromDevice<T6>::move(args.queue_, t6);
-        MoveFromDevice<T7>::move(args.queue_, t7);
-        MoveFromDevice<T8>::move(args.queue_, t8);
-        MoveFromDevice<T9>::move(args.queue_, t9);
-        MoveFromDevice<T10>::move(args.queue_, t10);
-        MoveFromDevice<T11>::move(args.queue_, t11);
-        MoveFromDevice<T12>::move(args.queue_, t12);
-        MoveFromDevice<T13>::move(args.queue_, t13);
-        MoveFromDevice<T14>::move(args.queue_, t14);
-        MoveFromDevice<T15>::move(args.queue_, t15);
-        MoveFromDevice<T16>::move(args.queue_, t16);
-        MoveFromDevice<T17>::move(args.queue_, t17);
-        MoveFromDevice<T18>::move(args.queue_, t18);
-        MoveFromDevice<T19>::move(args.queue_, t19);
-        MoveFromDevice<T20>::move(args.queue_, t20);
-        MoveFromDevice<T21>::move(args.queue_, t21);
-        MoveFromDevice<T22>::move(args.queue_, t22);
-        MoveFromDevice<T23>::move(args.queue_, t23);
-        MoveFromDevice<T24>::move(args.queue_, t24);
-        MoveFromDevice<T25>::move(args.queue_, t25);
-        MoveFromDevice<T26>::move(args.queue_, t26);
-        MoveFromDevice<T27>::move(args.queue_, t27);
-        MoveFromDevice<T28>::move(args.queue_, t28);
-        MoveFromDevice<T29>::move(args.queue_, t29);
-        MoveFromDevice<T30>::move(args.queue_, t30);
-        MoveFromDevice<T31>::move(args.queue_, t31);
-        MoveFromDevice<T32>::move(args.queue_, t32);
-        MoveFromDevice<T33>::move(args.queue_, t33);
-        MoveFromDevice<T34>::move(args.queue_, t34);
-        MoveFromDevice<T35>::move(args.queue_, t35);
-        MoveFromDevice<T36>::move(args.queue_, t36);
-        MoveFromDevice<T37>::move(args.queue_, t37);
-        MoveFromDevice<T38>::move(args.queue_, t38);
-        MoveFromDevice<T39>::move(args.queue_, t39);
-        MoveFromDevice<T40>::move(args.queue_, t40);
-        MoveFromDevice<T41>::move(args.queue_, t41);
-        MoveFromDevice<T42>::move(args.queue_, t42);
-        MoveFromDevice<T43>::move(args.queue_, t43);
-        MoveFromDevice<T44>::move(args.queue_, t44);
-        MoveFromDevice<T45>::move(args.queue_, t45);
-        MoveFromDevice<T46>::move(args.queue_, t46);
-        MoveFromDevice<T47>::move(args.queue_, t47);
-        MoveFromDevice<T48>::move(args.queue_, t48);
-        MoveFromDevice<T49>::move(args.queue_, t49);
-        MoveFromDevice<T50>::move(args.queue_, t50);
-        MoveFromDevice<T51>::move(args.queue_, t51);
-        MoveFromDevice<T52>::move(args.queue_, t52);
-        MoveFromDevice<T53>::move(args.queue_, t53);
-        MoveFromDevice<T54>::move(args.queue_, t54);
-        MoveFromDevice<T55>::move(args.queue_, t55);
-        MoveFromDevice<T56>::move(args.queue_, t56);
-        MoveFromDevice<T57>::move(args.queue_, t57);
-        MoveFromDevice<T58>::move(args.queue_, t58);
-        MoveFromDevice<T59>::move(args.queue_, t59);
-        MoveFromDevice<T60>::move(args.queue_, t60);
-        MoveFromDevice<T61>::move(args.queue_, t61);
-        MoveFromDevice<T62>::move(args.queue_, t62);
-        MoveFromDevice<T63>::move(args.queue_, t63);
-        MoveFromDevice<T64>::move(args.queue_, t64);
-        MoveFromDevice<T65>::move(args.queue_, t65);
-        MoveFromDevice<T66>::move(args.queue_, t66);
-        MoveFromDevice<T67>::move(args.queue_, t67);
-        MoveFromDevice<T68>::move(args.queue_, t68);
-        MoveFromDevice<T69>::move(args.queue_, t69);
-        MoveFromDevice<T70>::move(args.queue_, t70);
-        MoveFromDevice<T71>::move(args.queue_, t71);
-        MoveFromDevice<T72>::move(args.queue_, t72);
-        MoveFromDevice<T73>::move(args.queue_, t73);
-        MoveFromDevice<T74>::move(args.queue_, t74);
-        MoveFromDevice<T75>::move(args.queue_, t75);
-        MoveFromDevice<T76>::move(args.queue_, t76);
-        MoveFromDevice<T77>::move(args.queue_, t77);
-        MoveFromDevice<T78>::move(args.queue_, t78);
-        MoveFromDevice<T79>::move(args.queue_, t79);
-        MoveFromDevice<T80>::move(args.queue_, t80);
-        MoveFromDevice<T81>::move(args.queue_, t81);
-        MoveFromDevice<T82>::move(args.queue_, t82);
-        MoveFromDevice<T83>::move(args.queue_, t83);
-        MoveFromDevice<T84>::move(args.queue_, t84);
-        MoveFromDevice<T85>::move(args.queue_, t85);
-        MoveFromDevice<T86>::move(args.queue_, t86);
-        MoveFromDevice<T87>::move(args.queue_, t87);
-        MoveFromDevice<T88>::move(args.queue_, t88);
-        MoveFromDevice<T89>::move(args.queue_, t89);
-        MoveFromDevice<T90>::move(args.queue_, t90);
-        MoveFromDevice<T91>::move(args.queue_, t91);
-        MoveFromDevice<T92>::move(args.queue_, t92);
-        MoveFromDevice<T93>::move(args.queue_, t93);
-        MoveFromDevice<T94>::move(args.queue_, t94);
-        MoveFromDevice<T95>::move(args.queue_, t95);
-        MoveFromDevice<T96>::move(args.queue_, t96);
-        MoveFromDevice<T97>::move(args.queue_, t97);
-        MoveFromDevice<T98>::move(args.queue_, t98);
-        MoveFromDevice<T99>::move(args.queue_, t99);
-        MoveFromDevice<T100>::move(args.queue_, t100);
-        MoveFromDevice<T101>::move(args.queue_, t101);
-        MoveFromDevice<T102>::move(args.queue_, t102);
-        MoveFromDevice<T103>::move(args.queue_, t103);
-        MoveFromDevice<T104>::move(args.queue_, t104);
-        MoveFromDevice<T105>::move(args.queue_, t105);
-        MoveFromDevice<T106>::move(args.queue_, t106);
-        MoveFromDevice<T107>::move(args.queue_, t107);
-        MoveFromDevice<T108>::move(args.queue_, t108);
-        MoveFromDevice<T109>::move(args.queue_, t109);
-        MoveFromDevice<T110>::move(args.queue_, t110);
-        MoveFromDevice<T111>::move(args.queue_, t111);
-        MoveFromDevice<T112>::move(args.queue_, t112);
-        MoveFromDevice<T113>::move(args.queue_, t113);
-        MoveFromDevice<T114>::move(args.queue_, t114);
-        MoveFromDevice<T115>::move(args.queue_, t115);
-        MoveFromDevice<T116>::move(args.queue_, t116);
-        MoveFromDevice<T117>::move(args.queue_, t117);
-        MoveFromDevice<T118>::move(args.queue_, t118);
-        MoveFromDevice<T119>::move(args.queue_, t119);
-        MoveFromDevice<T120>::move(args.queue_, t120);
-        MoveFromDevice<T121>::move(args.queue_, t121);
-        MoveFromDevice<T122>::move(args.queue_, t122);
-        MoveFromDevice<T123>::move(args.queue_, t123);
-        MoveFromDevice<T124>::move(args.queue_, t124);
-        MoveFromDevice<T125>::move(args.queue_, t125);
-        MoveFromDevice<T126>::move(args.queue_, t126);
-        MoveFromDevice<T127>::move(args.queue_, t127);
-
-        return event;
-    }
-};
-
-//------------------------------------------------------------------------------------------------------
-
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119,
-	typename T120,
-	typename T121,
-	typename T122,
-	typename T123,
-	typename T124,
-	typename T125,
-	typename T126,
-	typename T127>
-struct functionImplementation_
-{
-};
-
-template<
-	typename T0>
-struct functionImplementation_<
-	T0,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1>
-struct functionImplementation_<
-	T0,
-	T1,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	T119,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118,
-		T119 arg119)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118,
-			arg119);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119,
-	typename T120>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	T119,
-	T120,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118,
-		T119 arg119,
-		T120 arg120)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118,
-			arg119,
-			arg120);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119,
-	typename T120,
-	typename T121>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	T119,
-	T120,
-	T121,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118,
-		T119 arg119,
-		T120 arg120,
-		T121 arg121)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118,
-			arg119,
-			arg120,
-			arg121);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119,
-	typename T120,
-	typename T121,
-	typename T122>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	T119,
-	T120,
-	T121,
-	T122,
-	NullType,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		NullType,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118,
-		T119 arg119,
-		T120 arg120,
-		T121 arg121,
-		T122 arg122)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118,
-			arg119,
-			arg120,
-			arg121,
-			arg122);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119,
-	typename T120,
-	typename T121,
-	typename T122,
-	typename T123>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	T119,
-	T120,
-	T121,
-	T122,
-	T123,
-	NullType,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		T123,
-		NullType,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		T123)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118,
-		T119 arg119,
-		T120 arg120,
-		T121 arg121,
-		T122 arg122,
-		T123 arg123)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118,
-			arg119,
-			arg120,
-			arg121,
-			arg122,
-			arg123);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119,
-	typename T120,
-	typename T121,
-	typename T122,
-	typename T123,
-	typename T124>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	T119,
-	T120,
-	T121,
-	T122,
-	T123,
-	T124,
-	NullType,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		T123,
-		T124,
-		NullType,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		T123,
-		T124)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118,
-		T119 arg119,
-		T120 arg120,
-		T121 arg121,
-		T122 arg122,
-		T123 arg123,
-		T124 arg124)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118,
-			arg119,
-			arg120,
-			arg121,
-			arg122,
-			arg123,
-			arg124);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119,
-	typename T120,
-	typename T121,
-	typename T122,
-	typename T123,
-	typename T124,
-	typename T125>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	T119,
-	T120,
-	T121,
-	T122,
-	T123,
-	T124,
-	T125,
-	NullType,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		T123,
-		T124,
-		T125,
-		NullType,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		T123,
-		T124,
-		T125)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118,
-		T119 arg119,
-		T120 arg120,
-		T121 arg121,
-		T122 arg122,
-		T123 arg123,
-		T124 arg124,
-		T125 arg125)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118,
-			arg119,
-			arg120,
-			arg121,
-			arg122,
-			arg123,
-			arg124,
-			arg125);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-template<
-	typename T0,
-	typename T1,
-	typename T2,
-	typename T3,
-	typename T4,
-	typename T5,
-	typename T6,
-	typename T7,
-	typename T8,
-	typename T9,
-	typename T10,
-	typename T11,
-	typename T12,
-	typename T13,
-	typename T14,
-	typename T15,
-	typename T16,
-	typename T17,
-	typename T18,
-	typename T19,
-	typename T20,
-	typename T21,
-	typename T22,
-	typename T23,
-	typename T24,
-	typename T25,
-	typename T26,
-	typename T27,
-	typename T28,
-	typename T29,
-	typename T30,
-	typename T31,
-	typename T32,
-	typename T33,
-	typename T34,
-	typename T35,
-	typename T36,
-	typename T37,
-	typename T38,
-	typename T39,
-	typename T40,
-	typename T41,
-	typename T42,
-	typename T43,
-	typename T44,
-	typename T45,
-	typename T46,
-	typename T47,
-	typename T48,
-	typename T49,
-	typename T50,
-	typename T51,
-	typename T52,
-	typename T53,
-	typename T54,
-	typename T55,
-	typename T56,
-	typename T57,
-	typename T58,
-	typename T59,
-	typename T60,
-	typename T61,
-	typename T62,
-	typename T63,
-	typename T64,
-	typename T65,
-	typename T66,
-	typename T67,
-	typename T68,
-	typename T69,
-	typename T70,
-	typename T71,
-	typename T72,
-	typename T73,
-	typename T74,
-	typename T75,
-	typename T76,
-	typename T77,
-	typename T78,
-	typename T79,
-	typename T80,
-	typename T81,
-	typename T82,
-	typename T83,
-	typename T84,
-	typename T85,
-	typename T86,
-	typename T87,
-	typename T88,
-	typename T89,
-	typename T90,
-	typename T91,
-	typename T92,
-	typename T93,
-	typename T94,
-	typename T95,
-	typename T96,
-	typename T97,
-	typename T98,
-	typename T99,
-	typename T100,
-	typename T101,
-	typename T102,
-	typename T103,
-	typename T104,
-	typename T105,
-	typename T106,
-	typename T107,
-	typename T108,
-	typename T109,
-	typename T110,
-	typename T111,
-	typename T112,
-	typename T113,
-	typename T114,
-	typename T115,
-	typename T116,
-	typename T117,
-	typename T118,
-	typename T119,
-	typename T120,
-	typename T121,
-	typename T122,
-	typename T123,
-	typename T124,
-	typename T125,
-	typename T126>
-struct functionImplementation_<
-	T0,
-	T1,
-	T2,
-	T3,
-	T4,
-	T5,
-	T6,
-	T7,
-	T8,
-	T9,
-	T10,
-	T11,
-	T12,
-	T13,
-	T14,
-	T15,
-	T16,
-	T17,
-	T18,
-	T19,
-	T20,
-	T21,
-	T22,
-	T23,
-	T24,
-	T25,
-	T26,
-	T27,
-	T28,
-	T29,
-	T30,
-	T31,
-	T32,
-	T33,
-	T34,
-	T35,
-	T36,
-	T37,
-	T38,
-	T39,
-	T40,
-	T41,
-	T42,
-	T43,
-	T44,
-	T45,
-	T46,
-	T47,
-	T48,
-	T49,
-	T50,
-	T51,
-	T52,
-	T53,
-	T54,
-	T55,
-	T56,
-	T57,
-	T58,
-	T59,
-	T60,
-	T61,
-	T62,
-	T63,
-	T64,
-	T65,
-	T66,
-	T67,
-	T68,
-	T69,
-	T70,
-	T71,
-	T72,
-	T73,
-	T74,
-	T75,
-	T76,
-	T77,
-	T78,
-	T79,
-	T80,
-	T81,
-	T82,
-	T83,
-	T84,
-	T85,
-	T86,
-	T87,
-	T88,
-	T89,
-	T90,
-	T91,
-	T92,
-	T93,
-	T94,
-	T95,
-	T96,
-	T97,
-	T98,
-	T99,
-	T100,
-	T101,
-	T102,
-	T103,
-	T104,
-	T105,
-	T106,
-	T107,
-	T108,
-	T109,
-	T110,
-	T111,
-	T112,
-	T113,
-	T114,
-	T115,
-	T116,
-	T117,
-	T118,
-	T119,
-	T120,
-	T121,
-	T122,
-	T123,
-	T124,
-	T125,
-	T126,
-	NullType>
-{
-	typedef detail::KernelFunctorGlobal<
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		T123,
-		T124,
-		T125,
-		T126,
-		NullType> FunctorType;
-
-	FunctorType functor_;
-
-	functionImplementation_(const FunctorType &functor) :
-		functor_(functor)
-	{
-	}
-        
-	typedef std::tr1::function<Event (
-		const EnqueueArgs&,
-		T0,
-		T1,
-		T2,
-		T3,
-		T4,
-		T5,
-		T6,
-		T7,
-		T8,
-		T9,
-		T10,
-		T11,
-		T12,
-		T13,
-		T14,
-		T15,
-		T16,
-		T17,
-		T18,
-		T19,
-		T20,
-		T21,
-		T22,
-		T23,
-		T24,
-		T25,
-		T26,
-		T27,
-		T28,
-		T29,
-		T30,
-		T31,
-		T32,
-		T33,
-		T34,
-		T35,
-		T36,
-		T37,
-		T38,
-		T39,
-		T40,
-		T41,
-		T42,
-		T43,
-		T44,
-		T45,
-		T46,
-		T47,
-		T48,
-		T49,
-		T50,
-		T51,
-		T52,
-		T53,
-		T54,
-		T55,
-		T56,
-		T57,
-		T58,
-		T59,
-		T60,
-		T61,
-		T62,
-		T63,
-		T64,
-		T65,
-		T66,
-		T67,
-		T68,
-		T69,
-		T70,
-		T71,
-		T72,
-		T73,
-		T74,
-		T75,
-		T76,
-		T77,
-		T78,
-		T79,
-		T80,
-		T81,
-		T82,
-		T83,
-		T84,
-		T85,
-		T86,
-		T87,
-		T88,
-		T89,
-		T90,
-		T91,
-		T92,
-		T93,
-		T94,
-		T95,
-		T96,
-		T97,
-		T98,
-		T99,
-		T100,
-		T101,
-		T102,
-		T103,
-		T104,
-		T105,
-		T106,
-		T107,
-		T108,
-		T109,
-		T110,
-		T111,
-		T112,
-		T113,
-		T114,
-		T115,
-		T116,
-		T117,
-		T118,
-		T119,
-		T120,
-		T121,
-		T122,
-		T123,
-		T124,
-		T125,
-		T126)> type_;
-
-	Event operator()(const EnqueueArgs& enqueueArgs,
-		T0 arg0,
-		T1 arg1,
-		T2 arg2,
-		T3 arg3,
-		T4 arg4,
-		T5 arg5,
-		T6 arg6,
-		T7 arg7,
-		T8 arg8,
-		T9 arg9,
-		T10 arg10,
-		T11 arg11,
-		T12 arg12,
-		T13 arg13,
-		T14 arg14,
-		T15 arg15,
-		T16 arg16,
-		T17 arg17,
-		T18 arg18,
-		T19 arg19,
-		T20 arg20,
-		T21 arg21,
-		T22 arg22,
-		T23 arg23,
-		T24 arg24,
-		T25 arg25,
-		T26 arg26,
-		T27 arg27,
-		T28 arg28,
-		T29 arg29,
-		T30 arg30,
-		T31 arg31,
-		T32 arg32,
-		T33 arg33,
-		T34 arg34,
-		T35 arg35,
-		T36 arg36,
-		T37 arg37,
-		T38 arg38,
-		T39 arg39,
-		T40 arg40,
-		T41 arg41,
-		T42 arg42,
-		T43 arg43,
-		T44 arg44,
-		T45 arg45,
-		T46 arg46,
-		T47 arg47,
-		T48 arg48,
-		T49 arg49,
-		T50 arg50,
-		T51 arg51,
-		T52 arg52,
-		T53 arg53,
-		T54 arg54,
-		T55 arg55,
-		T56 arg56,
-		T57 arg57,
-		T58 arg58,
-		T59 arg59,
-		T60 arg60,
-		T61 arg61,
-		T62 arg62,
-		T63 arg63,
-		T64 arg64,
-		T65 arg65,
-		T66 arg66,
-		T67 arg67,
-		T68 arg68,
-		T69 arg69,
-		T70 arg70,
-		T71 arg71,
-		T72 arg72,
-		T73 arg73,
-		T74 arg74,
-		T75 arg75,
-		T76 arg76,
-		T77 arg77,
-		T78 arg78,
-		T79 arg79,
-		T80 arg80,
-		T81 arg81,
-		T82 arg82,
-		T83 arg83,
-		T84 arg84,
-		T85 arg85,
-		T86 arg86,
-		T87 arg87,
-		T88 arg88,
-		T89 arg89,
-		T90 arg90,
-		T91 arg91,
-		T92 arg92,
-		T93 arg93,
-		T94 arg94,
-		T95 arg95,
-		T96 arg96,
-		T97 arg97,
-		T98 arg98,
-		T99 arg99,
-		T100 arg100,
-		T101 arg101,
-		T102 arg102,
-		T103 arg103,
-		T104 arg104,
-		T105 arg105,
-		T106 arg106,
-		T107 arg107,
-		T108 arg108,
-		T109 arg109,
-		T110 arg110,
-		T111 arg111,
-		T112 arg112,
-		T113 arg113,
-		T114 arg114,
-		T115 arg115,
-		T116 arg116,
-		T117 arg117,
-		T118 arg118,
-		T119 arg119,
-		T120 arg120,
-		T121 arg121,
-		T122 arg122,
-		T123 arg123,
-		T124 arg124,
-		T125 arg125,
-		T126 arg126)
-	{
-		return functor_(
-			enqueueArgs,
-			arg0,
-			arg1,
-			arg2,
-			arg3,
-			arg4,
-			arg5,
-			arg6,
-			arg7,
-			arg8,
-			arg9,
-			arg10,
-			arg11,
-			arg12,
-			arg13,
-			arg14,
-			arg15,
-			arg16,
-			arg17,
-			arg18,
-			arg19,
-			arg20,
-			arg21,
-			arg22,
-			arg23,
-			arg24,
-			arg25,
-			arg26,
-			arg27,
-			arg28,
-			arg29,
-			arg30,
-			arg31,
-			arg32,
-			arg33,
-			arg34,
-			arg35,
-			arg36,
-			arg37,
-			arg38,
-			arg39,
-			arg40,
-			arg41,
-			arg42,
-			arg43,
-			arg44,
-			arg45,
-			arg46,
-			arg47,
-			arg48,
-			arg49,
-			arg50,
-			arg51,
-			arg52,
-			arg53,
-			arg54,
-			arg55,
-			arg56,
-			arg57,
-			arg58,
-			arg59,
-			arg60,
-			arg61,
-			arg62,
-			arg63,
-			arg64,
-			arg65,
-			arg66,
-			arg67,
-			arg68,
-			arg69,
-			arg70,
-			arg71,
-			arg72,
-			arg73,
-			arg74,
-			arg75,
-			arg76,
-			arg77,
-			arg78,
-			arg79,
-			arg80,
-			arg81,
-			arg82,
-			arg83,
-			arg84,
-			arg85,
-			arg86,
-			arg87,
-			arg88,
-			arg89,
-			arg90,
-			arg91,
-			arg92,
-			arg93,
-			arg94,
-			arg95,
-			arg96,
-			arg97,
-			arg98,
-			arg99,
-			arg100,
-			arg101,
-			arg102,
-			arg103,
-			arg104,
-			arg105,
-			arg106,
-			arg107,
-			arg108,
-			arg109,
-			arg110,
-			arg111,
-			arg112,
-			arg113,
-			arg114,
-			arg115,
-			arg116,
-			arg117,
-			arg118,
-			arg119,
-			arg120,
-			arg121,
-			arg122,
-			arg123,
-			arg124,
-			arg125,
-			arg126);
-	}
-
-	operator type_ ()    
-	{
-		return type_(*this);
-	}
-
-};
-
-
-
-
-
-} // namespace detail
-
-//----------------------------------------------------------------------------------------------
-
-template <
-   typename T0,   typename T1 = detail::NullType,   typename T2 = detail::NullType,
-   typename T3 = detail::NullType,   typename T4 = detail::NullType,
-   typename T5 = detail::NullType,   typename T6 = detail::NullType,
-   typename T7 = detail::NullType,   typename T8 = detail::NullType,
-   typename T9 = detail::NullType,   typename T10 = detail::NullType,
-   typename T11 = detail::NullType,   typename T12 = detail::NullType,
-   typename T13 = detail::NullType,   typename T14 = detail::NullType,
-   typename T15 = detail::NullType,   typename T16 = detail::NullType,
-   typename T17 = detail::NullType,   typename T18 = detail::NullType,
-   typename T19 = detail::NullType,   typename T20 = detail::NullType,
-   typename T21 = detail::NullType,   typename T22 = detail::NullType,
-   typename T23 = detail::NullType,   typename T24 = detail::NullType,
-   typename T25 = detail::NullType,   typename T26 = detail::NullType,
-   typename T27 = detail::NullType,   typename T28 = detail::NullType,
-   typename T29 = detail::NullType,   typename T30 = detail::NullType,
-   typename T31 = detail::NullType,   typename T32 = detail::NullType,
-   typename T33 = detail::NullType,   typename T34 = detail::NullType,
-   typename T35 = detail::NullType,   typename T36 = detail::NullType,
-   typename T37 = detail::NullType,   typename T38 = detail::NullType,
-   typename T39 = detail::NullType,   typename T40 = detail::NullType,
-   typename T41 = detail::NullType,   typename T42 = detail::NullType,
-   typename T43 = detail::NullType,   typename T44 = detail::NullType,
-   typename T45 = detail::NullType,   typename T46 = detail::NullType,
-   typename T47 = detail::NullType,   typename T48 = detail::NullType,
-   typename T49 = detail::NullType,   typename T50 = detail::NullType,
-   typename T51 = detail::NullType,   typename T52 = detail::NullType,
-   typename T53 = detail::NullType,   typename T54 = detail::NullType,
-   typename T55 = detail::NullType,   typename T56 = detail::NullType,
-   typename T57 = detail::NullType,   typename T58 = detail::NullType,
-   typename T59 = detail::NullType,   typename T60 = detail::NullType,
-   typename T61 = detail::NullType,   typename T62 = detail::NullType,
-   typename T63 = detail::NullType,   typename T64 = detail::NullType,
-   typename T65 = detail::NullType,   typename T66 = detail::NullType,
-   typename T67 = detail::NullType,   typename T68 = detail::NullType,
-   typename T69 = detail::NullType,   typename T70 = detail::NullType,
-   typename T71 = detail::NullType,   typename T72 = detail::NullType,
-   typename T73 = detail::NullType,   typename T74 = detail::NullType,
-   typename T75 = detail::NullType,   typename T76 = detail::NullType,
-   typename T77 = detail::NullType,   typename T78 = detail::NullType,
-   typename T79 = detail::NullType,   typename T80 = detail::NullType,
-   typename T81 = detail::NullType,   typename T82 = detail::NullType,
-   typename T83 = detail::NullType,   typename T84 = detail::NullType,
-   typename T85 = detail::NullType,   typename T86 = detail::NullType,
-   typename T87 = detail::NullType,   typename T88 = detail::NullType,
-   typename T89 = detail::NullType,   typename T90 = detail::NullType,
-   typename T91 = detail::NullType,   typename T92 = detail::NullType,
-   typename T93 = detail::NullType,   typename T94 = detail::NullType,
-   typename T95 = detail::NullType,   typename T96 = detail::NullType,
-   typename T97 = detail::NullType,   typename T98 = detail::NullType,
-   typename T99 = detail::NullType,   typename T100 = detail::NullType,
-   typename T101 = detail::NullType,   typename T102 = detail::NullType,
-   typename T103 = detail::NullType,   typename T104 = detail::NullType,
-   typename T105 = detail::NullType,   typename T106 = detail::NullType,
-   typename T107 = detail::NullType,   typename T108 = detail::NullType,
-   typename T109 = detail::NullType,   typename T110 = detail::NullType,
-   typename T111 = detail::NullType,   typename T112 = detail::NullType,
-   typename T113 = detail::NullType,   typename T114 = detail::NullType,
-   typename T115 = detail::NullType,   typename T116 = detail::NullType,
-   typename T117 = detail::NullType,   typename T118 = detail::NullType,
-   typename T119 = detail::NullType,   typename T120 = detail::NullType,
-   typename T121 = detail::NullType,   typename T122 = detail::NullType,
-   typename T123 = detail::NullType,   typename T124 = detail::NullType,
-   typename T125 = detail::NullType,   typename T126 = detail::NullType,
-   typename T127 = detail::NullType>
-struct make_kernel :
-    public detail::functionImplementation_<
-               T0,   T1,   T2,   T3,
-               T4,   T5,   T6,   T7,
-               T8,   T9,   T10,   T11,
-               T12,   T13,   T14,   T15,
-               T16,   T17,   T18,   T19,
-               T20,   T21,   T22,   T23,
-               T24,   T25,   T26,   T27,
-               T28,   T29,   T30,   T31,
-               T32,   T33,   T34,   T35,
-               T36,   T37,   T38,   T39,
-               T40,   T41,   T42,   T43,
-               T44,   T45,   T46,   T47,
-               T48,   T49,   T50,   T51,
-               T52,   T53,   T54,   T55,
-               T56,   T57,   T58,   T59,
-               T60,   T61,   T62,   T63,
-               T64,   T65,   T66,   T67,
-               T68,   T69,   T70,   T71,
-               T72,   T73,   T74,   T75,
-               T76,   T77,   T78,   T79,
-               T80,   T81,   T82,   T83,
-               T84,   T85,   T86,   T87,
-               T88,   T89,   T90,   T91,
-               T92,   T93,   T94,   T95,
-               T96,   T97,   T98,   T99,
-               T100,   T101,   T102,   T103,
-               T104,   T105,   T106,   T107,
-               T108,   T109,   T110,   T111,
-               T112,   T113,   T114,   T115,
-               T116,   T117,   T118,   T119,
-               T120,   T121,   T122,   T123,
-               T124,   T125,   T126,   T127>
-{
-public:
-	typedef detail::KernelFunctorGlobal<             
-		       T0,   T1,   T2,   T3,
-               T4,   T5,   T6,   T7,
-               T8,   T9,   T10,   T11,
-               T12,   T13,   T14,   T15,
-               T16,   T17,   T18,   T19,
-               T20,   T21,   T22,   T23,
-               T24,   T25,   T26,   T27,
-               T28,   T29,   T30,   T31,
-               T32,   T33,   T34,   T35,
-               T36,   T37,   T38,   T39,
-               T40,   T41,   T42,   T43,
-               T44,   T45,   T46,   T47,
-               T48,   T49,   T50,   T51,
-               T52,   T53,   T54,   T55,
-               T56,   T57,   T58,   T59,
-               T60,   T61,   T62,   T63,
-               T64,   T65,   T66,   T67,
-               T68,   T69,   T70,   T71,
-               T72,   T73,   T74,   T75,
-               T76,   T77,   T78,   T79,
-               T80,   T81,   T82,   T83,
-               T84,   T85,   T86,   T87,
-               T88,   T89,   T90,   T91,
-               T92,   T93,   T94,   T95,
-               T96,   T97,   T98,   T99,
-               T100,   T101,   T102,   T103,
-               T104,   T105,   T106,   T107,
-               T108,   T109,   T110,   T111,
-               T112,   T113,   T114,   T115,
-               T116,   T117,   T118,   T119,
-               T120,   T121,   T122,   T123,
-               T124,   T125,   T126,   T127> FunctorType;
-
-    make_kernel(
-        const Program& program,
-        const STRING_CLASS name,
-        cl_int * err = NULL) :
-           detail::functionImplementation_<
-                    T0,   T1,   T2,   T3,
-                       T4,   T5,   T6,   T7,
-                       T8,   T9,   T10,   T11,
-                       T12,   T13,   T14,   T15,
-                       T16,   T17,   T18,   T19,
-                       T20,   T21,   T22,   T23,
-                       T24,   T25,   T26,   T27,
-                       T28,   T29,   T30,   T31,
-                       T32,   T33,   T34,   T35,
-                       T36,   T37,   T38,   T39,
-                       T40,   T41,   T42,   T43,
-                       T44,   T45,   T46,   T47,
-                       T48,   T49,   T50,   T51,
-                       T52,   T53,   T54,   T55,
-                       T56,   T57,   T58,   T59,
-                       T60,   T61,   T62,   T63,
-                       T64,   T65,   T66,   T67,
-                       T68,   T69,   T70,   T71,
-                       T72,   T73,   T74,   T75,
-                       T76,   T77,   T78,   T79,
-                       T80,   T81,   T82,   T83,
-                       T84,   T85,   T86,   T87,
-                       T88,   T89,   T90,   T91,
-                       T92,   T93,   T94,   T95,
-                       T96,   T97,   T98,   T99,
-                       T100,   T101,   T102,   T103,
-                       T104,   T105,   T106,   T107,
-                       T108,   T109,   T110,   T111,
-                       T112,   T113,   T114,   T115,
-                       T116,   T117,   T118,   T119,
-                       T120,   T121,   T122,   T123,
-                       T124,   T125,   T126,   T127>(
-            FunctorType(program, name, err)) 
-    {}
-
-    make_kernel(
-        const Kernel kernel,
-        cl_int * err = NULL) :
-           detail::functionImplementation_<
-                    T0,   T1,   T2,   T3,
-                       T4,   T5,   T6,   T7,
-                       T8,   T9,   T10,   T11,
-                       T12,   T13,   T14,   T15,
-                       T16,   T17,   T18,   T19,
-                       T20,   T21,   T22,   T23,
-                       T24,   T25,   T26,   T27,
-                       T28,   T29,   T30,   T31,
-                       T32,   T33,   T34,   T35,
-                       T36,   T37,   T38,   T39,
-                       T40,   T41,   T42,   T43,
-                       T44,   T45,   T46,   T47,
-                       T48,   T49,   T50,   T51,
-                       T52,   T53,   T54,   T55,
-                       T56,   T57,   T58,   T59,
-                       T60,   T61,   T62,   T63,
-                       T64,   T65,   T66,   T67,
-                       T68,   T69,   T70,   T71,
-                       T72,   T73,   T74,   T75,
-                       T76,   T77,   T78,   T79,
-                       T80,   T81,   T82,   T83,
-                       T84,   T85,   T86,   T87,
-                       T88,   T89,   T90,   T91,
-                       T92,   T93,   T94,   T95,
-                       T96,   T97,   T98,   T99,
-                       T100,   T101,   T102,   T103,
-                       T104,   T105,   T106,   T107,
-                       T108,   T109,   T110,   T111,
-                       T112,   T113,   T114,   T115,
-                       T116,   T117,   T118,   T119,
-                       T120,   T121,   T122,   T123,
-                       T124,   T125,   T126,   T127>(
-            FunctorType(kernel, err)) 
-    {}    
-};
-
-#endif
-
-//----------------------------------------------------------------------------------------------------------------------
-
-#undef __ERR_STR
-#if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
-#undef __GET_DEVICE_INFO_ERR
-#undef __GET_PLATFORM_INFO_ERR
-#undef __GET_DEVICE_IDS_ERR
-#undef __GET_CONTEXT_INFO_ERR
-#undef __GET_EVENT_INFO_ERR
-#undef __GET_EVENT_PROFILE_INFO_ERR
-#undef __GET_MEM_OBJECT_INFO_ERR
-#undef __GET_IMAGE_INFO_ERR
-#undef __GET_SAMPLER_INFO_ERR
-#undef __GET_KERNEL_INFO_ERR
-#undef __GET_KERNEL_WORK_GROUP_INFO_ERR
-#undef __GET_PROGRAM_INFO_ERR
-#undef __GET_PROGRAM_BUILD_INFO_ERR
-#undef __GET_COMMAND_QUEUE_INFO_ERR
-
-#undef __CREATE_CONTEXT_ERR
-#undef __CREATE_CONTEXT_FROM_TYPE_ERR
-#undef __GET_SUPPORTED_IMAGE_FORMATS_ERR
-
-#undef __CREATE_BUFFER_ERR
-#undef __CREATE_SUBBUFFER_ERR
-#undef __CREATE_IMAGE2D_ERR
-#undef __CREATE_IMAGE3D_ERR
-#undef __CREATE_SAMPLER_ERR
-#undef __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR
-
-#undef __CREATE_USER_EVENT_ERR
-#undef __SET_USER_EVENT_STATUS_ERR
-#undef __SET_EVENT_CALLBACK_ERR
-
-#undef __WAIT_FOR_EVENTS_ERR
-
-#undef __CREATE_KERNEL_ERR
-#undef __SET_KERNEL_ARGS_ERR
-#undef __CREATE_PROGRAM_WITH_SOURCE_ERR
-#undef __CREATE_PROGRAM_WITH_BINARY_ERR
-#undef __BUILD_PROGRAM_ERR
-#undef __CREATE_KERNELS_IN_PROGRAM_ERR
-
-#undef __CREATE_COMMAND_QUEUE_ERR
-#undef __SET_COMMAND_QUEUE_PROPERTY_ERR
-#undef __ENQUEUE_READ_BUFFER_ERR
-#undef __ENQUEUE_WRITE_BUFFER_ERR
-#undef __ENQUEUE_READ_BUFFER_RECT_ERR
-#undef __ENQUEUE_WRITE_BUFFER_RECT_ERR
-#undef __ENQEUE_COPY_BUFFER_ERR
-#undef __ENQEUE_COPY_BUFFER_RECT_ERR
-#undef __ENQUEUE_READ_IMAGE_ERR
-#undef __ENQUEUE_WRITE_IMAGE_ERR
-#undef __ENQUEUE_COPY_IMAGE_ERR
-#undef __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR
-#undef __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR
-#undef __ENQUEUE_MAP_BUFFER_ERR
-#undef __ENQUEUE_MAP_IMAGE_ERR
-#undef __ENQUEUE_UNMAP_MEM_OBJECT_ERR
-#undef __ENQUEUE_NDRANGE_KERNEL_ERR
-#undef __ENQUEUE_TASK_ERR
-#undef __ENQUEUE_NATIVE_KERNEL
-
-#undef __UNLOAD_COMPILER_ERR
-#endif //__CL_USER_OVERRIDE_ERROR_STRINGS
-
-#undef __GET_INFO_HELPER_WITH_RETAIN
-
-// Extensions
-#undef __INIT_CL_EXT_FCN_PTR
-#undef __CREATE_SUB_DEVICES
-
-#if defined(USE_CL_DEVICE_FISSION)
-#undef __PARAM_NAME_DEVICE_FISSION
-#endif // USE_CL_DEVICE_FISSION
-
-#undef __DEFAULT_NOT_INITIALIZED 
-#undef __DEFAULT_BEING_INITIALIZED 
-#undef __DEFAULT_INITIALIZED
-
-} // namespace cl
-
-#ifdef _WIN32
-#pragma pop_macro("max")
-#endif // _WIN32
-
-#endif // CL_HPP_
diff --git a/RTCP/Cobalt/GPUProc/src/cpu_utils.cc b/RTCP/Cobalt/GPUProc/src/cpu_utils.cc
deleted file mode 100644
index c9405fa3542a878177b2d6aaabf2265e3ba711f1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cpu_utils.cc
+++ /dev/null
@@ -1,81 +0,0 @@
-//# cpu_utils.cc
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include <sched.h>
-#include <fstream>
-#include <boost/format.hpp>
-
-#include <Common/SystemCallException.h>
-#include <CoInterface/Parset.h>
-#include <CoInterface/Exceptions.h>
-#include <CoInterface/PrintVector.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    // Set the correct processer affinity
-    void setProcessorAffinity(unsigned cpuId)
-    {
-      // Get the number of cores (32)
-      unsigned numCores = sysconf(_SC_NPROCESSORS_ONLN);
-
-
-      // Determine the cores local to the specified cpuId
-      vector<unsigned> localCores;
-
-      for (unsigned core = 0; core < numCores; ++core) {
-        // The file below contains an integer indicating the physical CPU
-        // hosting this core.
-        std::ifstream fs(str(boost::format("/sys/devices/system/cpu/cpu%u/topology/physical_package_id") % core).c_str());
-
-        unsigned physical_cpu;
-        fs >> physical_cpu;
-
-        if (!fs.good())
-          continue;
-
-        // Add this core to the mask if it matches the requested CPU
-        if (physical_cpu == cpuId)
-          localCores.push_back(core);
-      }
-
-      if (localCores.empty())
-        THROW(GPUProcException, "Request to bind to non-existing CPU: " << cpuId);
-
-      LOG_DEBUG_STR("Binding to CPU " << cpuId << ": cores " << localCores);
-
-      // put localCores in a cpu_set
-      cpu_set_t mask;  
-
-      CPU_ZERO(&mask); 
-
-      for (vector<unsigned>::const_iterator i = localCores.begin(); i != localCores.end(); ++i)
-        CPU_SET(*i, &mask);
-
-      // now assign the mask and set the affinity
-      if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) != 0)
-        THROW_SYSCALL("sched_setaffinity");
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/CMakeLists.txt b/RTCP/Cobalt/GPUProc/src/cuda/CMakeLists.txt
deleted file mode 100644
index 17eac6967b666f8c6fa736f976a3def8a1ff3280..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# $Id$
-
-configure_file(
-  "${CMAKE_CURRENT_SOURCE_DIR}/cuda_config.h.in"
-  "${CMAKE_BINARY_DIR}/include/cuda_config.h"  # internal, no need to install
-)
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/KernelFactory.h b/RTCP/Cobalt/GPUProc/src/cuda/KernelFactory.h
deleted file mode 100644
index 9fc75474dd12c2915322dc8f775ed1e15a27a0f6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/KernelFactory.h
+++ /dev/null
@@ -1,140 +0,0 @@
-//# KernelFactory.h
-//#
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_KERNELFACTORY_H
-#define LOFAR_GPUPROC_CUDA_KERNELFACTORY_H
-
-#include <string>
-#include <CoInterface/Parset.h>
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/gpu_wrapper.h>
-#include <GPUProc/gpu_utils.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    // Abstract base class of the templated KernelFactory class.
-    class KernelFactoryBase
-    {
-    public:
-      // Pure virtual destructor, because this is an abstract base class.
-      virtual ~KernelFactoryBase() = 0;
-
-    protected:
-      // Return compile definitions to use when creating PTX code for any
-      // Kernel.
-      CompileDefinitions
-      compileDefinitions(const Kernel::Parameters& param) const;
-
-      // Return compile flags to use when creating PTX code for any Kernel.
-      CompileFlags
-      compileFlags(const Kernel::Parameters& param) const;
-    };
-
-    // Declaration of a generic factory class. For each concrete Kernel class
-    // (e.g. FIR_FilterKernel), a specialization must exist of the constructor
-    // and of the bufferSize() method.
-    template<typename T> class KernelFactory : public KernelFactoryBase
-    {
-    public:
-      // typedef typename T::Parameters Parameters;
-      typedef typename T::BufferType BufferType;
-      typedef typename T::Buffers Buffers;
-
-      // Construct a factory for creating Kernel objects of type \c T, using the
-      // settings provided by \a params.
-      KernelFactory(const typename T::Parameters &params) :
-        itsParameters(params),
-        itsPTX(_createPTX())
-      {
-      }
-
-      // Create a new Kernel object of type \c T.
-      T* create(const gpu::Stream& stream,
-                gpu::DeviceMemory &inputBuffer,
-                gpu::DeviceMemory &outputBuffer) const
-      {
-        const typename T::Buffers buffers(inputBuffer, outputBuffer);
-
-        return create(stream, buffers);
-      }
-
-      // Return required buffer size for \a bufferType
-      size_t bufferSize(BufferType bufferType) const
-      {
-        return itsParameters.bufferSize(bufferType);
-      }
-
-    private:
-      // Used by the constructors to construct the PTX from the other
-      // members.
-      std::string _createPTX() const {
-        return createPTX(T::theirSourceFile,
-                           compileDefinitions(),
-                           compileFlags());
-      }
-
-      // Create a new Kernel object of type \c T.
-      T* create(const gpu::Stream& stream,
-                const typename T::Buffers& buffers) const
-      {
-        // Since we use overlapping input/output buffers, their size
-        // could be larger than we need.
-        ASSERTSTR(buffers.input.size() >= bufferSize(T::INPUT_DATA),
-          "Require " << bufferSize(T::INPUT_DATA) << " bytes for input, "
-          "but buffer is only " << buffers.input.size() << " bytes.");
-        ASSERTSTR(buffers.output.size() >= bufferSize(T::OUTPUT_DATA),
-          "Require " << bufferSize(T::OUTPUT_DATA) << " bytes for output, "
-          "but buffer is only " << buffers.output.size() << " bytes.");
-
-        return new T(
-          stream, createModule(stream.getContext(), 
-                               T::theirSourceFile,
-                               itsPTX), 
-          buffers, itsParameters);
-      }
-
-      // Return compile definitions to use when creating PTX code for kernels of
-      // type \c T, using the parameters stored in \c itsParameters.
-      CompileDefinitions compileDefinitions() const {
-        return KernelFactoryBase::compileDefinitions(itsParameters);
-      }
-
-      // Return compile flags to use when creating PTX code for kernels of type
-      // \c T.
-      CompileFlags compileFlags() const {
-        return KernelFactoryBase::compileFlags(itsParameters);
-      }
-
-      // Additional parameters needed to create a Kernel object of type \c T.
-      typename T::Parameters itsParameters;
-
-      // PTX code, generated for kernels of type \c T, using information in the
-      // Parset that was passed to the constructor.
-      std::string itsPTX;
-    };
-
-  } // namespace Cobalt
-
-} // namespace LOFAR
-
-#endif
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BandPassCorrectionKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BandPassCorrectionKernel.h
deleted file mode 100644
index 607a3f1cd90d9a73e70ecb380f37f4d191de485e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BandPassCorrectionKernel.h
+++ /dev/null
@@ -1,82 +0,0 @@
-//# BandPassCorrectionKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_BAND_PASS_CORRECTION_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_BAND_PASS_CORRECTION_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class BandPassCorrectionKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA,
-        BAND_PASS_CORRECTION_WEIGHTS
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // BandPassCorrectionKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps);
-        unsigned nrStations;
-
-        unsigned nrDelayCompensationChannels;
-        unsigned nrHighResolutionChannels;
-        unsigned nrSamplesPerChannel;
-
-        bool correctBandPass;
-
-        size_t bufferSize(BandPassCorrectionKernel::BufferType bufferType) const;
-      };
-
-      BandPassCorrectionKernel(const gpu::Stream &stream,
-                               const gpu::Module &module,
-                               const Buffers &buffers,
-                               const Parameters &param);
-
-    private:
-      // The bandpass weights to apply on each channel
-      gpu::DeviceMemory bandPassCorrectionWeights;
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<BandPassCorrectionKernel>::compileDefinitions() const;
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerKernel.h
deleted file mode 100644
index 6ba5995049b8697b87c8fe4835e3c29f57cfb882..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerKernel.h
+++ /dev/null
@@ -1,98 +0,0 @@
-//# BeamFormerKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_BEAM_FORMER_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-#include <string>
-#include <vector>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class BeamFormerKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA,
-        DELAY_INDICES,
-        BEAM_FORMER_DELAYS
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // BeamFormerKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps);
-
-        // The beam-former delays are indexed by their station number
-        // in the observation, so we need to map them to beam-former
-        // station numbers.
-        std::vector<unsigned> delayIndices;
-
-        // Width of th observation's delay array, in stations
-        unsigned nrDelays;
-
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-
-        unsigned nrSAPs;
-        unsigned nrTABs;
-        double subbandBandwidth;
-        bool doFlysEye;
-
-        size_t bufferSize(BufferType bufferType) const;
-
-        size_t nrStations() const { return delayIndices.size(); }
-      };
-
-      BeamFormerKernel(const gpu::Stream &stream,
-                             const gpu::Module &module,
-                             const Buffers &buffers,
-                             const Parameters &param);
-
-      void enqueue(const BlockID &blockId, 
-                   double subbandFrequency, unsigned SAP);
-
-      gpu::DeviceMemory delayIndices;
-      gpu::DeviceMemory beamFormerDelays;
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<BeamFormerKernel>::compileDefinitions() const;
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerTransposeKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerTransposeKernel.h
deleted file mode 100644
index dc65338ba69a0b3209b56a95d0068bfd6b79bdf7..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/BeamFormerTransposeKernel.h
+++ /dev/null
@@ -1,75 +0,0 @@
-//# BeamFormerTransposeKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_BEAM_FORMER_TRANSPOSE_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class BeamFormerTransposeKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // BeamFormerKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps);
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-
-        unsigned nrTABs;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      BeamFormerTransposeKernel(const gpu::Stream &stream,
-                             const gpu::Module &module,
-                             const Buffers &buffers,
-                             const Parameters &param);
-
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<BeamFormerTransposeKernel>::compileDefinitions() const;
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesKernel.h
deleted file mode 100644
index 6b12782d2ed8172f1953f6be7420a3093bf5b38c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesKernel.h
+++ /dev/null
@@ -1,92 +0,0 @@
-//# CoherentStokesKernel.h
-//# Copyright (C) 2012-2014  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_COHERENT_STOKES_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_COHERENT_STOKES_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class CoherentStokesKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // CoherentStokesKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps);
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-
-        unsigned nrTABs;
-        unsigned nrStokes;
-        bool     outputComplexVoltages;
-        unsigned timeIntegrationFactor;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      CoherentStokesKernel(const gpu::Stream &stream,
-                           const gpu::Module &module,
-                           const Buffers &buffers,
-                           const Parameters &param);
-
-      struct CoherentStokesExecConfig : gpu::ExecConfig
-      {
-        unsigned nrTimeParallelThreads;
-        friend std::ostream& operator<<(std::ostream& os,
-            const CoherentStokesKernel::CoherentStokesExecConfig& execConfig);
-      };
-
-    private:
-      // The timeParallelFactor is not a Parameter passed in, but is a kernel
-      // arg, so it must be a member var to outlive kernel launches.
-      unsigned itsTimeParallelFactor;
-
-
-      unsigned smallestFactorOf(unsigned n) const;
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<CoherentStokesKernel>::compileDefinitions() const;
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesTransposeKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesTransposeKernel.h
deleted file mode 100644
index 78c6905bfdd5919e9daf57392a09cd76f0f5dc9c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CoherentStokesTransposeKernel.h
+++ /dev/null
@@ -1,75 +0,0 @@
-//# CoherentStokesTransposeKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_COHERENT_STOKES_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_COHERENT_STOKES_TRANSPOSE_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class CoherentStokesTransposeKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // BeamFormerKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps);
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-
-        unsigned nrTABs;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      CoherentStokesTransposeKernel(const gpu::Stream &stream,
-                             const gpu::Module &module,
-                             const Buffers &buffers,
-                             const Parameters &param);
-
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<CoherentStokesTransposeKernel>::compileDefinitions() const;
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CorrelatorKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CorrelatorKernel.h
deleted file mode 100644
index c4343b9d9b9556ac5e20ba657f5b55e3dcc5b61c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/CorrelatorKernel.h
+++ /dev/null
@@ -1,73 +0,0 @@
-//# CorrelatorKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_CORRELATOR_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_CORRELATOR_KERNEL_H
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class CorrelatorKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps);
-        unsigned nrStations;
-        unsigned nrStationsPerThread;
-        unsigned nrBaselines() const;
-
-        unsigned nrChannels;
-        unsigned nrSamplesPerIntegration;
-        unsigned nrIntegrationsPerBlock;
-        size_t nrSamplesPerBlock() const;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      CorrelatorKernel(const gpu::Stream &stream,
-                       const gpu::Module &module,
-                       const Buffers &buffers,
-                       const Parameters &param);
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<CorrelatorKernel>::compileDefinitions() const;
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionBackwardFFTkernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionBackwardFFTkernel.h
deleted file mode 100644
index 111a5d9ba59902de1784e99555c06fad082687dc..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionBackwardFFTkernel.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//# DedispersionBackwardFFTkernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_DEDISPERSION_BACKWARD_FFTKERNEL_H
-#define LOFAR_GPUPROC_CUDA_DEDISPERSION_BACKWARD_FFTKERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "FFT_Kernel.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class DedispersionBackwardFFTkernel : public FFT_Kernel
-    {
-    public:
-      DedispersionBackwardFFTkernel(const Parset &ps, gpu::Context &context, gpu::DeviceMemory &buffer);
-
-    };
-  }
-
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionChirpKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionChirpKernel.h
deleted file mode 100644
index 90faf0c4b647e090c823122787faa832c97a3bf6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionChirpKernel.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//# DedispersionChirpKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_DEDISPERSION_CHIRP_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_DEDISPERSION_CHIRP_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/gpu_wrapper.h>
-//#include <GPUProc/PerformanceCounter.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class DedispersionChirpKernel : public CompiledKernel
-    {
-    public:
-      DedispersionChirpKernel(const Parset &ps,
-                              gpu::Context &context,
-                              gpu::DeviceMemory &buffer,
-                              gpu::DeviceMemory &DMs);
-
-      void enqueue(gpu::Stream &queue, double subbandFrequency);
-
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionForwardFFTkernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionForwardFFTkernel.h
deleted file mode 100644
index b50f8a76bc6634b4f2f055a4ea74a5cf6c637368..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DedispersionForwardFFTkernel.h
+++ /dev/null
@@ -1,42 +0,0 @@
-//# DedispersionForwardFFTkernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_DEDISPERSION_FORWARD_FFTKERNEL_H
-#define LOFAR_GPUPROC_CUDA_DEDISPERSION_FORWARD_FFTKERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "FFT_Kernel.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class DedispersionForwardFFTkernel : public FFT_Kernel
-    {
-    public:
-      DedispersionForwardFFTkernel(const Parset &ps, gpu::Context &context, gpu::DeviceMemory &buffer);
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DelayAndBandPassKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DelayAndBandPassKernel.h
deleted file mode 100644
index a2f051c6f0aef458ac27e3d96d3b58e9d50fb314..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/DelayAndBandPassKernel.h
+++ /dev/null
@@ -1,108 +0,0 @@
-//# DelayAndBandPassKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_DELAY_AND_BAND_PASS_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_DELAY_AND_BAND_PASS_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-//#include <GPUProc/PerformanceCounter.h>
-
-#include <vector>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class DelayAndBandPassKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA,
-        DELAY_INDICES,
-        DELAYS,
-        PHASE_ZEROS,
-        BAND_PASS_CORRECTION_WEIGHTS
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // DelayAndBandPassKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps, bool correlator);
-        unsigned nrStations;
-        std::vector<unsigned> delayIndices;
-        unsigned nrDelays;
-        unsigned nrBitsPerSample;
-
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-        double subbandBandwidth;
-
-        unsigned nrSAPs;
-
-        bool delayCompensation;
-        bool correctBandPass;
-        bool transpose;
-
-        unsigned nrSamplesPerSubband() const;
-        unsigned nrBytesPerComplexSample() const;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      DelayAndBandPassKernel(const gpu::Stream &stream,
-                             const gpu::Module &module,
-                             const Buffers &buffers,
-                             const Parameters &param);
-
-
-      void enqueue(const BlockID &blockId, 
-                   double subbandFrequency, unsigned SAP);
-
-      // Input parameters for the delay compensation
-      gpu::DeviceMemory delayIndices;
-      gpu::DeviceMemory delaysAtBegin;
-      gpu::DeviceMemory delaysAfterEnd;
-      gpu::DeviceMemory phase0s;
-
-    private:
-      // The weights to correct the bandpass with, per channel
-      gpu::DeviceMemory bandPassCorrectionWeights;
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<DelayAndBandPassKernel>::compileDefinitions() const;
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFTShiftKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFTShiftKernel.h
deleted file mode 100644
index edfa3c6d867cd9fbb6b8e839afaa33c49e312288..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFTShiftKernel.h
+++ /dev/null
@@ -1,80 +0,0 @@
-//# FFTShiftKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_FFT_SHIFT_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_FFT_SHIFT_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class FFTShiftKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // IntToFloatKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps, unsigned nrSTABs, unsigned nrChannels, const std::string &name = "FFT-shift");
-        unsigned nrSTABs;
-
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      // Construct a FFTShift kernel.
-      // \pre The number of samples per channel must be even.
-      // \pre The product of the number of stations, the number of
-      // polarizations, the number of channels per subband, and the number of
-      // samples per channel must be divisible by the maximum number of threads
-      // per block (typically 1024).
-      FFTShiftKernel(const gpu::Stream &stream,
-                     const gpu::Module &module,
-                     const Buffers &buffers,
-                     const Parameters &param);
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<FFTShiftKernel>::compileDefinitions() const;
-  }
-
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Kernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Kernel.h
deleted file mode 100644
index d6740958caed4d8a09e58e83549ffb6c989bf797..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FFT_Kernel.h
+++ /dev/null
@@ -1,82 +0,0 @@
-//# FFT_Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_FFT_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_FFT_KERNEL_H
-
-#include <GPUProc/gpu_wrapper.h>
-#include "FFT_Plan.h"
-#include <GPUProc/PerformanceCounter.h>
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class FFT_Kernel: public Kernel
-    {
-    public:
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // BandPassCorrectionKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(unsigned fftSize, unsigned nrSamples, bool forward, const std::string &name = "FFT");
-
-        unsigned fftSize;
-        unsigned nrSamples;
-        bool forward;
-
-        size_t bufferSize(FFT_Kernel::BufferType bufferType) const;
-      };
-
-      FFT_Kernel(const gpu::Stream &stream,
-                 const Buffers& buffers,
-                 const Parameters& params);
-
-    protected:
-      void launch() const;
-
-    private:
-      const unsigned nrFFTs, nrMajorFFTs, nrMinorFFTs;
-      const int direction;
-      FFT_Plan planMajor, planMinor;
-
-      void executePlan(const cufftHandle &plan, cufftComplex *in_data, cufftComplex *out_data) const;
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    // The default KernelFactory tries to compile a source,
-    // but FFT_Kernel has nothing to compile, so we implement short cuts.
-    template<> std::string KernelFactory<FFT_Kernel>::_createPTX() const;
-    template<> FFT_Kernel* KernelFactory<FFT_Kernel>::create(
-              const gpu::Stream& stream,
-              gpu::DeviceMemory &inputBuffer,
-              gpu::DeviceMemory &outputBuffer) const;
-  }
-}
-#endif
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FIR_FilterKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FIR_FilterKernel.h
deleted file mode 100644
index 8d7d8df7825fc2651038a6938f1d888568bbac4f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/FIR_FilterKernel.h
+++ /dev/null
@@ -1,130 +0,0 @@
-//# FIR_FilterKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_FIR_FILTER_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_FIR_FILTER_KERNEL_H
-
-#include <string>
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/FilterBank.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class FIR_FilterKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA,
-        FILTER_WEIGHTS,
-        HISTORY_DATA
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // FIR_FilterKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps, unsigned nrSTABs, bool inputIsStationData, unsigned nrSubbands, unsigned nrChannels, float scaleFactor, const std::string &name = "FIR");
-
-        // The number of stations or TABs to filter. The FIR filter will
-        // deal with either in the same way.
-        unsigned nrSTABs;
-
-        unsigned nrBitsPerSample;
-        unsigned nrBytesPerComplexSample() const;
-
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-        unsigned nrSamplesPerSubband() const;
-
-
-        // The number of subbands \e this kernel instance will process,
-        // typically equal to \c nrSubbandsPerSubbandProc.
-        unsigned nrSubbands;
-
-        // The number of PPF filter taps.
-        static const unsigned nrTaps = 16;
-
-        // The number of history samples used for each block
-        unsigned nrHistorySamples() const;
-
-        // Additional scale factor (e.g. for FFT normalization).
-        // Derived differently from nrChannelsPerSubband for correlation
-        // and beamforming, so must be passed into this class.
-        float scaleFactor;
-
-        // If true, we'll read integers in the order as they're coming from the
-        // stations: intXX[stab][sample][pol]
-        //
-        // If false, we'll read floats in the order produced by the beam-former
-        // pipeline: float[stab][pol][sample]
-        bool inputIsStationData;
-
-        size_t bufferSize(FIR_FilterKernel::BufferType bufferType) const;
-      };
-
-      FIR_FilterKernel(const gpu::Stream& stream,
-                       const gpu::Module& module,
-                       const Buffers& buffers,
-                       const Parameters& param);
-
-      void enqueue(const BlockID &blockId,
-                   unsigned subbandIdx);
-
-      // Put the historyFlags[subbandIdx] in front of the given inputFlags,
-      // and update historyFlags[subbandIdx] with the flags of the last samples
-      // in inputFlags.
-      void prefixHistoryFlags(MultiDimArray<SparseSet<unsigned>, 1> &inputFlags, unsigned subbandIdx);
-
-    private:
-      // The Kernel parameters as given to the constructor
-      const Parameters params;
-
-      // The FIR filter weights
-      gpu::DeviceMemory filterWeights;
-
-      // The history samples
-      gpu::DeviceMemory historySamples;
-
-      // The flags of the history samples.
-      //
-      // Dimensions: [nrSubbands][nrStations]
-      MultiDimArray<SparseSet<unsigned>, 2> historyFlags;
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<FIR_FilterKernel>::compileDefinitions() const;
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesKernel.h
deleted file mode 100644
index a50cf7ed173677ff65257cd5f1bffd432f5788ea..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesKernel.h
+++ /dev/null
@@ -1,79 +0,0 @@
-//# IncoherentStokesKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_INCOHERENT_STOKES_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_INCOHERENT_STOKES_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class IncoherentStokesKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // IncoherentStokesKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps);
-        unsigned nrStations;
-
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-
-        unsigned nrStokes;
-        unsigned timeIntegrationFactor;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      IncoherentStokesKernel(const gpu::Stream &stream,
-                             const gpu::Module &module,
-                             const Buffers &buffers,
-                             const Parameters &param);
-
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<IncoherentStokesKernel>::compileDefinitions() const;
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesTransposeKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesTransposeKernel.h
deleted file mode 100644
index b3e38f1d3f55c02872579b4d659d6adf46afbd06..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IncoherentStokesTransposeKernel.h
+++ /dev/null
@@ -1,84 +0,0 @@
-//# IncoherentStokesTransposeKernel.h
-//#
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_INCOHERENT_STOKES_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_INCOHERENT_STOKES_TRANSPOSE_KERNEL_H
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    //# Forward declarations
-    class Parset;
-
-    class IncoherentStokesTransposeKernel : public CompiledKernel
-    {
-    public:
-      // Name of the CUDA kernel source file.
-      static const std::string theirSourceFile;
-
-      // Name of the kernel function to invoke.
-      static const std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // IncoherentStokesTransposeKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps);
-
-        unsigned nrStations;
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-
-        // Size of the square shared memory tile to be used.
-        const unsigned tileSize;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      IncoherentStokesTransposeKernel(const gpu::Stream &stream,
-                             const gpu::Module &module,
-                             const Buffers &buffers,
-                             const Parameters &param);
-
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<IncoherentStokesTransposeKernel>::
-    compileDefinitions() const;
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IntToFloatKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IntToFloatKernel.h
deleted file mode 100644
index 434d6f31b097ee17b94aa685120b47f61e76e5a6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/IntToFloatKernel.h
+++ /dev/null
@@ -1,88 +0,0 @@
-//# IntToFloatKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_INT_TO_FLOAT_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_INT_TO_FLOAT_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-#include <string>
-#include <vector>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class IntToFloatKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA,
-        STATION_INDICES
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // IntToFloatKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps, bool fftShift, bool beamFormerStationSubset);
-        unsigned nrInputStations;
-        std::vector<unsigned> stationIndices; // input station nr for ewch output station
-
-        unsigned nrBitsPerSample;
-        unsigned nrBytesPerComplexSample() const;
-
-        unsigned nrSamplesPerSubband;
-
-        bool fftShift;
-        bool doStationSubset;
-
-        size_t bufferSize(BufferType bufferType) const;
-
-        unsigned nrOutputStations() const { return doStationSubset ? stationIndices.size() : nrInputStations; }
-      };
-
-      IntToFloatKernel(const gpu::Stream &stream,
-                             const gpu::Module &module,
-                             const Buffers &buffers,
-                             const Parameters &param);
-
-      gpu::DeviceMemory stationIndices;
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<IntToFloatKernel>::compileDefinitions() const;
-  }
-
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/Kernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/Kernel.h
deleted file mode 100644
index 448703b065371590b7055b3ba8ddcb01a0760aae..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/Kernel.h
+++ /dev/null
@@ -1,168 +0,0 @@
-//# Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_KERNEL_H
-
-#include <string>
-#include <iosfwd>
-#include <cuda.h>
-
-#include <GPUProc/gpu_wrapper.h>
-#include <GPUProc/gpu_utils.h>
-#include <GPUProc/PerformanceCounter.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    //# Forward declarations
-    struct BlockID;
-
-    /*
-     * A wrapper for a generic kernel that can be executed on a GPU, and transforms
-     * data from an input buffer to an output buffer.
-     */
-    class Kernel
-    {
-    public:
-      // Parameters that must be passed to the constructor of this Kernel class.
-      // TODO: more at constructor passed immediates can be turned into defines
-      // (blockDim/gridDim too if enforced fixed (consider conditional define)
-      // or drop opt)
-      struct Parameters
-      {
-        Parameters(const std::string &name);
-
-        std::string name;
-
-        bool dumpBuffers;
-        std::string dumpFilePattern;
-      };
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Buffers that must be passed to the constructor of this Kernel class.
-      struct Buffers
-      {
-        Buffers(const gpu::DeviceMemory& in, 
-                const gpu::DeviceMemory& out) :
-          input(in), output(out)
-        {}
-        gpu::DeviceMemory input;
-        gpu::DeviceMemory output;
-      };
-
-      void enqueue(const BlockID &blockId);
-
-      // Warning: user has to make sure the Kernel is not running!
-      RunningStatistics getStats() { return itsCounter.getStats(); }
-
-    protected:
-      // Construct a kernel.
-      Kernel(const gpu::Stream& stream,
-             const Buffers &buffers,
-             const Parameters &params);
-
-      // Explicit destructor, because the implicitly generated one is public.
-      virtual ~Kernel();
-
-      // Performance counter for work done by this kernel
-      PerformanceCounter itsCounter;
-
-      size_t nrOperations, nrBytesRead, nrBytesWritten;
-
-      // Launch the actual kernel
-      virtual void launch() const = 0;
-
-      // The GPU Stream associated with this kernel.
-      gpu::Stream itsStream;
-
-      // Keep a local (reference counted) copy of the buffers we're using
-      Buffers itsBuffers;
-
-      // The parameters as given to the constructor.
-      Parameters itsParameters;
-
-    private:
-      // Dump output buffer of a this kernel to disk. Use \a blockId to
-      // distinguish between the different blocks and subbands.
-      // \attention This method is for debugging purposes only, as it has a
-      // severe impact on performance.
-      void dumpBuffers(const BlockID &blockId) const;
-    };
-
-    /*
-     * A Kernel that is actually a CUDA JIT compiled function.
-     */
-    class CompiledKernel : public Kernel, public gpu::Function
-    {
-    protected:
-      // Construct a kernel.
-      CompiledKernel(
-             const gpu::Stream& stream,
-             const gpu::Function& function,
-             const Buffers &buffers,
-             const Parameters &params);
-
-      // Explicit destructor, because the implicitly generated one is public.
-      virtual ~CompiledKernel();
-
-      void launch() const;
-
-      // Set the passed execution configuration if supported on the hardware
-      // in the stream for this kernel.
-      // If not supported and NULL was passed in errorStrings, an exc is thrown.
-      // If not supported and errorsStrings is valid, an error string is written
-      // to the errorStrings pointer.
-      void setEnqueueWorkSizes(gpu::Grid globalWorkSize,
-                               gpu::Block localWorkSize,
-                               std::string* errorStrings = NULL);
-
-      // Requires call to setEnqueueWorkSizes() first to get meaningful result.
-      // Idem for cache and shared memory configuration in the context.
-      unsigned getNrBlocksPerMultiProc(unsigned dynSharedMemBytes = 0) const;
-
-      // "The multiprocessor occupancy is the ratio of active warps to the
-      // maximum number of warps supported on a multiprocessor of the GPU."
-      // This (tries to) mimic what NVIDIA's CUDA_Occupancy_Calculator.xls does.
-      //
-      // Requires call to setEnqueueWorkSizes() first to get meaningful result.
-      // Idem for cache and shared memory configuration in the context.
-      // Note: Higher occupancy does not necessarily mean higher performance.
-      double predictMultiProcOccupancy(unsigned dynSharedMemBytes = 0) const;
-
-      const unsigned maxThreadsPerBlock;
-    private:
-      // The grid of blocks dimensions for kernel execution.
-      gpu::Grid itsGridDims;
-
-      // The block of threads dimensions for kernel execution.
-      gpu::Block itsBlockDims;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_BeamFormerKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_BeamFormerKernel.h
deleted file mode 100644
index 963438710f62eb79b67d73f690e5a273573c3efa..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_BeamFormerKernel.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//# UHEP_BeamFormerKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_UHEP_BEAM_FORMER_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_UHEP_BEAM_FORMER_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_BeamFormerKernel : public CompiledKernel
-    {
-    public:
-      UHEP_BeamFormerKernel(const Parset &ps, gpu::Module &program,
-                            gpu::DeviceMemory &devComplexVoltages, gpu::DeviceMemory &devInputSamples, gpu::DeviceMemory &devBeamFormerWeights);
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFFT_Kernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFFT_Kernel.h
deleted file mode 100644
index cec271c20d121f1ffa6eea2128282f6ddb0fffa3..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFFT_Kernel.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//# UHEP_InvFFT_Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_UHEP_INV_FFT_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_UHEP_INV_FFT_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_InvFFT_Kernel : public CompiledKernel
-    {
-    public:
-      UHEP_InvFFT_Kernel(const Parset &ps, gpu::Module &program, gpu::DeviceMemory &devFFTedData);
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFIR_Kernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFIR_Kernel.h
deleted file mode 100644
index 92ebfee3ec42bb66b20c8c8beadbc66066faa156..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_InvFIR_Kernel.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//# UHEP_InvFIR_Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_UHEP_INV_FIR_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_UHEP_INV_FIR_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_InvFIR_Kernel : public CompiledKernel
-    {
-    public:
-      UHEP_InvFIR_Kernel(const Parset &ps, gpu::Stream &queue,
-                         gpu::Module &program, gpu::DeviceMemory &devInvFIRfilteredData,
-                         gpu::DeviceMemory &devFFTedData, gpu::DeviceMemory &devInvFIRfilterWeights);
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TransposeKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TransposeKernel.h
deleted file mode 100644
index 9a2f222c09bddc0fec0b2bb73bfa9d6c3f08887d..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TransposeKernel.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//# UHEP_TransposeKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_UHEP_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_UHEP_TRANSPOSE_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_TransposeKernel : public CompiledKernel
-    {
-    public:
-      UHEP_TransposeKernel(const Parset &ps, gpu::Module &program,
-                           gpu::DeviceMemory &devFFTedData, gpu::DeviceMemory &devComplexVoltages, gpu::DeviceMemory &devReverseSubbandMapping);
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TriggerKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TriggerKernel.h
deleted file mode 100644
index 4f97f5fccc8a96ad72c29c5d38008832fc45b260..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/UHEP_TriggerKernel.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//# UHEP_TriggerKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_UHEP_TRIGGER_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_UHEP_TRIGGER_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-
-    struct TriggerInfo {
-      float mean, variance, bestValue;
-      unsigned bestApproxIndex;
-    };
-
-    class UHEP_TriggerKernel : public CompiledKernel
-    {
-    public:
-      UHEP_TriggerKernel(const Parset &ps, gpu::Module &program,
-                         gpu::DeviceMemory &devTriggerInfo, gpu::DeviceMemory &devInvFIRfilteredData);
-
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/ZeroingKernel.h b/RTCP/Cobalt/GPUProc/src/cuda/Kernels/ZeroingKernel.h
deleted file mode 100644
index edf360f86f1e4d1cd0d6f83eba65a15b4d770bb4..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Kernels/ZeroingKernel.h
+++ /dev/null
@@ -1,98 +0,0 @@
-//# ZeroingKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_ZEROING_KERNEL_H
-#define LOFAR_GPUPROC_CUDA_ZEROING_KERNEL_H
-
-#include <Common/Timer.h>
-
-#include <CoInterface/Parset.h>
-#include <CoInterface/MultiDimArray.h>
-#include <CoInterface/SparseSet.h>
-
-#include <GPUProc/Kernels/Kernel.h>
-#include <GPUProc/KernelFactory.h>
-#include <GPUProc/gpu_wrapper.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class ZeroingKernel : public CompiledKernel
-    {
-    public:
-      static std::string theirSourceFile;
-      static std::string theirFunction;
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA,
-        MASK
-      };
-
-      // Parameters that must be passed to the constructor of the
-      // IntToFloatKernel class.
-      struct Parameters : Kernel::Parameters
-      {
-        Parameters(const Parset& ps, unsigned nrSTABs, unsigned nrChannels, const std::string &name = "Zeroing");
-        unsigned nrSTABs;
-
-        unsigned nrChannels;
-        unsigned nrSamplesPerChannel;
-
-        size_t bufferSize(BufferType bufferType) const;
-      };
-
-      // Construct a Zeroing kernel.
-      // \pre The number of samples per channel must be even.
-      // \pre The product of the number of stations, the number of
-      // polarizations, the number of channels per subband, and the number of
-      // samples per channel must be divisible by the maximum number of threads
-      // per block (typically 1024).
-      ZeroingKernel(const gpu::Stream &stream,
-                     const gpu::Module &module,
-                     const Buffers &buffers,
-                     const Parameters &param);
-
-      // Run the kernel. "channelFlags" is the set of flags, one for each station/tab
-      void enqueue(const BlockID &blockId, const MultiDimArray<SparseSet<unsigned>, 1> &channelFlags);
-
-    private:
-      const unsigned nrSTABs;
-      const unsigned nrSamplesPerChannel;
-
-      // The flag mask per sample (1=flagged, 0=ok)
-      gpu::DeviceMemory gpuMask;
-      gpu::HostMemory hostMask;
-
-      NSTimer computeMaskTimer;
-    };
-
-    //# --------  Template specializations for KernelFactory  -------- #//
-
-    template<> CompileDefinitions
-    KernelFactory<ZeroingKernel>::compileDefinitions() const;
-  }
-
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/MultiDimArrayHostBuffer.h b/RTCP/Cobalt/GPUProc/src/cuda/MultiDimArrayHostBuffer.h
deleted file mode 100644
index dafb5ba201afc0e340ebb2199ce423499bd4dd3e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/MultiDimArrayHostBuffer.h
+++ /dev/null
@@ -1,62 +0,0 @@
-//# MultiDimArrayHostBuffer.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_MULTI_DIM_ARRAY_HOST_BUFFER_H
-#define LOFAR_GPUPROC_CUDA_MULTI_DIM_ARRAY_HOST_BUFFER_H
-
-#include <CoInterface/MultiDimArray.h>
-
-#include "gpu_wrapper.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    // A MultiDimArray allocated as a HostBuffer
-    // Note: Elements are not constructed/destructed.
-    template <typename T, unsigned DIM>
-    class MultiDimArrayHostBuffer : public gpu::HostMemory,
-                                    public MultiDimArray<T, DIM>
-    {
-    public:
-      template <typename ExtentList>
-      MultiDimArrayHostBuffer(const ExtentList &extents, const gpu::Context &context,
-                              unsigned int flags = 0)
-      :
-        HostMemory(context, MultiDimArray<T, DIM>::nrElements(extents) * sizeof(T), flags),
-        MultiDimArray<T, DIM>(extents, gpu::HostMemory::get<T>(), false)
-      {
-      }
-
-      using HostMemory::size;
-
-    private:
-      MultiDimArrayHostBuffer(); // don't use
-      MultiDimArrayHostBuffer(const MultiDimArrayHostBuffer<T, DIM> &rhs); // don't use
-      MultiDimArrayHostBuffer<T, DIM> &operator=(const MultiDimArrayHostBuffer<T, DIM> &rhs); // don't use
-      using MultiDimArray<T, DIM>::resize; // don't use
-    };
-
-  } // namespace Cobalt
-} // namespace LOFAR
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/PerformanceCounter.h b/RTCP/Cobalt/GPUProc/src/cuda/PerformanceCounter.h
deleted file mode 100644
index 5748b5f4d199dadcc121f4a363d99823ae6fcd42..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/PerformanceCounter.h
+++ /dev/null
@@ -1,65 +0,0 @@
-//# PerformanceCounter.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_PERFORMANCECOUNTER_H
-#define LOFAR_GPUPROC_CUDA_PERFORMANCECOUNTER_H
-
-
-#include <GPUProc/gpu_wrapper.h>
-#include <CoInterface/RunningStatistics.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class PerformanceCounter
-    {
-    public:
-      PerformanceCounter(const gpu::Context &context, const std::string &name);
-      ~PerformanceCounter();
-
-      void recordStart(const gpu::Stream &stream);
-      void recordStop(const gpu::Stream &stream);
-
-      // Warning: user must make sure that the counter is not running!
-      RunningStatistics getStats() { logTime(); return stats; }
-
-    private:
-      const std::string name;
-
-      // Public event: it needs to be inserted into a stream.
-      // @{
-      gpu::Event start;
-      gpu::Event stop;
-      // @}
-
-      // Whether we have posted events that still need to be
-      // processed in logTime()
-      bool recording;
-
-      RunningStatistics stats;
-
-      void logTime();
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/Pipeline.h b/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/Pipeline.h
deleted file mode 100644
index b09516353d02eed582d95e36bb683953b9fe1ba1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/Pipeline.h
+++ /dev/null
@@ -1,147 +0,0 @@
-//# Pipeline.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_PIPELINE_H
-#define LOFAR_GPUPROC_CUDA_PIPELINE_H
-
-#include <string>
-#include <vector>
-
-#include <Common/LofarTypes.h>
-#include <MACIO/RTmetadata.h>
-#include <CoInterface/Parset.h>
-#include <CoInterface/SmartPtr.h>
-#include <CoInterface/Pool.h>
-#include <CoInterface/OMPThread.h>
-#include <CoInterface/TABTranspose.h>
-
-#include <GPUProc/gpu_wrapper.h>
-#include <GPUProc/PerformanceCounter.h>
-#include <GPUProc/SubbandProcs/SubbandProc.h>
-#include <GPUProc/SubbandProcs/KernelFactories.h>
-
-#include <GPUProc/MPIReceiver.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    using MACIO::RTmetadata;
-
-    class Pipeline
-    {
-    public:
-      Pipeline(const Parset &, const std::vector<size_t> &subbandIndices, 
-        const std::vector<gpu::Device> &devices,
-        Pool<struct MPIRecvData> &pool,
-        RTmetadata &mdLogger, const std::string &mdKeyPrefix,
-        unsigned hostID = 0);
-
-      ~Pipeline();
-
-      // allocate resources, such as GPU buffers.
-      //
-      // Pipeline deploys delayed construction, because the resources may still
-      // be occupied by a previous observation at the time of construction.
-      //
-      // An alternative to delayed allocation could be to retry the GPU malloc
-      // with a timeout, but that could potentially dead-lock two concurrent
-      // observations.
-      void allocateResources();
-
-      // for each subband get data from input stream, sync, start the kernels to process all data, write output in parallel
-      void processObservation();
-
-      struct Output 
-      {
-        // output data queue
-        SmartPtr< Queue< SmartPtr<SubbandProcOutputData> > > queue;
-      };
-
-      std::vector< SmartPtr<SubbandProc> > subbandProcs;
-
-    protected:
-      const Parset             &ps;
-      const std::vector<gpu::Device> devices;
-
-      const std::vector<size_t> subbandIndices; // [localSubbandIdx]
-
-      // Whether we're the pipeline that processes the first subband.
-      // If true, we log our progress at INFO. Otherwise, at DEBUG.
-      const bool processingSubband0;
-
-      const size_t nrSubbandsPerSubbandProc;
-
-      RTmetadata &itsMdLogger; // non-const to be able to use its log()
-      const std::string itsMdKeyPrefix;
-
-      // Threads that write to outputProc, and need to
-      // be killed when they stall at observation end.
-      OMPThreadSet outputThreads;
-
-      Pool<struct MPIRecvData> &mpiPool;
-
-      std::vector<struct Output> writePool; // [localSubbandIdx]
-
-      KernelFactories factories;
-
-      // For each block, transpose all subbands from all stations, and divide the
-      // work over the subbandProcs
-      void transposeInput();
-      template<typename SampleT> void transposeInput();
-
-      // preprocess subbands on the CPU
-      void preprocessSubbands(SubbandProc &subbandProc);
-
-      // process subbands on the GPU
-      void processSubbands(SubbandProc &subbandProc);
-
-      // Post-process subbands on the CPU
-      void postprocessSubbands(SubbandProc &subbandProc);
-
-      void writeBeamformedOutput(
-        unsigned globalSubbandIdx,
-        Queue< SmartPtr<SubbandProcOutputData> > &inputQueue,
-        Queue< SmartPtr<SubbandProcOutputData> > &outputQueue,
-        Queue< SmartPtr<SubbandProcOutputData> > &spillQueue );
-
-      void writeCorrelatedOutput(
-        unsigned globalSubbandIdx,
-        Queue< SmartPtr<SubbandProcOutputData> > &inputQueue,
-        Queue< SmartPtr<SubbandProcOutputData> > &outputQueue );
-
-    public:
-      // Send subbands to Storage
-      void writeOutput(
-        unsigned globalSubbandIdx,
-        Queue< SmartPtr<SubbandProcOutputData> > &inputQueue,
-        Queue< SmartPtr<SubbandProcOutputData> > &outputQueue );
-
-      // Output send engine, takes care of the host connections and the multiplexing.
-      TABTranspose::MultiSender multiSender;
-
-      // MPI rank for this node
-      const unsigned hostID;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/UHEP_Pipeline.h b/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/UHEP_Pipeline.h
deleted file mode 100644
index 617d168b42be3e1324d90a882967b7e382608684..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/Pipelines/UHEP_Pipeline.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//# UHEP_Pipeline.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_UHEP_PIPELINE_H
-#define LOFAR_GPUPROC_CUDA_UHEP_PIPELINE_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/gpu_wrapper.h>
-#include "Pipeline.h"
-#include <GPUProc/PerformanceCounter.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class UHEP_Pipeline : public Pipeline
-    {
-    public:
-      UHEP_Pipeline(const Parset &, Pool<struct MPIRecvData> &pool);
-
-      void doWork();
-
-      gpu::Module beamFormerProgram, transposeProgram, invFFTprogram, invFIRfilterProgram, triggerProgram;
-
-      PerformanceCounter beamFormerCounter, transposeCounter, invFFTcounter, invFIRfilterCounter, triggerCounter;
-      PerformanceCounter beamFormerWeightsCounter, samplesCounter;
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/KernelFactories.h b/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/KernelFactories.h
deleted file mode 100644
index c58eaaf914f60d33d3d8b718175b779d5581cc70..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/KernelFactories.h
+++ /dev/null
@@ -1,53 +0,0 @@
-//# KernelFactories.h
-//#
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_BEAM_FORMER_FACTORIES_H
-#define LOFAR_GPUPROC_CUDA_BEAM_FORMER_FACTORIES_H
-
-#include <CoInterface/Parset.h>
-#include <CoInterface/SmartPtr.h>
-
-#include "CorrelatorStep.h"
-#include "BeamFormerPreprocessingStep.h"
-#include "BeamFormerCoherentStep.h"
-#include "BeamFormerIncoherentStep.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct KernelFactories
-    {
-      KernelFactories(const Parset &ps, 
-                            size_t nrSubbandsPerSubbandProc = 1);
-
-      SmartPtr<CorrelatorStep::Factories> correlator;
-
-      SmartPtr<BeamFormerPreprocessingStep::Factories> preprocessing;
-
-      SmartPtr<BeamFormerCoherentStep::Factories> coherentStokes;
-      SmartPtr<BeamFormerIncoherentStep::Factories> incoherentStokes;
-    };
-
-  }
-}
-
-#endif
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProc.h b/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProc.h
deleted file mode 100644
index 608606c2c1d15661473441b58641fabfd50fba0f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/SubbandProc.h
+++ /dev/null
@@ -1,159 +0,0 @@
-//# SubbandProc.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_SUBBAND_PROC_H
-#define LOFAR_GPUPROC_CUDA_SUBBAND_PROC_H
-
-#include <string>
-#include <map>
-#include <complex>
-#include <memory>
-
-#include <boost/shared_ptr.hpp>
-#include <Common/LofarLogger.h>
-#include <CoInterface/BudgetTimer.h>
-#include <CoInterface/CorrelatedData.h>
-#include <CoInterface/Parset.h>
-#include <CoInterface/Pool.h>
-#include <CoInterface/SmartPtr.h>
-#include <CoInterface/BlockID.h>
-#include <CoInterface/Config.h>
-#include <CoInterface/SubbandMetaData.h>
-#include <GPUProc/PerformanceCounter.h>
-#include <GPUProc/gpu_wrapper.h>
-#include <GPUProc/MultiDimArrayHostBuffer.h>
-
-#include "SubbandProcInputData.h"
-#include "SubbandProcOutputData.h"
-#include "CorrelatorStep.h"
-#include "BeamFormerPreprocessingStep.h"
-#include "BeamFormerCoherentStep.h"
-#include "BeamFormerIncoherentStep.h"
-
-// \file
-// TODO: Update documentation
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    //# Forward declarations
-    struct KernelFactories;
-
-    /*
-     * The SubbandProc does the following transformation:
-     *   SubbandProcInputData -> SubbandProcOutputData
-     *
-     * The SubbandProcInputData represents one block of one subband
-     * of input data, and the SubbandProcOutputData (for example) the complex
-     * visibilities of such a block.
-     *
-     * For both input and output, a fixed set of objects is created,
-     * tied to the GPU specific for the SubbandProc, for increased
-     * performance. The objects are recycled by using Pool objects.
-     *
-     * The data flows as follows:
-     *
-     *   // Fetch the next input object to fill
-     *   SmartPtr<SubbandProcInputData> input = queue.inputPool.free.remove();
-     *
-     *   // Provide input
-     *   receiveInput(input);
-     *
-     *   // Annotate input
-     *   input->blockID.block = block;
-     *   input->blockID.globalSubbandIdx = subband;
-     *   input->blockID.localSubbandIdx  = subbandIdx;
-     *
-     *   // Fetch the next output object to fill
-     *   SmartPtr<SubbandProcOutputData> output = queue.outputPool.free.remove();
-     *
-     *   // Process block
-     *   queue.processSubband(input, output);
-     *
-     *   // Give back input and output objects to queue
-     *   queue.inputPool.free.append(input);
-     *   queue.outputPool.free.append(output);
-     *
-     *   The queue.inputPool.filled and queue.outputPool.filled can be used to
-     *   temporarily store filled input and output objects. Such is needed to
-     *   obtain parallellism (i.e. read/process/write in separate threads).
-     */
-    class SubbandProc {
-    public:
-      SubbandProc(const Parset &ps, gpu::Context &context,
-                  KernelFactories &factories,
-                  size_t nrSubbandsPerSubbandProc = 1);
-
-      // A pool of input data, to allow items to be filled and
-      // computed on in parallel.
-      Pool<SubbandProcInputData> inputPool;
-
-      // A pool of input data, that has been pre processed.
-      Pool<SubbandProcInputData> processPool;
-
-      // A pool of output data, to allow items to be filled
-      // and written in parallel.
-      Pool<SubbandProcOutputData> outputPool;
-
-      // Correlate the data found in the input data buffer
-      void processSubband(SubbandProcInputData &input, SubbandProcOutputData &output);
-
-      // Do post processing on the CPU.
-      void postprocessSubband(SubbandProcOutputData &output);
-
-    protected:
-      const Parset &ps;
-      const size_t nrSubbandsPerSubbandProc;
-
-      gpu::Stream queue;
-
-      // The previously processed SAP/block, or -1 if nothing has been
-      // processed yet. Used in order to determine if new delays have
-      // to be uploaded.
-      ssize_t prevBlock;
-      signed int prevSAP;
-
-      // @{
-      // Device memory buffers. These buffers are used interleaved. For details,
-      // please refer to the document bf-pipeline.txt in the directory
-      // GPUProc/doc.
-      boost::shared_ptr<gpu::DeviceMemory> devA;
-      boost::shared_ptr<gpu::DeviceMemory> devB;
-      // @}
-
-      PerformanceCounter totalCounter;
-      PerformanceCounter inputCounter;
-      BudgetTimer processCPUTimer;
-
-      std::unique_ptr<CorrelatorStep> correlatorStep;
-      std::unique_ptr<BeamFormerPreprocessingStep> preprocessingStep;
-      std::unique_ptr<BeamFormerCoherentStep> coherentStep;
-      std::unique_ptr<BeamFormerIncoherentStep> incoherentStep;
-
-      // Returns the number of output elements to create to get a smooth
-      // running pipeline.
-      size_t nrOutputElements() const;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/UHEP_SubbandProc.h b/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/UHEP_SubbandProc.h
deleted file mode 100644
index 03169c57f7175a537efe47ffa7dba49fa05c0507..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/SubbandProcs/UHEP_SubbandProc.h
+++ /dev/null
@@ -1,69 +0,0 @@
-//# UHEP_SubbandProc.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_UHEP_SUBBAND_PROC_H
-#define LOFAR_GPUPROC_CUDA_UHEP_SUBBAND_PROC_H
-
-#include <complex>
-
-#include <Common/LofarLogger.h>
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/MultiDimArrayHostBuffer.h>
-#include <GPUProc/Pipelines/UHEP_Pipeline.h>
-#include <GPUProc/Kernels/UHEP_TriggerKernel.h>
-#include "SubbandProc.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_SubbandProc : public SubbandProc
-    {
-    public:
-      UHEP_SubbandProc(UHEP_Pipeline &, unsigned queueNumber);
-
-      void doWork(const float *delaysAtBegin, const float *delaysAfterEnd, const float *phaseOffsets);
-
-      UHEP_Pipeline       &pipeline;
-      gpu::Event inputSamplesEvent, beamFormerWeightsEvent;
-
-      gpu::DeviceMemory devBuffers[2];
-      gpu::DeviceMemory devInputSamples;
-      MultiArrayHostBuffer<char, 5> hostInputSamples;
-
-      gpu::DeviceMemory devBeamFormerWeights;
-      MultiArrayHostBuffer<std::complex<float>, 3> hostBeamFormerWeights;
-
-      gpu::DeviceMemory devComplexVoltages;
-      gpu::DeviceMemory devReverseSubbandMapping;
-      gpu::DeviceMemory devFFTedData;
-      gpu::DeviceMemory devInvFIRfilteredData;
-      gpu::DeviceMemory devInvFIRfilterWeights;
-
-      gpu::DeviceMemory devTriggerInfo;
-      MultiArraySharedBuffer<TriggerInfo, 1> hostTriggerInfo;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/gpu_incl.h b/RTCP/Cobalt/GPUProc/src/cuda/gpu_incl.h
deleted file mode 100644
index 7e56db7b5b417fae286394ca9cc0cc0f3cb8c713..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/gpu_incl.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//# gpu_incl.h: portable CUDA header to mirror OpenCL sources
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_GPU_INCL_H
-#define LOFAR_GPUPROC_CUDA_GPU_INCL_H
-
-// Pointless in itself; to mirror the OpenCL sources
-// Note: nvcc automatically includes cuda.h, but for most code we don't need it.
-
-// CUDA include option(s)
-//<none>
-
-#include <cuda.h>
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/gpu_wrapper.h b/RTCP/Cobalt/GPUProc/src/cuda/gpu_wrapper.h
deleted file mode 100644
index 831a5e0599300a60d566724f81bd0dafceea0552..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/cuda/gpu_wrapper.h
+++ /dev/null
@@ -1,627 +0,0 @@
-//# gpu_wrapper.h: CUDA-specific wrapper classes for GPU types.
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_CUDA_GPU_WRAPPER_H
-#define LOFAR_GPUPROC_CUDA_GPU_WRAPPER_H
-
-// \file cuda/gpu_wrapper.h
-// C++ wrappers for CUDA akin the OpenCL C++ wrappers.
-// Uses the "Pimpl" idiom for resource managing classes (i.e. that need to
-// control copying having a non-trivial destructor. For more info on Pimpl, see
-// http://www.boost.org/doc/libs/release/libs/smart_ptr/sp_techniques.html#pimpl
-// Not Pimpl-ed are class Platform, Device, and Function.
-// These are also passed by value.
-
-#include <cstddef>
-#include <string>
-#include <vector>
-#include <map>
-#include <iosfwd>
-
-#include <boost/shared_ptr.hpp>
-#include "gpu_incl.h" // ideally, this goes into the .cc, but too much leakage
-#include <cufft.h>
-
-#include <GPUProc/gpu_wrapper.h> // GPUException
-
-#if CUDA_VERSION < 4020
-typedef int CUsharedconfig;
-#endif
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class PerformanceCounter;
-    namespace gpu
-    {
-
-      // Exception class for CUDA errors.
-      EXCEPTION_CLASS(CUDAException, GPUException);
-
-      // Return the cuFFT error string associated with \a errcode.
-      std::string cufftErrorMessage(cufftResult errcode);
-
-      // Return the CUDA error string associated with \a errcode.
-      std::string errorMessage(CUresult errcode);
-
-
-      // Struct representing a CUDA Grid, which is similar to the @c dim3 type
-      // in the CUDA Runtime API.
-      struct Grid
-      {
-        Grid(unsigned int x_ = 1, unsigned int y_ = 1, unsigned int z_ = 1);
-        unsigned int x;
-        unsigned int y;
-        unsigned int z;
-        friend std::ostream& operator<<(std::ostream& os, const Grid& grid);
-      };
-
-      // Struct representing a CUDA Block, which is similar to the @c dim3 type
-      // in the CUDA Runtime API.
-      //
-      // @invariant x > 0, y > 0, z > 0
-      struct Block
-      {
-        Block(unsigned int x_ = 1, unsigned int y_ = 1, unsigned int z_ = 1);
-        unsigned int x;
-        unsigned int y;
-        unsigned int z;
-        friend std::ostream& operator<<(std::ostream& os, const Block& block);
-      };
-
-      // Struct containing kernel launch configuration.
-      struct ExecConfig
-      {
-        ExecConfig(Grid gr = Grid(), Block bl = Block(), size_t dynShMem = 0);
-        Grid   grid;
-        Block  block;
-        size_t dynSharedMemSize;
-        friend std::ostream& operator<<(std::ostream& os,
-                                        const ExecConfig& execConfig);
-      };
-
-
-      // Forward declaration needed by Platform::devices.
-      class Device;
-
-      // This class is not strictly needed, because in CUDA there's only one
-      // platform, but it hides the CUDA calls and makes it similar to OpenCL.
-      class Platform
-      {
-      public:
-        // Initialize the CUDA platform.
-        // \param flags must be 0 (at least up till CUDA 5.0).
-        Platform(unsigned int flags = 0);
-
-        // The CUDA version (e.g. 5.0 -> 5000).
-        int version() const;
-
-        // Returns the number of devices in the CUDA platform.
-        size_t size() const;
-
-        // Returns a vector of all devices in the CUDA platform.
-        std::vector<Device> devices() const;
-
-        // Returns the name of the CUDA platform. (currently, "NVIDIA CUDA")
-        std::string getName() const;
-
-        // Return the maximum number of threads per block, that
-        // is supported by all devices on the platform.
-        // 
-        // Hardware dependent.
-        // - Returns at least 512 (except for ancient hardware)
-        // - Returns 1024 for K10 (= Cobalt hardware)
-        unsigned getMaxThreadsPerBlock() const;
-      };
-
-      // Wrap a CUDA Device.
-      class Device
-      {
-      public:
-        // Create a device.
-        // \param ordinal is the device number; 
-        //        valid range: [0, Platform.size()-1]
-        Device(int ordinal = 0);
-
-        // Order Devices by PCI ID (used in std::sort)
-        bool operator<(const Device &other) const;
-
-        // Return the name of the device in human readable form.
-        std::string getName() const;
-
-        // Return the compute capability (major)
-        unsigned getComputeCapabilityMajor() const;
-
-        // Return the compute capability (minor)
-        unsigned getComputeCapabilityMinor() const;
-
-        // Return the total amount of global memory, in bytes
-        size_t getTotalGlobalMem() const;
-
-        // Return the maximum amount of shared memory per block
-        size_t getBlockSharedMem() const;
-
-        // Return the total amount of constant memory
-        size_t getTotalConstMem() const;
-
-        // Return the PCI ID (bus:device) of this GPU
-        std::string pciId() const;
-
-        // Return the maximum number of threads per block
-        // 
-        // Hardware dependent.
-        // - Returns at least 512 (except for ancient hardware)
-        // - Returns 1024 for K10 (= Cobalt hardware)
-        unsigned getMaxThreadsPerBlock() const;
-
-        // Return the maximum dimensions of a block of threads.
-        struct Block getMaxBlockDims() const;
-
-        // Return the maximum dimensions of a grid of blocks.
-        struct Grid getMaxGridDims() const;
-
-        // Return the number of multi-processors.
-        unsigned getMultiProcessorCount() const;
-
-        // Return the maximum number of threads that can be
-        // resident on a multi-processor.
-        unsigned getMaxThreadsPerMultiProcessor() const;
-
-        // Return information on a specific \a attribute.
-        // \param attribute CUDA device attribute
-        int getAttribute(CUdevice_attribute attribute) const;
-
-      private:
-        // Context needs access to our \c _device to create a context.
-        friend class Context;
-
-        // The CUDA device.
-        CUdevice _device;
-      };
-
-
-      // Wrap a CUDA Context. Since this class manages a resource (a CUDA
-      // context), it uses the pimpl idiom in combination with a reference
-      // counted pointer to make it copyable.
-      //
-      // We do not tie any context to any thread by default -- all contexts
-      // are `floating', and are to be tied to a thread only by pushing them
-      // as the current context, performing operation(s), and popping them
-      // from the current context stack. The pushing and popping is automated
-      // in the ScopedCurrentContext class.
-      class Context
-      {
-      public:
-        // Create a new CUDA context and associate it with the calling thread.
-        // In other words, \c setCurrent() is implied.
-        //
-        // Flags:
-
-        //    CU_CTX_SCHED_AUTO:
-        //        The default value if the flags parameter is zero, uses a
-        //        heuristic based on the number of active CUDA contexts in the
-        //        process C and the number of logical processors in the system P.
-        //        If C > P, then CUDA will yield to other OS threads when waiting
-        //        for the GPU, otherwise CUDA will not yield while waiting for
-        //        results and actively spin on the processor.
-        //    CU_CTX_SCHED_SPIN:
-        //        Instruct CUDA to actively spin when waiting for results from the GPU.
-        //        This can decrease latency when waiting for the GPU, but may lower
-        //        the performance of CPU threads if they are performing work in parallel
-        //        with the CUDA thread.
-        //    CU_CTX_SCHED_YIELD:
-        //        Instruct CUDA to yield its thread when waiting for results from the GPU.
-        //        This can increase latency when waiting for the GPU, but can increase
-        //        the performance of CPU threads performing work in parallel with the GPU.
-        //    CU_CTX_SCHED_BLOCKING_SYNC:
-        //        Instruct CUDA to block the CPU thread on a synchronization primitive
-        //        when waiting for the GPU to finish work.
-        Context(const Device &device, unsigned int flags = CU_CTX_SCHED_YIELD);
-
-        // Returns the device associated to this context.
-        Device getDevice() const;
-
-        // Set the cache configuration for kernel launches in this context.
-        void setCacheConfig(CUfunc_cache config) const;
-
-        // Set the shared memory configuration for kernel launches in this context.
-        void setSharedMemConfig(CUsharedconfig config) const;
-
-      private:
-        // Non-copyable implementation class.
-        class Impl;
-
-        // Reference counted pointer to the implementation class.
-        boost::shared_ptr<Impl> _impl;
-
-        friend class ScopedCurrentContext;
-      };
-
-
-      // Make a certain context the current one for a certain scope.
-      class ScopedCurrentContext
-      {
-      public:
-        ScopedCurrentContext( const Context &context );
-        ~ScopedCurrentContext();
-
-      private:
-        const Context &_context;
-      };
-
-
-      // Wrap CUDA Host Memory. This is the equivalent of a OpenCL Buffer. CUDA
-      // distinguishes between between host- and device memory, OpenCL does not.
-      class HostMemory
-      {
-      public:
-        // Allocate \a size bytes of host memory.
-        // \param context CUDA context associated with this HostMemory object.
-        // \param size number of bytes to allocate
-        // \param flags affect allocation
-        // \note To create pinned memory, we need to set
-        // \code
-        // flags = CU_MEMHOSTALLOC_PORTABLE
-        // \endcode
-        // \note For input buffers we may consider setting
-        // \code
-        // flags = CU_MEMHOSTALLOC_PORTABLE | CU_MEMHOSTALLOC_WRITECOMBINED
-        // \endcode
-        // Please refer to the documentation of the function \c cuMemHostAlloc()
-        // in the CUDA Driver API for details.
-        HostMemory(const Context &context, size_t size, unsigned int flags = 0);
-
-        // Return a pointer to the actual memory.
-        // \warning The returned pointer shall not have a lifetime beyond the
-        // lifetime of this object (actually the last copy).
-        template <typename T>
-        T *get() const;
-
-        // Return the size of this memory block.
-        size_t size() const;
-
-      private:
-        // Get a void pointer to the actual memory from our Impl class. This
-        // method is only used by our templated get() method.
-        void* getPtr() const;
-
-        // Non-copyable implementation class.
-        class Impl;
-
-        // Reference counted pointer to the implementation class.
-        boost::shared_ptr<Impl> _impl;
-      };
-
-
-      // Wrap CUDA Device Memory. This is the equivalent of an OpenCL
-      // Buffer. CUDA distinguishes between between host- and device memory,
-      // OpenCL does not.
-      class DeviceMemory
-      {
-      public:
-        // Allocate \a size bytes of device memory.
-        DeviceMemory(const Context &context, size_t size);
-
-        // Return a device pointer as a handle to the memory.
-        void *get() const;
-
-        // Fill the first \a n bytes of memory with the constant byte \a uc.
-        // \param uc Constant byte value to put into memory
-        // \param n  Number of bytes to set. Defaults to the complete block.
-        //           If \a n is larger than the current memory block size, then
-        //           the complete block will be set to \a uc.
-        void set(unsigned char uc, size_t n = (size_t)-1) const;
-
-        // Return the size of this memory block.
-        size_t size() const;
-
-        // Fetch the contents of this buffer in a new HostMemory buffer.
-        HostMemory fetch() const;
-
-      private:
-        // Function needs access to our device ptr location to set this as a kernel arg.
-        friend class Function;
-
-        // Non-copyable implementation class.
-        class Impl;
-
-        // Reference counted pointer to the implementation class.
-        boost::shared_ptr<Impl> _impl;
-      };
-
-
-      // Wrap a CUDA Module. This is the equivalent of a OpenCL Program.
-      class Module
-      {
-      public:
-        typedef std::map<CUjit_option, void*> optionmap_t;
-
-        Module(); // TODO: tmp, as long as CorrelatorPipelinePrograms needs a default init
-
-        // Load the module in the file \a fname into the given \a context. The
-        // file should be a \e cubin file or a \e ptx file as output by \c nvcc.
-        // \param context CUDA context associated with this Module object.
-        // \param fname name of a module file
-        // \note For details, please refer to the documentation of \c
-        // cuModuleLoad in the CUDA Driver API.
-        Module(const Context &context, const std::string &fname);
-
-        // Load the module pointed to by \a image into the given \a context. The
-        // pointer may point to a null-terminated string containing \e cubin or
-        // \e ptx code.
-        // \param context CUDA context associated with this Module object.
-        // \param image pointer to a module image in memory
-        // \note For details, please refer to the documentation of \c
-        // cuModuleLoadData in the CUDA Driver API.
-        Module(const Context &context, const void *image);
-
-        // Load the module pointed to by \a image into the given \a context. The
-        // pointer may point to a null-terminated string containing \e cubin or
-        // \e ptx code.
-        // \param context CUDA context associated with this Module object.
-        // \param image pointer to a module image in memory
-        // \param options map of \c CUjit_option items, with their associated
-        // values.
-        // \note All values are cast to void*, so if an option requires
-        // an unsigned int as value, the unsigned int's value itself is cast to void*!
-        // \note For details, please refer to the documentation of \c
-        // cuModuleLoadDataEx in the CUDA Driver API.
-        Module(const Context &context, const void *image, optionmap_t &options);
-
-        // Return the Context in which this Module was created.
-        Context getContext() const;
-
-      private:
-        // Function needs access to our module to create a function.
-        friend class Function;
-
-        // Non-copyable implementation class.
-        class Impl;
-
-        // Reference counted pointer to the implementation class.
-        boost::shared_ptr<Impl> _impl;
-      };
-
-      // Wrap a CUDA Device Function. This is the equivalent of an OpenCL
-      // Program.
-      class Function
-      {
-      public:
-        // Construct a function object by looking up the function \a name in the
-        // module \a module.
-        Function(const Module &module, const std::string &name);
-
-        // Return the name of the function.
-        std::string name() const;
-
-        // Set kernel immediate argument number \a index to \a val.
-        // \a val must outlive kernel execution.
-        // Not for device memory objects (be it as DeviceMemory or as void *).
-        template <typename T>
-        void setArg(size_t index, const T &val);
-
-        // Set kernel DeviceMemory object argument number \a index to \a mem.
-        // \a mem must outlive kernel execution.
-        void setArg(size_t index, const DeviceMemory &mem);
-
-        // Set pointer to kernel device memory object (as void *) number \a index
-        // to \a val. \a *val must outlive kernel execution.
-        // Note: Prefer to use setArg() passing a DeviceMemory ref over this overload.
-        void setArg(size_t index, const void **val);
-
-        // Return information about a function.
-        // \note For details on valid values for \a attribute, please refer to
-        // the documentation of cuFuncGetAttribute in the CUDA Driver API.
-        int getAttribute(CUfunction_attribute attribute) const;
-
-        // Set the shared memory configuration for a device function.
-        // \note For details on valid values for \a config, please refer to the
-        // documentation of cuFuncSetSharedMemConfig in the CUDA Driver API.
-        void setSharedMemConfig(CUsharedconfig config) const;
-
-      protected:
-        const Context _context;
-
-      private:
-        // Keep the Module alive, because Function actually wraps a pointer
-        // to a function within the Module.
-        const Module _module;
-
-        // The name of the function, for error reporting purposes
-        const std::string _name;
-
-        // Stream needs access to our CUDA function to launch a kernel.
-        friend class Stream;
-
-        // CUDA function.
-        CUfunction _function;
-
-        // Function arguments as set.
-        std::vector<const void *> _kernelArgs;
-
-        // Helper function to modify _kernelArgs.
-        void doSetArg(size_t index, const void *argp);
-
-        // Do not use. To guard against passing pointers.
-        // Note that even device void * cannot be passed, because we need its
-        // address with a life time longer than this formal parameter.
-        template<typename T>
-        void setArg(size_t index, const T *&); // intentionally not impl.
-
-        // Do not use. To guard against passing HostMemory references to kernels.
-        void setArg(size_t index, const HostMemory &); // intentionally not impl.
-
-        // Do not use. To guard against passing HostMemory pointers to kernels.
-        void setArg(size_t index, const HostMemory *); // intentionally not impl.
-      };
-
-      // Wrap a CUDA Event. This is the equivalent of an OpenCL Event.
-      class Event
-      {
-      public:
-        // Construct a CUDA event. This class manages a resource (a CUDA event)
-        // and is therefore implemented using the pimpl idiom, using a reference
-        // counted pointer to a non-copyable implementation class.
-        // \note For details on valid values for \a flags, please refer to the
-        // documentation of cuEventCreate in the CUDA Driver API.
-        Event(const Context &context, unsigned int flags = CU_EVENT_DEFAULT);
-
-        // Return the elapsed time in milliseconds between this event and the \a
-        // second event.
-        float elapsedTime(Event &second) const;
-
-        // Wait until all work preceding this event in the same stream has
-        // completed.
-        void wait();
-
-      private:
-        // Stream needs access to our CUDA event to wait for and record events.
-        friend class Stream;
-
-        // Non-copyable implementation class.
-        class Impl;
-
-        // Reference counted pointer to the implementation class.
-        boost::shared_ptr<Impl> _impl;
-      };
-
-
-      // Wrap a CUDA Stream. This is the equivalent of an OpenCL
-      // CommandQueue. This class manages a resource (a CUDA stream) and is
-      // therefore implemented using the pimpl idiom, using a reference counted
-      // pointer to a non-copyable implementation class.
-      class Stream
-      {
-      public:
-        // Create a stream.
-        // \param flags must be 0 for CUDA < 5.0
-        // \param context CUDA context associated with this Stream object.
-        // \note For details on valid values for \a flags, please refer to the
-        // documentation of \c cuStreamCreate in the CUDA Driver API.
-        explicit Stream(const Context &context, unsigned int flags = 0);  // named CU_STREAM_DEFAULT (0) since CUDA 5.0
-
-        // Transfer data from host memory \a hostMem to device memory \a devMem.
-        // \param devMem Device memory that will be copied to.
-        // \param hostMem Host memory that will be copied from.
-        // \param synchronous Indicates whether the transfer must be done
-        //        synchronously or asynchronously.
-        void writeBuffer(const DeviceMemory &devMem, const HostMemory &hostMem,
-                         bool synchronous = false) const;
-
-        // Transfer data from host memory \a hostMem to device memory \a devMem.
-        // When gpuProfiling is enabled this transfer is synchronous
-        // \param devMem Device memory that will be copied to.
-        // \param hostMem Host memory that will be copied from.
-        // \param counter PerformanceCounter that will receive transfer duration
-        // if  gpuProfiling is enabled
-        // \param synchronous Indicates whether the transfer must be done
-        //        synchronously or asynchronously. Default == false
-        void writeBuffer(const DeviceMemory &devMem, const HostMemory &hostMem,
-                         PerformanceCounter &counter, bool synchronous = false) const;
-
-        // Transfer data from device memory \a devMem to host memory \a hostMem.
-        // \param hostMem Host memory that will be copied to.
-        // \param devMem Device memory that will be copied from.
-        // \param synchronous Indicates whether the transfer must be done
-        //        synchronously or asynchronously.
-        void readBuffer(const HostMemory &hostMem, const DeviceMemory &devMem,
-                        bool synchronous = false) const;
-
-        // Transfer data from device memory \a devMem to host memory \a hostMem.
-        // When gpuProfiling is enabled this transfer is synchronous
-        // \param hostMem Host memory that will be copied to.
-        // \param devMem Device memory that will be copied from.
-        // \param counter PerformanceCounter that will receive transfer duration
-        // if  gpuProfiling is enabled
-        // \param synchronous Indicates whether the transfer must be done
-        //        synchronously or asynchronously. Default == false
-        void readBuffer(const HostMemory &hostMem, const DeviceMemory &devMem,
-                        PerformanceCounter &counter, bool synchronous = false) const;
-
-        // Transfer data from device memory \a devSource to device memory \a devTarget.
-        // \param devTarget Device memory that will be copied to.
-        // \param devSource Device memory that will be copied from.
-        // \param synchronous Indicates whether the transfer must be done
-        //        synchronously or asynchronously.
-        void copyBuffer(const DeviceMemory &devTarget, const DeviceMemory &devSource,
-                        bool synchronous = false) const;
-
-        // Transfer data from device memory \a devSource to device memory \a devTarget.
-        // When gpuProfiling is enabled this transfer is synchronous
-        // \param devTarget Device memory that will be copied to.
-        // \param devSource Device memory that will be copied from.
-        // \param counter PerformanceCounter that will receive transfer duration
-        //        if gpuProfiling is enabled
-        // \param synchronous Indicates whether the transfer must be done
-        //        synchronously or asynchronously. Defaults to \c false
-        //        (asynchronously).
-        void copyBuffer(const DeviceMemory &devTarget, const DeviceMemory &devSource,
-                        PerformanceCounter &counter, bool synchronous = false) const;
-
-        // Launch a CUDA function.
-        // \param function object containing the function to launch
-        // \param grid Grid size (in terms of blocks (not threads (OpenCL)))
-        // \param block Block (thread group) size
-        void launchKernel(const Function &function,
-                          const Grid &grid, const Block &block) const;
-
-        // Check if all operations on this stream have completed.
-        // \return true if all completed, or false otherwise.
-        bool query() const;
-
-        // Wait until a this stream's tasks are completed.
-        void synchronize() const;
-
-        // Let this stream wait on the event \a event.
-        void waitEvent(const Event &event) const;
-
-        // Record the event \a event for this stream.
-        void recordEvent(const Event &event) const;
-
-        // Return the underlying CUDA stream. TODO: try to get rid of CUstream here: FFT thing to here or make it friend
-        CUstream get() const;
-
-        // Returns the context associated with the underlying CUDA stream.
-        Context getContext() const; // TODO: consider using this in the SubbandProcs (now has Stream and Context stored)
-
-        // Return whether this stream mandates synchronous behaviour
-        bool isSynchronous() const;
-
-      private:
-        // Non-copyable implementation class.
-        class Impl;
-
-        // Reference counted pointer to the implementation class.
-        boost::shared_ptr<Impl> _impl;
-
-        // Force synchronous transfers and kernel launches
-        bool force_synchronous;
-      };
-
-    } // namespace gpu
-  } // namespace Cobalt
-} // namespace LOFAR
-
-#include "gpu_wrapper.tcc"
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/cuda_config.h.in b/RTCP/Cobalt/GPUProc/src/cuda_config.h.in
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/cuda_config.h.in
rename to RTCP/Cobalt/GPUProc/src/cuda_config.h.in
diff --git a/RTCP/Cobalt/GPUProc/src/gpu_incl.h b/RTCP/Cobalt/GPUProc/src/gpu_incl.h
index 4884cbd3c5527be1bdf3123b308e9fa53e5844ec..efb6c8185bb5a7bdd7d4ac4e29a4f5b4e4722220 100644
--- a/RTCP/Cobalt/GPUProc/src/gpu_incl.h
+++ b/RTCP/Cobalt/GPUProc/src/gpu_incl.h
@@ -25,17 +25,7 @@
 #ifndef LOFAR_GPUPROC_GPU_INCL_H
 #define LOFAR_GPUPROC_GPU_INCL_H
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
-
-#if defined (USE_CUDA)
-# include "cuda/gpu_incl.h"
-#elif defined (USE_OPENCL)
-# include "opencl/gpu_incl.h"
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+#include <cuda.h>
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/gpu_load.cc b/RTCP/Cobalt/GPUProc/src/gpu_load.cc
index bd77798a6e9d50bae733cf4675f578c73c785ebe..f3df161f40c566d5412a59b33e2be1d85fde78a2 100644
--- a/RTCP/Cobalt/GPUProc/src/gpu_load.cc
+++ b/RTCP/Cobalt/GPUProc/src/gpu_load.cc
@@ -60,7 +60,6 @@ int main(int argc, char **argv) {
   const size_t nrStations = ps.settings.antennaFields.size();
   const size_t nrPolarisations = ps.settings.nrPolarisations;
   const size_t maxNrTABsPerSAP = ps.settings.beamFormer.maxNrCoherentTABsPerSAP();
-  const size_t nrSamplesPerChannel = ps.settings.correlator.nrSamplesPerIntegration();
   const size_t nrSamplesPerSubband = ps.settings.blockSize;
   const size_t nrBitsPerSample = ps.settings.nrBitsPerSample;
   const size_t nrBytesPerComplexSample = ps.nrBytesPerComplexSample();
@@ -73,14 +72,11 @@ int main(int argc, char **argv) {
   const size_t nrChannelsPerSubband = ps.settings.correlator.nrChannels;
   const size_t integrationSteps = ps.settings.correlator.nrSamplesPerIntegration();
 
-  // Create very simple kernel programs, with predictable output. Skip as much
-  // as possible. Nr of channels/sb from the parset is 1, so the PPF will not
-  // even run.  Parset also has turned of delay compensation and bandpass
-  // correction (but that kernel will run to convert int to float and to
-  // transform the data order).
+  // Assume each node has as many GPUs as us.
+  const size_t nrSubbandsPerSubbandProc = ceilDiv(ceilDiv(ps.settings.subbands.size(), ps.settings.nodes.size()), devices.size());
 
-  KernelFactories factories(ps, 1);
-  SubbandProc cwq(ps, ctx, factories);
+  KernelFactories factories(ps, nrSubbandsPerSubbandProc);
+  SubbandProc cwq(ps, ctx, factories, nrSubbandsPerSubbandProc);
 
   SubbandProcInputData in(
     nrBeams, nrStations, nrPolarisations, maxNrTABsPerSAP,
@@ -94,7 +90,6 @@ int main(int argc, char **argv) {
     "\n  nrStations = " << nrStations <<
     "\n  nrPolarisations = " << nrPolarisations <<
     "\n  maxNrTABsPerSAP = " << maxNrTABsPerSAP <<
-    "\n  nrSamplesPerChannel = " << nrSamplesPerChannel <<
     "\n  nrSamplesPerSubband = " << nrSamplesPerSubband <<
     "\n  nrBitsPerSample = " << nrBitsPerSample <<
     "\n  ----------------------------" <<
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/gpu_utils.cc b/RTCP/Cobalt/GPUProc/src/gpu_utils.cc
similarity index 99%
rename from RTCP/Cobalt/GPUProc/src/cuda/gpu_utils.cc
rename to RTCP/Cobalt/GPUProc/src/gpu_utils.cc
index f7a9f2f9956d1344ac66ba20554eb054d011709a..92a37f20027d6daf17682d7ffb6237fe99bcd6fe 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/gpu_utils.cc
+++ b/RTCP/Cobalt/GPUProc/src/gpu_utils.cc
@@ -247,7 +247,7 @@ namespace LOFAR
         ostringstream oss;
         oss << CUDA_TOOLKIT_ROOT_DIR << "/bin/nvcc " << source << flags << defs;
         string cmd(oss.str());
-        LOG_DEBUG_STR("Starting runtime compilation:\n\t" << cmd);
+        LOG_INFO_STR("Starting runtime compilation:\n\t" << cmd);
 
         string ptx;
         char buffer [1024];       
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/gpu_wrapper.cc b/RTCP/Cobalt/GPUProc/src/gpu_wrapper.cc
similarity index 97%
rename from RTCP/Cobalt/GPUProc/src/cuda/gpu_wrapper.cc
rename to RTCP/Cobalt/GPUProc/src/gpu_wrapper.cc
index d27c21366f7ff70786b132fa763394b063a45cae..ac82561b7bf561a398615ce6e787258dff44c13a 100644
--- a/RTCP/Cobalt/GPUProc/src/cuda/gpu_wrapper.cc
+++ b/RTCP/Cobalt/GPUProc/src/gpu_wrapper.cc
@@ -446,7 +446,11 @@ namespace LOFAR
 
         ~Impl()
         {
-          checkCuCall(cuCtxDestroy(_context));
+          try {
+            checkCuCall(cuCtxDestroy(_context));
+          } catch (Exception &ex) {
+            LOG_ERROR_STR(ex);
+          }
         }
 
         CUdevice getCurrentDevice() const
@@ -539,7 +543,11 @@ namespace LOFAR
         {
           ScopedCurrentContext scc(_context);
 
-          checkCuCall(cuMemFreeHost(_ptr));
+          try {
+            checkCuCall(cuMemFreeHost(_ptr));
+          } catch (Exception &ex) {
+            LOG_ERROR_STR(ex);
+          }
         }
 
         void *get() const
@@ -591,7 +599,11 @@ namespace LOFAR
         {
           ScopedCurrentContext scc(_context);
 
-          checkCuCall(cuMemFree(_ptr));
+          try {
+            checkCuCall(cuMemFree(_ptr));
+          } catch (Exception &ex) {
+            LOG_ERROR_STR(ex);
+          }
         }
 
         CUdeviceptr get() const
@@ -709,7 +721,11 @@ namespace LOFAR
           if (_module) {
             ScopedCurrentContext scc(_context);
 
-            checkCuCall(cuModuleUnload(_module));
+            try {
+              checkCuCall(cuModuleUnload(_module));
+            } catch (Exception &ex) {
+              LOG_ERROR_STR(ex);
+            }
           }
         }
 
@@ -822,7 +838,11 @@ namespace LOFAR
         {
           ScopedCurrentContext scc(_context);
 
-          checkCuCall(cuEventDestroy(_event));
+          try {
+            checkCuCall(cuEventDestroy(_event));
+          } catch (Exception &ex) {
+            LOG_ERROR_STR(ex);
+          }
         }
 
         float elapsedTime(CUevent other) const
@@ -880,7 +900,11 @@ namespace LOFAR
         {
           ScopedCurrentContext scc(_context);
 
-          checkCuCall(cuStreamDestroy(_stream));
+          try {
+            checkCuCall(cuStreamDestroy(_stream));
+          } catch (Exception &ex) {
+            LOG_ERROR_STR(ex);
+          }
         }
 
         void memcpyHtoDAsync(CUdeviceptr devPtr, const void *hostPtr, 
diff --git a/RTCP/Cobalt/GPUProc/src/gpu_wrapper.h b/RTCP/Cobalt/GPUProc/src/gpu_wrapper.h
index 640e89ccbc54adb1919a150bcda2871d0ae01082..6f19a4f10ee0ce013a963d634ad30f6320953b38 100644
--- a/RTCP/Cobalt/GPUProc/src/gpu_wrapper.h
+++ b/RTCP/Cobalt/GPUProc/src/gpu_wrapper.h
@@ -19,41 +19,612 @@
 //#
 //# $Id$
 
-// \file
-// Wrapper classes for GPU types.
+// \file cuda/gpu_wrapper.h
+// C++ wrappers for CUDA akin the OpenCL C++ wrappers.
+// Uses the "Pimpl" idiom for resource managing classes (i.e. that need to
+// control copying having a non-trivial destructor. For more info on Pimpl, see
+// http://www.boost.org/doc/libs/release/libs/smart_ptr/sp_techniques.html#pimpl
+// Not Pimpl-ed are class Platform, Device, and Function.
+// These are also passed by value.
 
 #ifndef LOFAR_GPUPROC_GPU_WRAPPER_H
 #define LOFAR_GPUPROC_GPU_WRAPPER_H
 
-#if defined (USE_CUDA) && defined (USE_OPENCL)
-# error "Either CUDA or OpenCL must be enabled, not both"
-#endif
+#include <cstddef>
+#include <string>
+#include <vector>
+#include <map>
+#include <iosfwd>
+
+#include <boost/shared_ptr.hpp>
+#include "gpu_incl.h" // ideally, this goes into the .cc, but too much leakage
+#include <cufft.h>
 
 #include <Common/Exception.h>
+#include <GPUProc/gpu_wrapper.h> // GPUException
+
+#if CUDA_VERSION < 4020
+typedef int CUsharedconfig;
+#endif
 
 namespace LOFAR
 {
   namespace Cobalt
   {
+    class PerformanceCounter;
+
     namespace gpu
     {
       // Exception class for GPU errors.
       EXCEPTION_CLASS(GPUException, LOFAR::Exception);
 
-    } // namespace gpu
+      // Exception class for CUDA errors.
+      EXCEPTION_CLASS(CUDAException, GPUException);
 
-  } // namespace Cobalt
+      // Return the cuFFT error string associated with \a errcode.
+      std::string cufftErrorMessage(cufftResult errcode);
 
-} // namespace LOFAR
+      // Return the CUDA error string associated with \a errcode.
+      std::string errorMessage(CUresult errcode);
 
+      // Struct representing a CUDA Grid, which is similar to the @c dim3 type
+      // in the CUDA Runtime API.
+      struct Grid
+      {
+        Grid(unsigned int x_ = 1, unsigned int y_ = 1, unsigned int z_ = 1);
+        unsigned int x;
+        unsigned int y;
+        unsigned int z;
+        friend std::ostream& operator<<(std::ostream& os, const Grid& grid);
+      };
 
-#if defined (USE_CUDA)
-# include "cuda/gpu_wrapper.h"
-#elif defined (USE_OPENCL)
-# include "opencl/gpu_wrapper.h"
-#else
-# error "Either CUDA or OpenCL must be enabled, not neither"
-#endif
+      // Struct representing a CUDA Block, which is similar to the @c dim3 type
+      // in the CUDA Runtime API.
+      //
+      // @invariant x > 0, y > 0, z > 0
+      struct Block
+      {
+        Block(unsigned int x_ = 1, unsigned int y_ = 1, unsigned int z_ = 1);
+        unsigned int x;
+        unsigned int y;
+        unsigned int z;
+        friend std::ostream& operator<<(std::ostream& os, const Block& block);
+      };
+
+      // Struct containing kernel launch configuration.
+      struct ExecConfig
+      {
+        ExecConfig(Grid gr = Grid(), Block bl = Block(), size_t dynShMem = 0);
+        Grid   grid;
+        Block  block;
+        size_t dynSharedMemSize;
+        friend std::ostream& operator<<(std::ostream& os,
+                                        const ExecConfig& execConfig);
+      };
+
+
+      // Forward declaration needed by Platform::devices.
+      class Device;
+
+      // This class is not strictly needed, because in CUDA there's only one
+      // platform, but it hides the CUDA calls and makes it similar to OpenCL.
+      class Platform
+      {
+      public:
+        // Initialize the CUDA platform.
+        // \param flags must be 0 (at least up till CUDA 5.0).
+        Platform(unsigned int flags = 0);
+
+        // The CUDA version (e.g. 5.0 -> 5000).
+        int version() const;
+
+        // Returns the number of devices in the CUDA platform.
+        size_t size() const;
+
+        // Returns a vector of all devices in the CUDA platform.
+        std::vector<Device> devices() const;
+
+        // Returns the name of the CUDA platform. (currently, "NVIDIA CUDA")
+        std::string getName() const;
+
+        // Return the maximum number of threads per block, that
+        // is supported by all devices on the platform.
+        //
+        // Hardware dependent.
+        // - Returns at least 512 (except for ancient hardware)
+        // - Returns 1024 for K10 (= Cobalt hardware)
+        unsigned getMaxThreadsPerBlock() const;
+      };
+
+      // Wrap a CUDA Device.
+      class Device
+      {
+      public:
+        // Create a device.
+        // \param ordinal is the device number;
+        //        valid range: [0, Platform.size()-1]
+        Device(int ordinal = 0);
+
+        // Order Devices by PCI ID (used in std::sort)
+        bool operator<(const Device &other) const;
+
+        // Return the name of the device in human readable form.
+        std::string getName() const;
+
+        // Return the compute capability (major)
+        unsigned getComputeCapabilityMajor() const;
+
+        // Return the compute capability (minor)
+        unsigned getComputeCapabilityMinor() const;
+
+        // Return the total amount of global memory, in bytes
+        size_t getTotalGlobalMem() const;
+
+        // Return the maximum amount of shared memory per block
+        size_t getBlockSharedMem() const;
+
+        // Return the total amount of constant memory
+        size_t getTotalConstMem() const;
+
+        // Return the PCI ID (bus:device) of this GPU
+        std::string pciId() const;
+
+        // Return the maximum number of threads per block
+        //
+        // Hardware dependent.
+        // - Returns at least 512 (except for ancient hardware)
+        // - Returns 1024 for K10 (= Cobalt hardware)
+        unsigned getMaxThreadsPerBlock() const;
+
+        // Return the maximum dimensions of a block of threads.
+        struct Block getMaxBlockDims() const;
+
+        // Return the maximum dimensions of a grid of blocks.
+        struct Grid getMaxGridDims() const;
+
+        // Return the number of multi-processors.
+        unsigned getMultiProcessorCount() const;
+
+        // Return the maximum number of threads that can be
+        // resident on a multi-processor.
+        unsigned getMaxThreadsPerMultiProcessor() const;
+
+        // Return information on a specific \a attribute.
+        // \param attribute CUDA device attribute
+        int getAttribute(CUdevice_attribute attribute) const;
+
+      private:
+        // Context needs access to our \c _device to create a context.
+        friend class Context;
+
+        // The CUDA device.
+        CUdevice _device;
+      };
+
+
+      // Wrap a CUDA Context. Since this class manages a resource (a CUDA
+      // context), it uses the pimpl idiom in combination with a reference
+      // counted pointer to make it copyable.
+      //
+      // We do not tie any context to any thread by default -- all contexts
+      // are `floating', and are to be tied to a thread only by pushing them
+      // as the current context, performing operation(s), and popping them
+      // from the current context stack. The pushing and popping is automated
+      // in the ScopedCurrentContext class.
+      class Context
+      {
+      public:
+        // Create a new CUDA context and associate it with the calling thread.
+        // In other words, \c setCurrent() is implied.
+        //
+        // Flags:
+
+        //    CU_CTX_SCHED_AUTO:
+        //        The default value if the flags parameter is zero, uses a
+        //        heuristic based on the number of active CUDA contexts in the
+        //        process C and the number of logical processors in the system P.
+        //        If C > P, then CUDA will yield to other OS threads when waiting
+        //        for the GPU, otherwise CUDA will not yield while waiting for
+        //        results and actively spin on the processor.
+        //    CU_CTX_SCHED_SPIN:
+        //        Instruct CUDA to actively spin when waiting for results from the GPU.
+        //        This can decrease latency when waiting for the GPU, but may lower
+        //        the performance of CPU threads if they are performing work in parallel
+        //        with the CUDA thread.
+        //    CU_CTX_SCHED_YIELD:
+        //        Instruct CUDA to yield its thread when waiting for results from the GPU.
+        //        This can increase latency when waiting for the GPU, but can increase
+        //        the performance of CPU threads performing work in parallel with the GPU.
+        //    CU_CTX_SCHED_BLOCKING_SYNC:
+        //        Instruct CUDA to block the CPU thread on a synchronization primitive
+        //        when waiting for the GPU to finish work.
+        Context(const Device &device, unsigned int flags = CU_CTX_SCHED_YIELD);
+
+        // Returns the device associated to this context.
+        Device getDevice() const;
+
+        // Set the cache configuration for kernel launches in this context.
+        void setCacheConfig(CUfunc_cache config) const;
+
+        // Set the shared memory configuration for kernel launches in this context.
+        void setSharedMemConfig(CUsharedconfig config) const;
+
+      private:
+        // Non-copyable implementation class.
+        class Impl;
+
+        // Reference counted pointer to the implementation class.
+        boost::shared_ptr<Impl> _impl;
+
+        friend class ScopedCurrentContext;
+      };
+
+
+      // Make a certain context the current one for a certain scope.
+      class ScopedCurrentContext
+      {
+      public:
+        ScopedCurrentContext( const Context &context );
+        ~ScopedCurrentContext();
+
+      private:
+        const Context &_context;
+      };
+
+
+      // Wrap CUDA Host Memory. This is the equivalent of a OpenCL Buffer. CUDA
+      // distinguishes between between host- and device memory, OpenCL does not.
+      class HostMemory
+      {
+      public:
+        // Allocate \a size bytes of host memory.
+        // \param context CUDA context associated with this HostMemory object.
+        // \param size number of bytes to allocate
+        // \param flags affect allocation
+        // \note To create pinned memory, we need to set
+        // \code
+        // flags = CU_MEMHOSTALLOC_PORTABLE
+        // \endcode
+        // \note For input buffers we may consider setting
+        // \code
+        // flags = CU_MEMHOSTALLOC_PORTABLE | CU_MEMHOSTALLOC_WRITECOMBINED
+        // \endcode
+        // Please refer to the documentation of the function \c cuMemHostAlloc()
+        // in the CUDA Driver API for details.
+        HostMemory(const Context &context, size_t size, unsigned int flags = 0);
+
+        // Return a pointer to the actual memory.
+        // \warning The returned pointer shall not have a lifetime beyond the
+        // lifetime of this object (actually the last copy).
+        template <typename T>
+        T *get() const;
+
+        // Return the size of this memory block.
+        size_t size() const;
+
+      private:
+        // Get a void pointer to the actual memory from our Impl class. This
+        // method is only used by our templated get() method.
+        void* getPtr() const;
+
+        // Non-copyable implementation class.
+        class Impl;
+
+        // Reference counted pointer to the implementation class.
+        boost::shared_ptr<Impl> _impl;
+      };
+
+
+      // Wrap CUDA Device Memory. This is the equivalent of an OpenCL
+      // Buffer. CUDA distinguishes between between host- and device memory,
+      // OpenCL does not.
+      class DeviceMemory
+      {
+      public:
+        // Allocate \a size bytes of device memory.
+        DeviceMemory(const Context &context, size_t size);
+
+        // Return a device pointer as a handle to the memory.
+        void *get() const;
+
+        // Fill the first \a n bytes of memory with the constant byte \a uc.
+        // \param uc Constant byte value to put into memory
+        // \param n  Number of bytes to set. Defaults to the complete block.
+        //           If \a n is larger than the current memory block size, then
+        //           the complete block will be set to \a uc.
+        void set(unsigned char uc, size_t n = (size_t)-1) const;
+
+        // Return the size of this memory block.
+        size_t size() const;
+
+        // Fetch the contents of this buffer in a new HostMemory buffer.
+        HostMemory fetch() const;
+
+      private:
+        // Function needs access to our device ptr location to set this as a kernel arg.
+        friend class Function;
+
+        // Non-copyable implementation class.
+        class Impl;
+
+        // Reference counted pointer to the implementation class.
+        boost::shared_ptr<Impl> _impl;
+      };
+
+
+      // Wrap a CUDA Module. This is the equivalent of a OpenCL Program.
+      class Module
+      {
+      public:
+        typedef std::map<CUjit_option, void*> optionmap_t;
+
+        Module(); // TODO: tmp, as long as CorrelatorPipelinePrograms needs a default init
+
+        // Load the module in the file \a fname into the given \a context. The
+        // file should be a \e cubin file or a \e ptx file as output by \c nvcc.
+        // \param context CUDA context associated with this Module object.
+        // \param fname name of a module file
+        // \note For details, please refer to the documentation of \c
+        // cuModuleLoad in the CUDA Driver API.
+        Module(const Context &context, const std::string &fname);
+
+        // Load the module pointed to by \a image into the given \a context. The
+        // pointer may point to a null-terminated string containing \e cubin or
+        // \e ptx code.
+        // \param context CUDA context associated with this Module object.
+        // \param image pointer to a module image in memory
+        // \note For details, please refer to the documentation of \c
+        // cuModuleLoadData in the CUDA Driver API.
+        Module(const Context &context, const void *image);
+
+        // Load the module pointed to by \a image into the given \a context. The
+        // pointer may point to a null-terminated string containing \e cubin or
+        // \e ptx code.
+        // \param context CUDA context associated with this Module object.
+        // \param image pointer to a module image in memory
+        // \param options map of \c CUjit_option items, with their associated
+        // values.
+        // \note All values are cast to void*, so if an option requires
+        // an unsigned int as value, the unsigned int's value itself is cast to void*!
+        // \note For details, please refer to the documentation of \c
+        // cuModuleLoadDataEx in the CUDA Driver API.
+        Module(const Context &context, const void *image, optionmap_t &options);
+
+        // Return the Context in which this Module was created.
+        Context getContext() const;
+
+      private:
+        // Function needs access to our module to create a function.
+        friend class Function;
+
+        // Non-copyable implementation class.
+        class Impl;
+
+        // Reference counted pointer to the implementation class.
+        boost::shared_ptr<Impl> _impl;
+      };
+
+      // Wrap a CUDA Device Function. This is the equivalent of an OpenCL
+      // Program.
+      class Function
+      {
+      public:
+        // Construct a function object by looking up the function \a name in the
+        // module \a module.
+        Function(const Module &module, const std::string &name);
+
+        // Return the name of the function.
+        std::string name() const;
+
+        // Set kernel immediate argument number \a index to \a val.
+        // \a val must outlive kernel execution.
+        // Not for device memory objects (be it as DeviceMemory or as void *).
+        template <typename T>
+        void setArg(size_t index, const T &val);
+
+        // Set kernel DeviceMemory object argument number \a index to \a mem.
+        // \a mem must outlive kernel execution.
+        void setArg(size_t index, const DeviceMemory &mem);
+
+        // Set pointer to kernel device memory object (as void *) number \a index
+        // to \a val. \a *val must outlive kernel execution.
+        // Note: Prefer to use setArg() passing a DeviceMemory ref over this overload.
+        void setArg(size_t index, const void **val);
+
+        // Return information about a function.
+        // \note For details on valid values for \a attribute, please refer to
+        // the documentation of cuFuncGetAttribute in the CUDA Driver API.
+        int getAttribute(CUfunction_attribute attribute) const;
+
+        // Set the shared memory configuration for a device function.
+        // \note For details on valid values for \a config, please refer to the
+        // documentation of cuFuncSetSharedMemConfig in the CUDA Driver API.
+        void setSharedMemConfig(CUsharedconfig config) const;
+
+      protected:
+        const Context _context;
+
+      private:
+        // Keep the Module alive, because Function actually wraps a pointer
+        // to a function within the Module.
+        const Module _module;
+
+        // The name of the function, for error reporting purposes
+        const std::string _name;
+
+        // Stream needs access to our CUDA function to launch a kernel.
+        friend class Stream;
+
+        // CUDA function.
+        CUfunction _function;
+
+        // Function arguments as set.
+        std::vector<const void *> _kernelArgs;
+
+        // Helper function to modify _kernelArgs.
+        void doSetArg(size_t index, const void *argp);
+
+        // Do not use. To guard against passing pointers.
+        // Note that even device void * cannot be passed, because we need its
+        // address with a life time longer than this formal parameter.
+        template<typename T>
+        void setArg(size_t index, const T *&); // intentionally not impl.
+
+        // Do not use. To guard against passing HostMemory references to kernels.
+        void setArg(size_t index, const HostMemory &); // intentionally not impl.
+
+        // Do not use. To guard against passing HostMemory pointers to kernels.
+        void setArg(size_t index, const HostMemory *); // intentionally not impl.
+      };
+
+      // Wrap a CUDA Event. This is the equivalent of an OpenCL Event.
+      class Event
+      {
+      public:
+        // Construct a CUDA event. This class manages a resource (a CUDA event)
+        // and is therefore implemented using the pimpl idiom, using a reference
+        // counted pointer to a non-copyable implementation class.
+        // \note For details on valid values for \a flags, please refer to the
+        // documentation of cuEventCreate in the CUDA Driver API.
+        Event(const Context &context, unsigned int flags = CU_EVENT_DEFAULT);
+
+        // Return the elapsed time in milliseconds between this event and the \a
+        // second event.
+        float elapsedTime(Event &second) const;
+
+        // Wait until all work preceding this event in the same stream has
+        // completed.
+        void wait();
+
+      private:
+        // Stream needs access to our CUDA event to wait for and record events.
+        friend class Stream;
+
+        // Non-copyable implementation class.
+        class Impl;
+
+        // Reference counted pointer to the implementation class.
+        boost::shared_ptr<Impl> _impl;
+      };
+
+
+      // Wrap a CUDA Stream. This is the equivalent of an OpenCL
+      // CommandQueue. This class manages a resource (a CUDA stream) and is
+      // therefore implemented using the pimpl idiom, using a reference counted
+      // pointer to a non-copyable implementation class.
+      class Stream
+      {
+      public:
+        // Create a stream.
+        // \param flags must be 0 for CUDA < 5.0
+        // \param context CUDA context associated with this Stream object.
+        // \note For details on valid values for \a flags, please refer to the
+        // documentation of \c cuStreamCreate in the CUDA Driver API.
+        explicit Stream(const Context &context, unsigned int flags = 0);  // named CU_STREAM_DEFAULT (0) since CUDA 5.0
+
+        // Transfer data from host memory \a hostMem to device memory \a devMem.
+        // \param devMem Device memory that will be copied to.
+        // \param hostMem Host memory that will be copied from.
+        // \param synchronous Indicates whether the transfer must be done
+        //        synchronously or asynchronously.
+        void writeBuffer(const DeviceMemory &devMem, const HostMemory &hostMem,
+                         bool synchronous = false) const;
+
+        // Transfer data from host memory \a hostMem to device memory \a devMem.
+        // When gpuProfiling is enabled this transfer is synchronous
+        // \param devMem Device memory that will be copied to.
+        // \param hostMem Host memory that will be copied from.
+        // \param counter PerformanceCounter that will receive transfer duration
+        // if  gpuProfiling is enabled
+        // \param synchronous Indicates whether the transfer must be done
+        //        synchronously or asynchronously. Default == false
+        void writeBuffer(const DeviceMemory &devMem, const HostMemory &hostMem,
+                         PerformanceCounter &counter, bool synchronous = false) const;
+
+        // Transfer data from device memory \a devMem to host memory \a hostMem.
+        // \param hostMem Host memory that will be copied to.
+        // \param devMem Device memory that will be copied from.
+        // \param synchronous Indicates whether the transfer must be done
+        //        synchronously or asynchronously.
+        void readBuffer(const HostMemory &hostMem, const DeviceMemory &devMem,
+                        bool synchronous = false) const;
+
+        // Transfer data from device memory \a devMem to host memory \a hostMem.
+        // When gpuProfiling is enabled this transfer is synchronous
+        // \param hostMem Host memory that will be copied to.
+        // \param devMem Device memory that will be copied from.
+        // \param counter PerformanceCounter that will receive transfer duration
+        // if  gpuProfiling is enabled
+        // \param synchronous Indicates whether the transfer must be done
+        //        synchronously or asynchronously. Default == false
+        void readBuffer(const HostMemory &hostMem, const DeviceMemory &devMem,
+                        PerformanceCounter &counter, bool synchronous = false) const;
+
+        // Transfer data from device memory \a devSource to device memory \a devTarget.
+        // \param devTarget Device memory that will be copied to.
+        // \param devSource Device memory that will be copied from.
+        // \param synchronous Indicates whether the transfer must be done
+        //        synchronously or asynchronously.
+        void copyBuffer(const DeviceMemory &devTarget, const DeviceMemory &devSource,
+                        bool synchronous = false) const;
+
+        // Transfer data from device memory \a devSource to device memory \a devTarget.
+        // When gpuProfiling is enabled this transfer is synchronous
+        // \param devTarget Device memory that will be copied to.
+        // \param devSource Device memory that will be copied from.
+        // \param counter PerformanceCounter that will receive transfer duration
+        //        if gpuProfiling is enabled
+        // \param synchronous Indicates whether the transfer must be done
+        //        synchronously or asynchronously. Defaults to \c false
+        //        (asynchronously).
+        void copyBuffer(const DeviceMemory &devTarget, const DeviceMemory &devSource,
+                        PerformanceCounter &counter, bool synchronous = false) const;
+
+        // Launch a CUDA function.
+        // \param function object containing the function to launch
+        // \param grid Grid size (in terms of blocks (not threads (OpenCL)))
+        // \param block Block (thread group) size
+        void launchKernel(const Function &function,
+                          const Grid &grid, const Block &block) const;
+
+        // Check if all operations on this stream have completed.
+        // \return true if all completed, or false otherwise.
+        bool query() const;
+
+        // Wait until a this stream's tasks are completed.
+        void synchronize() const;
+
+        // Let this stream wait on the event \a event.
+        void waitEvent(const Event &event) const;
+
+        // Record the event \a event for this stream.
+        void recordEvent(const Event &event) const;
+
+        // Return the underlying CUDA stream. TODO: try to get rid of CUstream here: FFT thing to here or make it friend
+        CUstream get() const;
+
+        // Returns the context associated with the underlying CUDA stream.
+        Context getContext() const; // TODO: consider using this in the SubbandProcs (now has Stream and Context stored)
+
+        // Return whether this stream mandates synchronous behaviour
+        bool isSynchronous() const;
+
+      private:
+        // Non-copyable implementation class.
+        class Impl;
+
+        // Reference counted pointer to the implementation class.
+        boost::shared_ptr<Impl> _impl;
+
+        // Force synchronous transfers and kernel launches
+        bool force_synchronous;
+      };
+
+    } // namespace gpu
+  } // namespace Cobalt
+} // namespace LOFAR
+
+#include "gpu_wrapper.tcc"
 
 #endif
 
diff --git a/RTCP/Cobalt/GPUProc/src/cuda/gpu_wrapper.tcc b/RTCP/Cobalt/GPUProc/src/gpu_wrapper.tcc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/cuda/gpu_wrapper.tcc
rename to RTCP/Cobalt/GPUProc/src/gpu_wrapper.tcc
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl
deleted file mode 100644
index aec27fa0e5f7f87406b08be5c7100a9415fe18d9..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl
+++ /dev/null
@@ -1,557 +0,0 @@
-//# BeamFormer.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#define MAX(A,B) ((A)>(B) ? (A) : (B))
-#define NR_PASSES MAX((NR_STATIONS + 6) / 16, 1) // gives best results on GTX 680
-#define NR_STATIONS_PER_PASS ((NR_STATIONS + NR_PASSES - 1) / NR_PASSES)
-
-#if NR_STATIONS_PER_PASS > 32
-#error "need more passes to beam form this number of stations"
-#endif
-
-
-typedef __global float2 (*ComplexVoltagesType)[NR_CHANNELS][NR_SAMPLES_PER_CHANNEL][NR_TABS][NR_POLARIZATIONS];
-typedef __global float4 (*BandPassCorrectedType)[NR_STATIONS][NR_CHANNELS][NR_SAMPLES_PER_CHANNEL];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_CHANNELS][NR_TABS];
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *samplesPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  BandPassCorrectedType samples = (BandPassCorrectedType) samplesPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint pol = get_local_id(0);
-  uint tab = get_local_id(1);
-  uint channel = get_global_id(2);
-
-  float2 sample;
-  __local union {
-    float2 samples[NR_STATIONS_PER_PASS][16][NR_POLARIZATIONS];
-    float4 samples4[NR_STATIONS_PER_PASS][16];
-  } _local;
-
-#pragma unroll
-  for (uint first_station = 0; first_station < NR_STATIONS; first_station += NR_STATIONS_PER_PASS) {
-#if NR_STATIONS_PER_PASS >= 1
-    float2 weight_00;
-
-    if (first_station + 0 < NR_STATIONS)
-      weight_00 = (*weights)[first_station + 0][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 2
-    float2 weight_01;
-
-    if (first_station + 1 < NR_STATIONS)
-      weight_01 = (*weights)[first_station + 1][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 3
-    float2 weight_02;
-
-    if (first_station + 2 < NR_STATIONS)
-      weight_02 = (*weights)[first_station + 2][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 4
-    float2 weight_03;
-
-    if (first_station + 3 < NR_STATIONS)
-      weight_03 = (*weights)[first_station + 3][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 5
-    float2 weight_04;
-
-    if (first_station + 4 < NR_STATIONS)
-      weight_04 = (*weights)[first_station + 4][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 6
-    float2 weight_05;
-
-    if (first_station + 5 < NR_STATIONS)
-      weight_05 = (*weights)[first_station + 5][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 7
-    float2 weight_06;
-
-    if (first_station + 6 < NR_STATIONS)
-      weight_06 = (*weights)[first_station + 6][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 8
-    float2 weight_07;
-
-    if (first_station + 7 < NR_STATIONS)
-      weight_07 = (*weights)[first_station + 7][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 9
-    float2 weight_08;
-
-    if (first_station + 8 < NR_STATIONS)
-      weight_08 = (*weights)[first_station + 8][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 10
-    float2 weight_09;
-
-    if (first_station + 9 < NR_STATIONS)
-      weight_09 = (*weights)[first_station + 9][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 11
-    float2 weight_10;
-
-    if (first_station + 10 < NR_STATIONS)
-      weight_10 = (*weights)[first_station + 10][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 12
-    float2 weight_11;
-
-    if (first_station + 11 < NR_STATIONS)
-      weight_11 = (*weights)[first_station + 11][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 13
-    float2 weight_12;
-
-    if (first_station + 12 < NR_STATIONS)
-      weight_12 = (*weights)[first_station + 12][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 14
-    float2 weight_13;
-
-    if (first_station + 13 < NR_STATIONS)
-      weight_13 = (*weights)[first_station + 13][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 15
-    float2 weight_14;
-
-    if (first_station + 14 < NR_STATIONS)
-      weight_14 = (*weights)[first_station + 14][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 16
-    float2 weight_15;
-
-    if (first_station + 15 < NR_STATIONS)
-      weight_15 = (*weights)[first_station + 15][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 17
-    float2 weight_16;
-
-    if (first_station + 16 < NR_STATIONS)
-      weight_16 = (*weights)[first_station + 16][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 18
-    float2 weight_17;
-
-    if (first_station + 17 < NR_STATIONS)
-      weight_17 = (*weights)[first_station + 17][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 19
-    float2 weight_18;
-
-    if (first_station + 18 < NR_STATIONS)
-      weight_18 = (*weights)[first_station + 18][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 20
-    float2 weight_19;
-
-    if (first_station + 19 < NR_STATIONS)
-      weight_19 = (*weights)[first_station + 19][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 21
-    float2 weight_20;
-
-    if (first_station + 20 < NR_STATIONS)
-      weight_20 = (*weights)[first_station + 20][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 22
-    float2 weight_21;
-
-    if (first_station + 21 < NR_STATIONS)
-      weight_21 = (*weights)[first_station + 21][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 23
-    float2 weight_22;
-
-    if (first_station + 22 < NR_STATIONS)
-      weight_22 = (*weights)[first_station + 22][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 24
-    float2 weight_23;
-
-    if (first_station + 23 < NR_STATIONS)
-      weight_23 = (*weights)[first_station + 23][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 25
-    float2 weight_24;
-
-    if (first_station + 24 < NR_STATIONS)
-      weight_24 = (*weights)[first_station + 24][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 26
-    float2 weight_25;
-
-    if (first_station + 25 < NR_STATIONS)
-      weight_25 = (*weights)[first_station + 25][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 27
-    float2 weight_26;
-
-    if (first_station + 26 < NR_STATIONS)
-      weight_26 = (*weights)[first_station + 26][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 28
-    float2 weight_27;
-
-    if (first_station + 27 < NR_STATIONS)
-      weight_27 = (*weights)[first_station + 27][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 29
-    float2 weight_28;
-
-    if (first_station + 28 < NR_STATIONS)
-      weight_28 = (*weights)[first_station + 28][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 30
-    float2 weight_29;
-
-    if (first_station + 29 < NR_STATIONS)
-      weight_29 = (*weights)[first_station + 29][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 31
-    float2 weight_30;
-
-    if (first_station + 30 < NR_STATIONS)
-      weight_30 = (*weights)[first_station + 30][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 32
-    float2 weight_31;
-
-    if (first_station + 31 < NR_STATIONS)
-      weight_31 = (*weights)[first_station + 31][channel][tab];
-#endif
-
-    for (uint time = 0; time < NR_SAMPLES_PER_CHANNEL; time += 16) {
-      for (uint i = get_local_id(0) + NR_POLARIZATIONS * get_local_id(1); i < NR_STATIONS_PER_PASS * 16; i += NR_TABS * NR_POLARIZATIONS) {
-        uint t = i % 16;
-        uint s = i / 16;
-
-        if (NR_SAMPLES_PER_CHANNEL % 16 == 0 || time + t < NR_SAMPLES_PER_CHANNEL)
-          if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + s < NR_STATIONS)
-            _local.samples4[0][i] = convert_float4((*samples)[first_station + s][channel][time + t]);
-      }
-
-      barrier(CLK_LOCAL_MEM_FENCE);
-
-      for (uint t = 0; t < (NR_SAMPLES_PER_CHANNEL % 16 == 0 ? 16 : min(16U, NR_SAMPLES_PER_CHANNEL - time)); t++) {
-        float2 sum = first_station == 0 ? 0 : (*complexVoltages)[channel][time + t][tab][pol];
-
-#if NR_STATIONS_PER_PASS >= 1
-        if (first_station + 1 < NR_STATIONS) {
-          sample = _local.samples[ 0][t][pol];
-          sum += weight_00.xx * sample;
-          sum += weight_00.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 2
-        if (first_station + 2 < NR_STATIONS) {
-          sample = _local.samples[ 1][t][pol];
-          sum += weight_01.xx * sample;
-          sum += weight_01.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 3
-        if (first_station + 3 < NR_STATIONS) {
-          sample = _local.samples[ 2][t][pol];
-          sum += weight_02.xx * sample;
-          sum += weight_02.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 4
-        if (first_station + 4 < NR_STATIONS) {
-          sample = _local.samples[ 3][t][pol];
-          sum += weight_03.xx * sample;
-          sum += weight_03.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 5
-        if (first_station + 5 < NR_STATIONS) {
-          sample = _local.samples[ 4][t][pol];
-          sum += weight_04.xx * sample;
-          sum += weight_04.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 6
-        if (first_station + 6 < NR_STATIONS) {
-          sample = _local.samples[ 5][t][pol];
-          sum += weight_05.xx * sample;
-          sum += weight_05.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 7
-        if (first_station + 7 < NR_STATIONS) {
-          sample = _local.samples[ 6][t][pol];
-          sum += weight_06.xx * sample;
-          sum += weight_06.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 8
-        if (first_station + 8 < NR_STATIONS) {
-          sample = _local.samples[ 7][t][pol];
-          sum += weight_07.xx * sample;
-          sum += weight_07.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 9
-        if (first_station + 9 < NR_STATIONS) {
-          sample = _local.samples[ 8][t][pol];
-          sum += weight_08.xx * sample;
-          sum += weight_08.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 10
-        if (first_station + 10 < NR_STATIONS) {
-          sample = _local.samples[ 9][t][pol];
-          sum += weight_09.xx * sample;
-          sum += weight_09.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 11
-        if (first_station + 11 < NR_STATIONS) {
-          sample = _local.samples[10][t][pol];
-          sum += weight_10.xx * sample;
-          sum += weight_10.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 12
-        if (first_station + 12 < NR_STATIONS) {
-          sample = _local.samples[11][t][pol];
-          sum += weight_11.xx * sample;
-          sum += weight_11.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 13
-        if (first_station + 13 < NR_STATIONS) {
-          sample = _local.samples[12][t][pol];
-          sum += weight_12.xx * sample;
-          sum += weight_12.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 14
-        if (first_station + 14 < NR_STATIONS) {
-          sample = _local.samples[13][t][pol];
-          sum += weight_13.xx * sample;
-          sum += weight_13.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 15
-        if (first_station + 15 < NR_STATIONS) {
-          sample = _local.samples[14][t][pol];
-          sum += weight_14.xx * sample;
-          sum += weight_14.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 16
-        if (first_station + 15 < NR_STATIONS) {
-          sample = _local.samples[15][t][pol];
-          sum += weight_15.xx * sample;
-          sum += weight_15.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 17
-        if (first_station + 16 < NR_STATIONS) {
-          sample = _local.samples[16][t][pol];
-          sum += weight_16.xx * sample;
-          sum += weight_16.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 18
-        if (first_station + 17 < NR_STATIONS) {
-          sample = _local.samples[17][t][pol];
-          sum += weight_17.xx * sample;
-          sum += weight_17.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 19
-        if (first_station + 18 < NR_STATIONS) {
-          sample = _local.samples[18][t][pol];
-          sum += weight_18.xx * sample;
-          sum += weight_18.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 20
-        if (first_station + 19 < NR_STATIONS) {
-          sample = _local.samples[19][t][pol];
-          sum += weight_19.xx * sample;
-          sum += weight_19.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 21
-        if (first_station + 20 < NR_STATIONS) {
-          sample = _local.samples[20][t][pol];
-          sum += weight_20.xx * sample;
-          sum += weight_20.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 22
-        if (first_station + 21 < NR_STATIONS) {
-          sample = _local.samples[21][t][pol];
-          sum += weight_21.xx * sample;
-          sum += weight_21.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 23
-        if (first_station + 22 < NR_STATIONS) {
-          sample = _local.samples[22][t][pol];
-          sum += weight_22.xx * sample;
-          sum += weight_22.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 24
-        if (first_station + 23 < NR_STATIONS) {
-          sample = _local.samples[23][t][pol];
-          sum += weight_23.xx * sample;
-          sum += weight_23.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 25
-        if (first_station + 25 < NR_STATIONS) {
-          sample = _local.samples[24][t][pol];
-          sum += weight_24.xx * sample;
-          sum += weight_24.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 26
-        if (first_station + 25 < NR_STATIONS) {
-          sample = _local.samples[25][t][pol];
-          sum += weight_25.xx * sample;
-          sum += weight_25.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 27
-        if (first_station + 26 < NR_STATIONS) {
-          sample = _local.samples[26][t][pol];
-          sum += weight_26.xx * sample;
-          sum += weight_26.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 28
-        if (first_station + 27 < NR_STATIONS) {
-          sample = _local.samples[27][t][pol];
-          sum += weight_27.xx * sample;
-          sum += weight_27.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 29
-        if (first_station + 28 < NR_STATIONS) {
-          sample = _local.samples[28][t][pol];
-          sum += weight_28.xx * sample;
-          sum += weight_28.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 30
-        if (first_station + 29 < NR_STATIONS) {
-          sample = _local.samples[29][t][pol];
-          sum += weight_29.xx * sample;
-          sum += weight_29.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 31
-        if (first_station + 30 < NR_STATIONS) {
-          sample = _local.samples[30][t][pol];
-          sum += weight_30.xx * sample;
-          sum += weight_30.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 32
-        if (first_station + 31 < NR_STATIONS) {
-          sample = _local.samples[31][t][pol];
-          sum += weight_31.xx * sample;
-          sum += weight_31.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-        (*complexVoltages)[channel][time + t][tab][pol] = sum;
-      }
-
-      barrier(CLK_LOCAL_MEM_FENCE);
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.4x3 b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.4x3
deleted file mode 100644
index 3570e6598cb798d479e9381a2f00d4b170471fac..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.4x3
+++ /dev/null
@@ -1,118 +0,0 @@
-#define NR_CHANNELS_PER_BLOCK   4
-
-
-typedef __global float4 (*ComplexVoltagesType)[NR_TABS][NR_SAMPLES_PER_INTEGRATION][NR_CHANNELS];
-//typedef __global float4 (*CorrectedDataType)[NR_STATIONS][NR_CHANNELS][NR_SAMPLES_PER_INTEGRATION];
-typedef __global float4 (*CorrectedDataType)[NR_STATIONS][NR_SAMPLES_PER_INTEGRATION][NR_CHANNELS];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_CHANNELS][NR_TABS];
-
-float2 cmul(float2 a, float2 b)
-{
-  return (float2) { a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x };
-}
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *correctedDataPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint first_tab = 3 * get_global_id(0);
-  uint channel = get_global_id(1);
-  uint first_station = 4 * get_global_id(2);
-
-  float2 weight_0_0 = (*weights)[first_station + 0][channel][first_tab + 0];
-  float2 weight_0_1 = (*weights)[first_station + 0][channel][first_tab + 1];
-  float2 weight_0_2 = (*weights)[first_station + 0][channel][first_tab + 2];
-  float2 weight_1_0 = (*weights)[first_station + 1][channel][first_tab + 0];
-  float2 weight_1_1 = (*weights)[first_station + 1][channel][first_tab + 1];
-  float2 weight_1_2 = (*weights)[first_station + 1][channel][first_tab + 2];
-  float2 weight_2_0 = (*weights)[first_station + 2][channel][first_tab + 0];
-  float2 weight_2_1 = (*weights)[first_station + 2][channel][first_tab + 1];
-  float2 weight_2_2 = (*weights)[first_station + 2][channel][first_tab + 2];
-  float2 weight_3_0 = (*weights)[first_station + 3][channel][first_tab + 0];
-  float2 weight_3_1 = (*weights)[first_station + 3][channel][first_tab + 1];
-  float2 weight_3_2 = (*weights)[first_station + 3][channel][first_tab + 2];
-
-  __local float4 local_sums[3][NR_STATIONS / 4][NR_CHANNELS_PER_BLOCK][NR_TABS / 3];
-
-  for (int time = 0 - first_station / 4; time < NR_SAMPLES_PER_INTEGRATION + NR_STATIONS - first_station / 4; time++) {
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    float4 sum_0, sum_1, sum_2;
-
-    if (first_station == 0) {
-      sum_0 = sum_1 = sum_2 = (float4) { 0, 0, 0, 0 };
-    } else {
-      sum_0 = local_sums[0][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-      sum_1 = local_sums[1][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-      sum_2 = local_sums[2][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-    }
-
-    float4 sample_0 = (*correctedData)[first_station + 0][time][channel];
-    float4 sample_1 = (*correctedData)[first_station + 1][time][channel];
-    float4 sample_2 = (*correctedData)[first_station + 2][time][channel];
-    float4 sample_3 = (*correctedData)[first_station + 3][time][channel];
-
-    sum_0 += weight_0_0.xxxx * sample_0;
-    sum_1 += weight_0_1.xxxx * sample_0;
-    sum_2 += weight_0_2.xxxx * sample_0;
-    sum_0 += weight_0_1.yyyy * (float4) { -sample_0.y, sample_0.x, -sample_0.w, sample_0.z };
-    sum_1 += weight_0_1.yyyy * (float4) { -sample_0.y, sample_0.x, -sample_0.w, sample_0.z };
-    sum_2 += weight_0_1.yyyy * (float4) { -sample_0.y, sample_0.x, -sample_0.w, sample_0.z };
-
-    sum_0 += weight_1_0.xxxx * sample_1;
-    sum_1 += weight_1_1.xxxx * sample_1;
-    sum_2 += weight_1_2.xxxx * sample_1;
-    sum_0 += weight_1_1.yyyy * (float4) { -sample_1.y, sample_1.x, -sample_1.w, sample_1.z };
-    sum_1 += weight_1_1.yyyy * (float4) { -sample_1.y, sample_1.x, -sample_1.w, sample_1.z };
-    sum_2 += weight_1_1.yyyy * (float4) { -sample_1.y, sample_1.x, -sample_1.w, sample_1.z };
-
-    sum_0 += weight_2_0.xxxx * sample_2;
-    sum_1 += weight_2_1.xxxx * sample_2;
-    sum_2 += weight_2_2.xxxx * sample_2;
-    sum_0 += weight_2_1.yyyy * (float4) { -sample_2.y, sample_2.x, -sample_2.w, sample_2.z };
-    sum_1 += weight_2_1.yyyy * (float4) { -sample_2.y, sample_2.x, -sample_2.w, sample_2.z };
-    sum_2 += weight_2_1.yyyy * (float4) { -sample_2.y, sample_2.x, -sample_2.w, sample_2.z };
-
-    sum_0 += weight_3_0.xxxx * sample_3;
-    sum_1 += weight_3_1.xxxx * sample_3;
-    sum_2 += weight_3_2.xxxx * sample_3;
-    sum_0 += weight_3_1.yyyy * (float4) { -sample_3.y, sample_3.x, -sample_3.w, sample_3.z };
-    sum_1 += weight_3_1.yyyy * (float4) { -sample_3.y, sample_3.x, -sample_3.w, sample_3.z };
-    sum_2 += weight_3_1.yyyy * (float4) { -sample_3.y, sample_3.x, -sample_3.w, sample_3.z };
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (first_station + 4 < NR_STATIONS) {
-      local_sums[0][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_0;
-      local_sums[1][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_1;
-      local_sums[2][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_2;
-    } else if (time >= 0) {
-      (*complexVoltages)[first_tab + 0][time][channel] = sum_0;
-      (*complexVoltages)[first_tab + 1][time][channel] = sum_1;
-      (*complexVoltages)[first_tab + 2][time][channel] = sum_2;
-    }
-
-#if 0
-    local_complex_voltages[tab][local_time_or_channel] = sum;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    (*complexVoltages)[transposed_tab][start_time + local_time][transposed_channel] = local_complex_voltages[transposed_tab][transposed_channel];
-#elif defined STOKES_I || defined STOKES_IQUV
-    float powerX = sum.x * sum.x + sum.y * sum.y;
-    float powerY = sum.z * sum.z + sum.w * sum.w;
-
-    (*stokes)[tab][0][0][time_or_channel] = powerX + powerY;
-#if defined STOKES_IQUV
-    (*stokes)[tab][1][0][time_or_channel] = powerX - powerY;
-    (*stokes)[tab][2][0][time_or_channel] = 2 * (sum.x * sum.z + sum.y * sum.w);
-    (*stokes)[tab][3][0][time_or_channel] = 2 * (sum.y * sum.z - sum.x * sum.w);
-#endif
-#endif
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.6x3 b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.6x3
deleted file mode 100644
index e51aa78e3bcdece43cea17bff70e8ee19434ed62..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.6x3
+++ /dev/null
@@ -1,140 +0,0 @@
-#define NR_CHANNELS_PER_BLOCK   8
-
-
-typedef __global float4 (*ComplexVoltagesType)[NR_TABS][NR_SAMPLES_PER_INTEGRATION][NR_CHANNELS];
-//typedef __global float4 (*CorrectedDataType)[NR_STATIONS][NR_CHANNELS][NR_SAMPLES_PER_INTEGRATION];
-typedef __global float4 (*CorrectedDataType)[NR_STATIONS][NR_SAMPLES_PER_INTEGRATION][NR_CHANNELS];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_CHANNELS][NR_TABS];
-
-float2 cmul(float2 a, float2 b)
-{
-  return (float2) { a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x };
-}
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *correctedDataPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint first_tab = 3 * get_global_id(0);
-  uint channel = get_global_id(1);
-  uint first_station = 6 * get_global_id(2);
-
-  float2 weight_0_0 = (*weights)[first_station + 0][channel][first_tab + 0];
-  float2 weight_0_1 = (*weights)[first_station + 0][channel][first_tab + 1];
-  float2 weight_0_2 = (*weights)[first_station + 0][channel][first_tab + 2];
-  float2 weight_1_0 = (*weights)[first_station + 1][channel][first_tab + 0];
-  float2 weight_1_1 = (*weights)[first_station + 1][channel][first_tab + 1];
-  float2 weight_1_2 = (*weights)[first_station + 1][channel][first_tab + 2];
-  float2 weight_2_0 = (*weights)[first_station + 2][channel][first_tab + 0];
-  float2 weight_2_1 = (*weights)[first_station + 2][channel][first_tab + 1];
-  float2 weight_2_2 = (*weights)[first_station + 2][channel][first_tab + 2];
-  float2 weight_3_0 = (*weights)[first_station + 3][channel][first_tab + 0];
-  float2 weight_3_1 = (*weights)[first_station + 3][channel][first_tab + 1];
-  float2 weight_3_2 = (*weights)[first_station + 3][channel][first_tab + 2];
-  float2 weight_4_0 = (*weights)[first_station + 4][channel][first_tab + 0];
-  float2 weight_4_1 = (*weights)[first_station + 4][channel][first_tab + 1];
-  float2 weight_4_2 = (*weights)[first_station + 4][channel][first_tab + 2];
-  float2 weight_5_0 = (*weights)[first_station + 5][channel][first_tab + 0];
-  float2 weight_5_1 = (*weights)[first_station + 5][channel][first_tab + 1];
-  float2 weight_5_2 = (*weights)[first_station + 5][channel][first_tab + 2];
-
-  __local float4 local_sums[3][NR_STATIONS / 6][NR_CHANNELS_PER_BLOCK][NR_TABS / 3];
-
-  for (int time = 0 - first_station / 6; time < NR_SAMPLES_PER_INTEGRATION + NR_STATIONS - first_station / 6; time++) {
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    float4 sum_0, sum_1, sum_2;
-
-    if (first_station == 0) {
-      sum_0 = sum_1 = sum_2 = (float4) { 0, 0, 0, 0 };
-    } else {
-      sum_0 = local_sums[0][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-      sum_1 = local_sums[1][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-      sum_2 = local_sums[2][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-    }
-
-    float4 sample_0 = (*correctedData)[first_station + 0][time][channel];
-    float4 sample_1 = (*correctedData)[first_station + 1][time][channel];
-    float4 sample_2 = (*correctedData)[first_station + 2][time][channel];
-    float4 sample_3 = (*correctedData)[first_station + 3][time][channel];
-    float4 sample_4 = (*correctedData)[first_station + 4][time][channel];
-    float4 sample_5 = (*correctedData)[first_station + 5][time][channel];
-
-    sum_0 += weight_0_0.xxxx * sample_0;
-    sum_1 += weight_0_1.xxxx * sample_0;
-    sum_2 += weight_0_2.xxxx * sample_0;
-    sum_0 += weight_0_1.yyyy * (float4) { -sample_0.y, sample_0.x, -sample_0.w, sample_0.z };
-    sum_1 += weight_0_1.yyyy * (float4) { -sample_0.y, sample_0.x, -sample_0.w, sample_0.z };
-    sum_2 += weight_0_1.yyyy * (float4) { -sample_0.y, sample_0.x, -sample_0.w, sample_0.z };
-
-    sum_0 += weight_1_0.xxxx * sample_1;
-    sum_1 += weight_1_1.xxxx * sample_1;
-    sum_2 += weight_1_2.xxxx * sample_1;
-    sum_0 += weight_1_1.yyyy * (float4) { -sample_1.y, sample_1.x, -sample_1.w, sample_1.z };
-    sum_1 += weight_1_1.yyyy * (float4) { -sample_1.y, sample_1.x, -sample_1.w, sample_1.z };
-    sum_2 += weight_1_1.yyyy * (float4) { -sample_1.y, sample_1.x, -sample_1.w, sample_1.z };
-
-    sum_0 += weight_2_0.xxxx * sample_2;
-    sum_1 += weight_2_1.xxxx * sample_2;
-    sum_2 += weight_2_2.xxxx * sample_2;
-    sum_0 += weight_2_1.yyyy * (float4) { -sample_2.y, sample_2.x, -sample_2.w, sample_2.z };
-    sum_1 += weight_2_1.yyyy * (float4) { -sample_2.y, sample_2.x, -sample_2.w, sample_2.z };
-    sum_2 += weight_2_1.yyyy * (float4) { -sample_2.y, sample_2.x, -sample_2.w, sample_2.z };
-
-    sum_0 += weight_3_0.xxxx * sample_3;
-    sum_1 += weight_3_1.xxxx * sample_3;
-    sum_2 += weight_3_2.xxxx * sample_3;
-    sum_0 += weight_3_1.yyyy * (float4) { -sample_3.y, sample_3.x, -sample_3.w, sample_3.z };
-    sum_1 += weight_3_1.yyyy * (float4) { -sample_3.y, sample_3.x, -sample_3.w, sample_3.z };
-    sum_2 += weight_3_1.yyyy * (float4) { -sample_3.y, sample_3.x, -sample_3.w, sample_3.z };
-
-    sum_0 += weight_4_0.xxxx * sample_4;
-    sum_1 += weight_4_1.xxxx * sample_4;
-    sum_2 += weight_4_2.xxxx * sample_4;
-    sum_0 += weight_4_1.yyyy * (float4) { -sample_4.y, sample_4.x, -sample_4.w, sample_4.z };
-    sum_1 += weight_4_1.yyyy * (float4) { -sample_4.y, sample_4.x, -sample_4.w, sample_4.z };
-    sum_2 += weight_4_1.yyyy * (float4) { -sample_4.y, sample_4.x, -sample_4.w, sample_4.z };
-
-    sum_0 += weight_5_0.xxxx * sample_5;
-    sum_1 += weight_5_1.xxxx * sample_5;
-    sum_2 += weight_5_2.xxxx * sample_5;
-    sum_0 += weight_5_1.yyyy * (float4) { -sample_5.y, sample_5.x, -sample_5.w, sample_5.z };
-    sum_1 += weight_5_1.yyyy * (float4) { -sample_5.y, sample_5.x, -sample_5.w, sample_5.z };
-    sum_2 += weight_5_1.yyyy * (float4) { -sample_5.y, sample_5.x, -sample_5.w, sample_5.z };
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (first_station + 6 < NR_STATIONS) {
-      local_sums[0][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_0;
-      local_sums[1][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_1;
-      local_sums[2][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_2;
-    } else if (time >= 0) {
-      (*complexVoltages)[first_tab + 0][time][channel] = sum_0;
-      (*complexVoltages)[first_tab + 1][time][channel] = sum_1;
-      (*complexVoltages)[first_tab + 2][time][channel] = sum_2;
-    }
-
-#if 0
-    local_complex_voltages[tab][local_time_or_channel] = sum;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    (*complexVoltages)[transposed_tab][start_time + local_time][transposed_channel] = local_complex_voltages[transposed_tab][transposed_channel];
-#elif defined STOKES_I || defined STOKES_IQUV
-    float powerX = sum.x * sum.x + sum.y * sum.y;
-    float powerY = sum.z * sum.z + sum.w * sum.w;
-
-    (*stokes)[tab][0][0][time_or_channel] = powerX + powerY;
-#if defined STOKES_IQUV
-    (*stokes)[tab][1][0][time_or_channel] = powerX - powerY;
-    (*stokes)[tab][2][0][time_or_channel] = 2 * (sum.x * sum.z + sum.y * sum.w);
-    (*stokes)[tab][3][0][time_or_channel] = 2 * (sum.y * sum.z - sum.x * sum.w);
-#endif
-#endif
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.bak b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.bak
deleted file mode 100644
index 3e87f0c00d905bab678cab8903a588ba17a56880..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.bak
+++ /dev/null
@@ -1,536 +0,0 @@
-#define MAX(A,B) ((A)>(B) ? (A) : (B))
-#define NR_PASSES MAX((NR_STATIONS + 6) / 16, 1) // gives best results on GTX 680
-#define NR_STATIONS_PER_PASS ((NR_STATIONS + NR_PASSES - 1) / NR_PASSES)
-
-#if NR_STATIONS_PER_PASS > 32
-#error "need more passes to beam form this number of stations"
-#endif
-
-
-typedef __global float2 (*ComplexVoltagesType)[NR_TABS][NR_POLARIZATIONS][NR_CHANNELS][NR_TIMES_PER_BLOCK];
-typedef __global float4 (*BandPassCorrectedType)[NR_STATIONS][NR_CHANNELS][NR_TIMES_PER_BLOCK];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_CHANNELS][NR_TABS];
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *samplesPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  BandPassCorrectedType samples = (BandPassCorrectedType) samplesPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint minor_time = get_local_id(0);
-  uint tab = get_global_id(1);
-  uint channel = get_global_id(2);
-
-  float4 sample;
-  __local float4 local_samples[NR_STATIONS_PER_PASS][16];
-
-#pragma unroll
-  for (uint first_station = 0; first_station < NR_STATIONS; first_station += NR_STATIONS_PER_PASS) {
-#if NR_STATIONS_PER_PASS >= 1
-    float2 weight_00;
-
-    if (first_station + 0 < NR_STATIONS)
-      weight_00 = (*weights)[first_station + 0][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 2
-    float2 weight_01;
-
-    if (first_station + 1 < NR_STATIONS)
-      weight_01 = (*weights)[first_station + 1][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 3
-    float2 weight_02;
-
-    if (first_station + 2 < NR_STATIONS)
-      weight_02 = (*weights)[first_station + 2][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 4
-    float2 weight_03;
-
-    if (first_station + 3 < NR_STATIONS)
-      weight_03 = (*weights)[first_station + 3][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 5
-    float2 weight_04;
-
-    if (first_station + 4 < NR_STATIONS)
-      weight_04 = (*weights)[first_station + 4][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 6
-    float2 weight_05;
-
-    if (first_station + 5 < NR_STATIONS)
-      weight_05 = (*weights)[first_station + 5][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 7
-    float2 weight_06;
-
-    if (first_station + 6 < NR_STATIONS)
-      weight_06 = (*weights)[first_station + 6][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 8
-    float2 weight_07;
-
-    if (first_station + 7 < NR_STATIONS)
-      weight_07 = (*weights)[first_station + 7][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 9
-    float2 weight_08;
-
-    if (first_station + 8 < NR_STATIONS)
-      weight_08 = (*weights)[first_station + 8][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 10
-    float2 weight_09;
-
-    if (first_station + 9 < NR_STATIONS)
-      weight_09 = (*weights)[first_station + 9][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 11
-    float2 weight_10;
-
-    if (first_station + 10 < NR_STATIONS)
-      weight_10 = (*weights)[first_station + 10][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 12
-    float2 weight_11;
-
-    if (first_station + 11 < NR_STATIONS)
-      weight_11 = (*weights)[first_station + 11][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 13
-    float2 weight_12;
-
-    if (first_station + 12 < NR_STATIONS)
-      weight_12 = (*weights)[first_station + 12][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 14
-    float2 weight_13;
-
-    if (first_station + 13 < NR_STATIONS)
-      weight_13 = (*weights)[first_station + 13][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 15
-    float2 weight_14;
-
-    if (first_station + 14 < NR_STATIONS)
-      weight_14 = (*weights)[first_station + 14][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 16
-    float2 weight_15;
-
-    if (first_station + 15 < NR_STATIONS)
-      weight_15 = (*weights)[first_station + 15][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 17
-    float2 weight_16;
-
-    if (first_station + 16 < NR_STATIONS)
-      weight_16 = (*weights)[first_station + 16][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 18
-    float2 weight_17;
-
-    if (first_station + 17 < NR_STATIONS)
-      weight_17 = (*weights)[first_station + 17][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 19
-    float2 weight_18;
-
-    if (first_station + 18 < NR_STATIONS)
-      weight_18 = (*weights)[first_station + 18][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 20
-    float2 weight_19;
-
-    if (first_station + 19 < NR_STATIONS)
-      weight_19 = (*weights)[first_station + 19][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 21
-    float2 weight_20;
-
-    if (first_station + 20 < NR_STATIONS)
-      weight_20 = (*weights)[first_station + 20][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 22
-    float2 weight_21;
-
-    if (first_station + 21 < NR_STATIONS)
-      weight_21 = (*weights)[first_station + 21][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 23
-    float2 weight_22;
-
-    if (first_station + 22 < NR_STATIONS)
-      weight_22 = (*weights)[first_station + 22][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 24
-    float2 weight_23;
-
-    if (first_station + 23 < NR_STATIONS)
-      weight_23 = (*weights)[first_station + 23][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 25
-    float2 weight_24;
-
-    if (first_station + 24 < NR_STATIONS)
-      weight_24 = (*weights)[first_station + 24][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 26
-    float2 weight_25;
-
-    if (first_station + 25 < NR_STATIONS)
-      weight_25 = (*weights)[first_station + 25][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 27
-    float2 weight_26;
-
-    if (first_station + 26 < NR_STATIONS)
-      weight_26 = (*weights)[first_station + 26][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 28
-    float2 weight_27;
-
-    if (first_station + 27 < NR_STATIONS)
-      weight_27 = (*weights)[first_station + 27][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 29
-    float2 weight_28;
-
-    if (first_station + 28 < NR_STATIONS)
-      weight_28 = (*weights)[first_station + 28][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 30
-    float2 weight_29;
-
-    if (first_station + 29 < NR_STATIONS)
-      weight_29 = (*weights)[first_station + 29][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 31
-    float2 weight_30;
-
-    if (first_station + 30 < NR_STATIONS)
-      weight_30 = (*weights)[first_station + 30][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 32
-    float2 weight_31;
-
-    if (first_station + 31 < NR_STATIONS)
-      weight_31 = (*weights)[first_station + 31][channel][tab];
-#endif
-
-    for (uint time = 0; time < NR_TIMES_PER_BLOCK; time += 16) {
-#if 1
-      for (uint i = get_local_id(0) + 16 * get_local_id(1); i < NR_STATIONS_PER_PASS * 16; i += get_local_size(0) * get_local_size(1)) {
-        uint t = i % 16;
-        uint s = i / 16;
-
-        if (NR_TIMES_PER_BLOCK % 16 == 0 || time + t < NR_TIMES_PER_BLOCK)
-          if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + s < NR_STATIONS)
-            local_samples[0][i] = (*samples)[first_station + s][channel][time + t];
-      }
-
-      barrier(CLK_LOCAL_MEM_FENCE);
-#endif
-
-      /*for (uint t = 0; t < (NR_TIMES_PER_BLOCK % 16 == 0 ? 16 : min(16U, NR_TIMES_PER_BLOCK - time)); t ++)*/ {
-        float4 sum = first_station == 0 ? 0 : (float4) ((*complexVoltages)[tab][0][channel][time + minor_time], (*complexVoltages)[tab][1][channel][time + minor_time]);
-
-#if NR_STATIONS_PER_PASS >= 1
-        if (first_station + 1 < NR_STATIONS) {
-          sample = local_samples[0][minor_time];
-          sum += weight_00.xxxx * sample;
-          sum += weight_00.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 2
-        if (first_station + 2 < NR_STATIONS) {
-          sample = local_samples[1][minor_time];
-          sum += weight_01.xxxx * sample;
-          sum += weight_01.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 3
-        if (first_station + 3 < NR_STATIONS) {
-          sample = local_samples[2][minor_time];
-          sum += weight_02.xxxx * sample;
-          sum += weight_02.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 4
-        if (first_station + 4 < NR_STATIONS) {
-          sample = local_samples[3][minor_time];
-          sum += weight_03.xxxx * sample;
-          sum += weight_03.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 5
-        if (first_station + 5 < NR_STATIONS) {
-          sample = local_samples[4][minor_time];
-          sum += weight_04.xxxx * sample;
-          sum += weight_04.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 6
-        if (first_station + 6 < NR_STATIONS) {
-          sample = local_samples[5][minor_time];
-          sum += weight_05.xxxx * sample;
-          sum += weight_05.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 7
-        if (first_station + 7 < NR_STATIONS) {
-          sample = local_samples[6][minor_time];
-          sum += weight_06.xxxx * sample;
-          sum += weight_06.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 8
-        if (first_station + 8 < NR_STATIONS) {
-          sample = local_samples[7][minor_time];
-          sum += weight_07.xxxx * sample;
-          sum += weight_07.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 9
-        if (first_station + 9 < NR_STATIONS) {
-          sample = local_samples[8][minor_time];
-          sum += weight_08.xxxx * sample;
-          sum += weight_08.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 10
-        if (first_station + 10 < NR_STATIONS) {
-          sample = local_samples[9][minor_time];
-          sum += weight_09.xxxx * sample;
-          sum += weight_09.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 11
-        if (first_station + 11 < NR_STATIONS) {
-          sample = local_samples[10][minor_time];
-          sum += weight_10.xxxx * sample;
-          sum += weight_10.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 12
-        if (first_station + 12 < NR_STATIONS) {
-          sample = local_samples[11][minor_time];
-          sum += weight_11.xxxx * sample;
-          sum += weight_11.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 13
-        if (first_station + 13 < NR_STATIONS) {
-          sample = local_samples[12][minor_time];
-          sum += weight_12.xxxx * sample;
-          sum += weight_12.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 14
-        if (first_station + 14 < NR_STATIONS) {
-          sample = local_samples[13][minor_time];
-          sum += weight_13.xxxx * sample;
-          sum += weight_13.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 15
-        if (first_station + 15 < NR_STATIONS) {
-          sample = local_samples[14][minor_time];
-          sum += weight_14.xxxx * sample;
-          sum += weight_14.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 16
-        if (first_station + 15 < NR_STATIONS) {
-          sample = local_samples[15][minor_time];
-          sum += weight_15.xxxx * sample;
-          sum += weight_15.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 17
-        if (first_station + 16 < NR_STATIONS) {
-          sample = local_samples[16][minor_time];
-          sum += weight_16.xxxx * sample;
-          sum += weight_16.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 18
-        if (first_station + 17 < NR_STATIONS) {
-          sample = local_samples[17][minor_time];
-          sum += weight_17.xxxx * sample;
-          sum += weight_17.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 19
-        if (first_station + 18 < NR_STATIONS) {
-          sample = local_samples[18][minor_time];
-          sum += weight_18.xxxx * sample;
-          sum += weight_18.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 20
-        if (first_station + 19 < NR_STATIONS) {
-          sample = local_samples[19][minor_time];
-          sum += weight_19.xxxx * sample;
-          sum += weight_19.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 21
-        if (first_station + 20 < NR_STATIONS) {
-          sample = local_samples[20][minor_time];
-          sum += weight_20.xxxx * sample;
-          sum += weight_20.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 22
-        if (first_station + 21 < NR_STATIONS) {
-          sample = local_samples[21][minor_time];
-          sum += weight_21.xxxx * sample;
-          sum += weight_21.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 23
-        if (first_station + 22 < NR_STATIONS) {
-          sample = local_samples[22][minor_time];
-          sum += weight_22.xxxx * sample;
-          sum += weight_22.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 24
-        if (first_station + 23 < NR_STATIONS) {
-          sample = local_samples[23][minor_time];
-          sum += weight_23.xxxx * sample;
-          sum += weight_23.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 25
-        if (first_station + 25 < NR_STATIONS) {
-          sample = local_samples[24][minor_time];
-          sum += weight_24.xxxx * sample;
-          sum += weight_24.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 26
-        if (first_station + 25 < NR_STATIONS) {
-          sample = local_samples[25][minor_time];
-          sum += weight_25.xxxx * sample;
-          sum += weight_25.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 27
-        if (first_station + 26 < NR_STATIONS) {
-          sample = local_samples[26][minor_time];
-          sum += weight_26.xxxx * sample;
-          sum += weight_26.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 28
-        if (first_station + 27 < NR_STATIONS) {
-          sample = local_samples[27][minor_time];
-          sum += weight_27.xxxx * sample;
-          sum += weight_27.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 29
-        if (first_station + 28 < NR_STATIONS) {
-          sample = local_samples[28][minor_time];
-          sum += weight_28.xxxx * sample;
-          sum += weight_28.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 30
-        if (first_station + 29 < NR_STATIONS) {
-          sample = local_samples[29][minor_time];
-          sum += weight_29.xxxx * sample;
-          sum += weight_29.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 31
-        if (first_station + 30 < NR_STATIONS) {
-          sample = local_samples[30][minor_time];
-          sum += weight_30.xxxx * sample;
-          sum += weight_30.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 32
-        if (first_station + 31 < NR_STATIONS) {
-          sample = local_samples[31][minor_time];
-          sum += weight_31.xxxx * sample;
-          sum += weight_31.yyyy * (float4) (-sample.y, sample.x, -sample.w, sample.z);
-        }
-#endif
-
-        (*complexVoltages)[tab][0][channel][time + minor_time] = sum.xy;
-        (*complexVoltages)[tab][1][channel][time + minor_time] = sum.zw;
-      }
-
-      barrier(CLK_LOCAL_MEM_FENCE);
-    }
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.not b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.not
deleted file mode 100644
index 1bd98a2fb00cb622ead6c57925621124c30890c9..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.not
+++ /dev/null
@@ -1,148 +0,0 @@
-#define NR_CHANNELS_PER_BLOCK   2
-
-
-typedef __global float4 (*ComplexVoltagesType)[NR_TABS][NR_SAMPLES_PER_INTEGRATION][NR_CHANNELS];
-//typedef __global float4 (*CorrectedDataType)[NR_STATIONS][NR_CHANNELS][NR_SAMPLES_PER_INTEGRATION];
-typedef __global float4 (*CorrectedDataType)[NR_STATIONS][NR_SAMPLES_PER_INTEGRATION][NR_CHANNELS];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_CHANNELS][NR_TABS];
-
-float2 cmul(float2 a, float2 b)
-{
-  return (float2) { a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x };
-}
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *correctedDataPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint first_tab = 3 * get_local_id(0);
-  uint channel = get_global_id(1);
-  uint first_station = 6 * get_local_id(2);
-
-  float2 weight_0_0 = (*weights)[first_station + 0][channel][first_tab + 0];
-  float2 weight_0_1 = (*weights)[first_station + 0][channel][first_tab + 1];
-  float2 weight_0_2 = (*weights)[first_station + 0][channel][first_tab + 2];
-  float2 weight_1_0 = (*weights)[first_station + 1][channel][first_tab + 0];
-  float2 weight_1_1 = (*weights)[first_station + 1][channel][first_tab + 1];
-  float2 weight_1_2 = (*weights)[first_station + 1][channel][first_tab + 2];
-  float2 weight_2_0 = (*weights)[first_station + 2][channel][first_tab + 0];
-  float2 weight_2_1 = (*weights)[first_station + 2][channel][first_tab + 1];
-  float2 weight_2_2 = (*weights)[first_station + 2][channel][first_tab + 2];
-  float2 weight_3_0 = (*weights)[first_station + 3][channel][first_tab + 0];
-  float2 weight_3_1 = (*weights)[first_station + 3][channel][first_tab + 1];
-  float2 weight_3_2 = (*weights)[first_station + 3][channel][first_tab + 2];
-  float2 weight_4_0 = (*weights)[first_station + 4][channel][first_tab + 0];
-  float2 weight_4_1 = (*weights)[first_station + 4][channel][first_tab + 1];
-  float2 weight_4_2 = (*weights)[first_station + 4][channel][first_tab + 2];
-  float2 weight_5_0 = (*weights)[first_station + 5][channel][first_tab + 0];
-  float2 weight_5_1 = (*weights)[first_station + 5][channel][first_tab + 1];
-  float2 weight_5_2 = (*weights)[first_station + 5][channel][first_tab + 2];
-
-  __local float4 local_sums[3][NR_STATIONS / 6 - 1][NR_CHANNELS_PER_BLOCK][NR_TABS / 3];
-
-  for (int i = 0; i < 2 * get_local_id(2); i++)
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-  for (int time = 0; time < (int) NR_SAMPLES_PER_INTEGRATION; time++) {
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    float4 sum_0, sum_1, sum_2;
-
-    if (first_station == 0) {
-      sum_0 = sum_1 = sum_2 = (float4) { 0, 0, 0, 0 };
-    } else {
-      sum_0 = local_sums[0][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-      sum_1 = local_sums[1][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-      sum_2 = local_sums[2][get_local_id(2) - 1][get_local_id(1)][get_local_id(0)];
-    }
-
-    float4 sample_0 = (*correctedData)[first_station + 0][time][channel];
-    float4 sample_1 = (*correctedData)[first_station + 1][time][channel];
-    float4 sample_2 = (*correctedData)[first_station + 2][time][channel];
-    float4 sample_3 = (*correctedData)[first_station + 3][time][channel];
-    float4 sample_4 = (*correctedData)[first_station + 4][time][channel];
-    float4 sample_5 = (*correctedData)[first_station + 5][time][channel];
-
-    sum_0 += weight_0_0.xxxx * sample_0;
-    sum_1 += weight_0_1.xxxx * sample_0;
-    sum_2 += weight_0_2.xxxx * sample_0;
-    float4 sample_0_tr = (float4) { -sample_0.y, sample_0.x, -sample_0.w, sample_0.z };
-    sum_0 += weight_0_0.yyyy * sample_0_tr;
-    sum_1 += weight_0_1.yyyy * sample_0_tr;
-    sum_2 += weight_0_2.yyyy * sample_0_tr;
-
-    sum_0 += weight_1_0.xxxx * sample_1;
-    sum_1 += weight_1_1.xxxx * sample_1;
-    sum_2 += weight_1_2.xxxx * sample_1;
-    float4 sample_1_tr = (float4) { -sample_1.y, sample_1.x, -sample_1.w, sample_1.z };
-    sum_0 += weight_1_0.yyyy * sample_1_tr;
-    sum_1 += weight_1_1.yyyy * sample_1_tr;
-    sum_2 += weight_1_2.yyyy * sample_1_tr;
-
-    sum_0 += weight_2_0.xxxx * sample_2;
-    sum_1 += weight_2_1.xxxx * sample_2;
-    sum_2 += weight_2_2.xxxx * sample_2;
-    float4 sample_2_tr = (float4) { -sample_2.y, sample_2.x, -sample_2.w, sample_2.z };
-    sum_0 += weight_2_0.yyyy * sample_2_tr;
-    sum_1 += weight_2_1.yyyy * sample_2_tr;
-    sum_2 += weight_2_2.yyyy * sample_2_tr;
-
-    sum_0 += weight_3_0.xxxx * sample_3;
-    sum_1 += weight_3_1.xxxx * sample_3;
-    sum_2 += weight_3_2.xxxx * sample_3;
-    float4 sample_3_tr = (float4) { -sample_3.y, sample_3.x, -sample_3.w, sample_3.z };
-    sum_0 += weight_3_0.yyyy * sample_3_tr;
-    sum_1 += weight_3_1.yyyy * sample_3_tr;
-    sum_2 += weight_3_2.yyyy * sample_3_tr;
-
-    sum_0 += weight_4_0.xxxx * sample_4;
-    sum_1 += weight_4_1.xxxx * sample_4;
-    sum_2 += weight_4_2.xxxx * sample_4;
-    float4 sample_4_tr = (float4) { -sample_4.y, sample_4.x, -sample_4.w, sample_4.z };
-    sum_0 += weight_4_0.yyyy * sample_4_tr;
-    sum_1 += weight_4_1.yyyy * sample_4_tr;
-    sum_2 += weight_4_2.yyyy * sample_4_tr;
-
-    sum_0 += weight_5_0.xxxx * sample_5;
-    sum_1 += weight_5_1.xxxx * sample_5;
-    sum_2 += weight_5_2.xxxx * sample_5;
-    float4 sample_5_tr = (float4) { -sample_5.y, sample_5.x, -sample_5.w, sample_5.z };
-    sum_0 += weight_5_0.yyyy * sample_5_tr;
-    sum_1 += weight_5_1.yyyy * sample_5_tr;
-    sum_2 += weight_5_2.yyyy * sample_5_tr;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (first_station + 6 < NR_STATIONS) {
-      local_sums[0][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_0;
-      local_sums[1][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_1;
-      local_sums[2][get_local_id(2)][get_local_id(1)][get_local_id(0)] = sum_2;
-    } else {
-      (*complexVoltages)[first_tab + 0][time][channel] = sum_0;
-      (*complexVoltages)[first_tab + 1][time][channel] = sum_1;
-      (*complexVoltages)[first_tab + 2][time][channel] = sum_2;
-    }
-
-    for (int i = 0; i < 2 * (get_local_size(2) - 1 - get_local_id(2)); i++)
-      barrier(CLK_LOCAL_MEM_FENCE);
-
-#if 0
-#if defined STOKES_I || defined STOKES_IQUV
-    float powerX = sum.x * sum.x + sum.y * sum.y;
-    float powerY = sum.z * sum.z + sum.w * sum.w;
-
-    (*stokes)[tab][0][0][time_or_channel] = powerX + powerY;
-#if defined STOKES_IQUV
-    (*stokes)[tab][1][0][time_or_channel] = powerX - powerY;
-    (*stokes)[tab][2][0][time_or_channel] = 2 * (sum.x * sum.z + sum.y * sum.w);
-    (*stokes)[tab][3][0][time_or_channel] = 2 * (sum.y * sum.z - sum.x * sum.w);
-#endif
-#endif
-#endif
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.ok b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.ok
deleted file mode 100644
index 6bd1a3afc83afad117a6fd608552561f73324818..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.ok
+++ /dev/null
@@ -1,536 +0,0 @@
-#define MAX(A,B) ((A)>(B) ? (A) : (B))
-#define NR_PASSES MAX((NR_STATIONS + 6) / 16, 1) // gives best results on GTX 680
-#define NR_STATIONS_PER_PASS ((NR_STATIONS + NR_PASSES - 1) / NR_PASSES)
-
-#if NR_STATIONS_PER_PASS > 32
-#error "need more passes to beam form this number of stations"
-#endif
-
-
-typedef __global float2 (*ComplexVoltagesType)[NR_CHANNELS][NR_TIMES_PER_BLOCK][NR_TABS][NR_POLARIZATIONS];
-typedef __global float4 (*BandPassCorrectedType)[NR_STATIONS][NR_CHANNELS][NR_TIMES_PER_BLOCK];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_CHANNELS][NR_TABS];
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *samplesPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  BandPassCorrectedType samples = (BandPassCorrectedType) samplesPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint pol = get_local_id(0);
-  uint tab = get_local_id(1);
-  uint channel = get_global_id(2);
-
-  float2 sample;
-  __local union {
-    float2 samples[NR_STATIONS_PER_PASS][16][NR_POLARIZATIONS];
-    float4 samples4[NR_STATIONS_PER_PASS][16];
-  } _local;
-
-#pragma unroll
-  for (uint first_station = 0; first_station < NR_STATIONS; first_station += NR_STATIONS_PER_PASS) {
-#if NR_STATIONS_PER_PASS >= 1
-    float2 weight_00;
-
-    if (first_station + 0 < NR_STATIONS)
-      weight_00 = (*weights)[first_station + 0][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 2
-    float2 weight_01;
-
-    if (first_station + 1 < NR_STATIONS)
-      weight_01 = (*weights)[first_station + 1][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 3
-    float2 weight_02;
-
-    if (first_station + 2 < NR_STATIONS)
-      weight_02 = (*weights)[first_station + 2][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 4
-    float2 weight_03;
-
-    if (first_station + 3 < NR_STATIONS)
-      weight_03 = (*weights)[first_station + 3][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 5
-    float2 weight_04;
-
-    if (first_station + 4 < NR_STATIONS)
-      weight_04 = (*weights)[first_station + 4][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 6
-    float2 weight_05;
-
-    if (first_station + 5 < NR_STATIONS)
-      weight_05 = (*weights)[first_station + 5][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 7
-    float2 weight_06;
-
-    if (first_station + 6 < NR_STATIONS)
-      weight_06 = (*weights)[first_station + 6][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 8
-    float2 weight_07;
-
-    if (first_station + 7 < NR_STATIONS)
-      weight_07 = (*weights)[first_station + 7][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 9
-    float2 weight_08;
-
-    if (first_station + 8 < NR_STATIONS)
-      weight_08 = (*weights)[first_station + 8][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 10
-    float2 weight_09;
-
-    if (first_station + 9 < NR_STATIONS)
-      weight_09 = (*weights)[first_station + 9][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 11
-    float2 weight_10;
-
-    if (first_station + 10 < NR_STATIONS)
-      weight_10 = (*weights)[first_station + 10][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 12
-    float2 weight_11;
-
-    if (first_station + 11 < NR_STATIONS)
-      weight_11 = (*weights)[first_station + 11][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 13
-    float2 weight_12;
-
-    if (first_station + 12 < NR_STATIONS)
-      weight_12 = (*weights)[first_station + 12][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 14
-    float2 weight_13;
-
-    if (first_station + 13 < NR_STATIONS)
-      weight_13 = (*weights)[first_station + 13][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 15
-    float2 weight_14;
-
-    if (first_station + 14 < NR_STATIONS)
-      weight_14 = (*weights)[first_station + 14][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 16
-    float2 weight_15;
-
-    if (first_station + 15 < NR_STATIONS)
-      weight_15 = (*weights)[first_station + 15][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 17
-    float2 weight_16;
-
-    if (first_station + 16 < NR_STATIONS)
-      weight_16 = (*weights)[first_station + 16][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 18
-    float2 weight_17;
-
-    if (first_station + 17 < NR_STATIONS)
-      weight_17 = (*weights)[first_station + 17][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 19
-    float2 weight_18;
-
-    if (first_station + 18 < NR_STATIONS)
-      weight_18 = (*weights)[first_station + 18][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 20
-    float2 weight_19;
-
-    if (first_station + 19 < NR_STATIONS)
-      weight_19 = (*weights)[first_station + 19][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 21
-    float2 weight_20;
-
-    if (first_station + 20 < NR_STATIONS)
-      weight_20 = (*weights)[first_station + 20][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 22
-    float2 weight_21;
-
-    if (first_station + 21 < NR_STATIONS)
-      weight_21 = (*weights)[first_station + 21][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 23
-    float2 weight_22;
-
-    if (first_station + 22 < NR_STATIONS)
-      weight_22 = (*weights)[first_station + 22][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 24
-    float2 weight_23;
-
-    if (first_station + 23 < NR_STATIONS)
-      weight_23 = (*weights)[first_station + 23][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 25
-    float2 weight_24;
-
-    if (first_station + 24 < NR_STATIONS)
-      weight_24 = (*weights)[first_station + 24][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 26
-    float2 weight_25;
-
-    if (first_station + 25 < NR_STATIONS)
-      weight_25 = (*weights)[first_station + 25][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 27
-    float2 weight_26;
-
-    if (first_station + 26 < NR_STATIONS)
-      weight_26 = (*weights)[first_station + 26][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 28
-    float2 weight_27;
-
-    if (first_station + 27 < NR_STATIONS)
-      weight_27 = (*weights)[first_station + 27][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 29
-    float2 weight_28;
-
-    if (first_station + 28 < NR_STATIONS)
-      weight_28 = (*weights)[first_station + 28][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 30
-    float2 weight_29;
-
-    if (first_station + 29 < NR_STATIONS)
-      weight_29 = (*weights)[first_station + 29][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 31
-    float2 weight_30;
-
-    if (first_station + 30 < NR_STATIONS)
-      weight_30 = (*weights)[first_station + 30][channel][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 32
-    float2 weight_31;
-
-    if (first_station + 31 < NR_STATIONS)
-      weight_31 = (*weights)[first_station + 31][channel][tab];
-#endif
-
-    for (uint time = 0; time < NR_TIMES_PER_BLOCK; time += 16) {
-      for (uint i = get_local_id(0) + NR_POLARIZATIONS * get_local_id(1); i < NR_STATIONS_PER_PASS * 16; i += NR_TABS * NR_POLARIZATIONS) {
-        uint t = i % 16;
-        uint s = i / 16;
-
-        if (NR_TIMES_PER_BLOCK % 16 == 0 || time + t < NR_TIMES_PER_BLOCK)
-          if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + s < NR_STATIONS)
-            _local.samples4[0][i] = convert_float4((*samples)[first_station + s][channel][time + t]);
-      }
-
-      barrier(CLK_LOCAL_MEM_FENCE);
-
-      for (uint t = 0; t < (NR_TIMES_PER_BLOCK % 16 == 0 ? 16 : min(16U, NR_TIMES_PER_BLOCK - time)); t++) {
-        float2 sum = first_station == 0 ? 0 : (*complexVoltages)[channel][time + t][tab][pol];
-
-#if NR_STATIONS_PER_PASS >= 1
-        if (first_station + 1 < NR_STATIONS) {
-          sample = _local.samples[ 0][t][pol];
-          sum += weight_00.xx * sample;
-          sum += weight_00.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 2
-        if (first_station + 2 < NR_STATIONS) {
-          sample = _local.samples[ 1][t][pol];
-          sum += weight_01.xx * sample;
-          sum += weight_01.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 3
-        if (first_station + 3 < NR_STATIONS) {
-          sample = _local.samples[ 2][t][pol];
-          sum += weight_02.xx * sample;
-          sum += weight_02.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 4
-        if (first_station + 4 < NR_STATIONS) {
-          sample = _local.samples[ 3][t][pol];
-          sum += weight_03.xx * sample;
-          sum += weight_03.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 5
-        if (first_station + 5 < NR_STATIONS) {
-          sample = _local.samples[ 4][t][pol];
-          sum += weight_04.xx * sample;
-          sum += weight_04.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 6
-        if (first_station + 6 < NR_STATIONS) {
-          sample = _local.samples[ 5][t][pol];
-          sum += weight_05.xx * sample;
-          sum += weight_05.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 7
-        if (first_station + 7 < NR_STATIONS) {
-          sample = _local.samples[ 6][t][pol];
-          sum += weight_06.xx * sample;
-          sum += weight_06.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 8
-        if (first_station + 8 < NR_STATIONS) {
-          sample = _local.samples[ 7][t][pol];
-          sum += weight_07.xx * sample;
-          sum += weight_07.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 9
-        if (first_station + 9 < NR_STATIONS) {
-          sample = _local.samples[ 8][t][pol];
-          sum += weight_08.xx * sample;
-          sum += weight_08.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 10
-        if (first_station + 10 < NR_STATIONS) {
-          sample = _local.samples[ 9][t][pol];
-          sum += weight_09.xx * sample;
-          sum += weight_09.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 11
-        if (first_station + 11 < NR_STATIONS) {
-          sample = _local.samples[10][t][pol];
-          sum += weight_10.xx * sample;
-          sum += weight_10.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 12
-        if (first_station + 12 < NR_STATIONS) {
-          sample = _local.samples[11][t][pol];
-          sum += weight_11.xx * sample;
-          sum += weight_11.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 13
-        if (first_station + 13 < NR_STATIONS) {
-          sample = _local.samples[12][t][pol];
-          sum += weight_12.xx * sample;
-          sum += weight_12.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 14
-        if (first_station + 14 < NR_STATIONS) {
-          sample = _local.samples[13][t][pol];
-          sum += weight_13.xx * sample;
-          sum += weight_13.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 15
-        if (first_station + 15 < NR_STATIONS) {
-          sample = _local.samples[14][t][pol];
-          sum += weight_14.xx * sample;
-          sum += weight_14.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 16
-        if (first_station + 15 < NR_STATIONS) {
-          sample = _local.samples[15][t][pol];
-          sum += weight_15.xx * sample;
-          sum += weight_15.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 17
-        if (first_station + 16 < NR_STATIONS) {
-          sample = _local.samples[16][t][pol];
-          sum += weight_16.xx * sample;
-          sum += weight_16.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 18
-        if (first_station + 17 < NR_STATIONS) {
-          sample = _local.samples[17][t][pol];
-          sum += weight_17.xx * sample;
-          sum += weight_17.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 19
-        if (first_station + 18 < NR_STATIONS) {
-          sample = _local.samples[18][t][pol];
-          sum += weight_18.xx * sample;
-          sum += weight_18.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 20
-        if (first_station + 19 < NR_STATIONS) {
-          sample = _local.samples[19][t][pol];
-          sum += weight_19.xx * sample;
-          sum += weight_19.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 21
-        if (first_station + 20 < NR_STATIONS) {
-          sample = _local.samples[20][t][pol];
-          sum += weight_20.xx * sample;
-          sum += weight_20.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 22
-        if (first_station + 21 < NR_STATIONS) {
-          sample = _local.samples[21][t][pol];
-          sum += weight_21.xx * sample;
-          sum += weight_21.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 23
-        if (first_station + 22 < NR_STATIONS) {
-          sample = _local.samples[22][t][pol];
-          sum += weight_22.xx * sample;
-          sum += weight_22.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 24
-        if (first_station + 23 < NR_STATIONS) {
-          sample = _local.samples[23][t][pol];
-          sum += weight_23.xx * sample;
-          sum += weight_23.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 25
-        if (first_station + 25 < NR_STATIONS) {
-          sample = _local.samples[24][t][pol];
-          sum += weight_24.xx * sample;
-          sum += weight_24.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 26
-        if (first_station + 25 < NR_STATIONS) {
-          sample = _local.samples[25][t][pol];
-          sum += weight_25.xx * sample;
-          sum += weight_25.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 27
-        if (first_station + 26 < NR_STATIONS) {
-          sample = _local.samples[26][t][pol];
-          sum += weight_26.xx * sample;
-          sum += weight_26.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 28
-        if (first_station + 27 < NR_STATIONS) {
-          sample = _local.samples[27][t][pol];
-          sum += weight_27.xx * sample;
-          sum += weight_27.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 29
-        if (first_station + 28 < NR_STATIONS) {
-          sample = _local.samples[28][t][pol];
-          sum += weight_28.xx * sample;
-          sum += weight_28.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 30
-        if (first_station + 29 < NR_STATIONS) {
-          sample = _local.samples[29][t][pol];
-          sum += weight_29.xx * sample;
-          sum += weight_29.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 31
-        if (first_station + 30 < NR_STATIONS) {
-          sample = _local.samples[30][t][pol];
-          sum += weight_30.xx * sample;
-          sum += weight_30.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 32
-        if (first_station + 31 < NR_STATIONS) {
-          sample = _local.samples[31][t][pol];
-          sum += weight_31.xx * sample;
-          sum += weight_31.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-        (*complexVoltages)[channel][time + t][tab][pol] = sum;
-      }
-
-      barrier(CLK_LOCAL_MEM_FENCE);
-    }
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.orig b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.orig
deleted file mode 100644
index 43ae0e90cb39fd79c6393dd194b6aa8b95695a96..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/BeamFormer.cl.orig
+++ /dev/null
@@ -1,149 +0,0 @@
-typedef __global float4 (*ComplexVoltagesType)[NR_CHANNELS][NR_TIMES_PER_BLOCK][NR_TABS];
-//typedef __global float4 (*CorrectedDataType)[NR_STATIONS][NR_CHANNELS][NR_TIMES_PER_BLOCK];
-typedef __global float4 (*CorrectedDataType)[NR_STATIONS][NR_TIMES_PER_BLOCK][NR_CHANNELS];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_CHANNELS][NR_TABS];
-
-float2 cmul(float2 a, float2 b)
-{
-  return (float2) { a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x };
-}
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *correctedDataPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint first_tab = 3 * get_local_id(0);
-  uint first_station = 6 * get_local_id(1);
-  uint channel = get_global_id(2);
-
-  bool lastGroupOfStations = first_station + 6 == NR_STATIONS;
-
-  float2 weight_0_0 = (*weights)[first_station + 0][channel][first_tab + 0];
-  float2 weight_0_1 = (*weights)[first_station + 0][channel][first_tab + 1];
-  float2 weight_0_2 = (*weights)[first_station + 0][channel][first_tab + 2];
-  float2 weight_1_0 = (*weights)[first_station + 1][channel][first_tab + 0];
-  float2 weight_1_1 = (*weights)[first_station + 1][channel][first_tab + 1];
-  float2 weight_1_2 = (*weights)[first_station + 1][channel][first_tab + 2];
-  float2 weight_2_0 = (*weights)[first_station + 2][channel][first_tab + 0];
-  float2 weight_2_1 = (*weights)[first_station + 2][channel][first_tab + 1];
-  float2 weight_2_2 = (*weights)[first_station + 2][channel][first_tab + 2];
-  float2 weight_3_0 = (*weights)[first_station + 3][channel][first_tab + 0];
-  float2 weight_3_1 = (*weights)[first_station + 3][channel][first_tab + 1];
-  float2 weight_3_2 = (*weights)[first_station + 3][channel][first_tab + 2];
-  float2 weight_4_0 = (*weights)[first_station + 4][channel][first_tab + 0];
-  float2 weight_4_1 = (*weights)[first_station + 4][channel][first_tab + 1];
-  float2 weight_4_2 = (*weights)[first_station + 4][channel][first_tab + 2];
-  float2 weight_5_0 = (*weights)[first_station + 5][channel][first_tab + 0];
-  float2 weight_5_1 = (*weights)[first_station + 5][channel][first_tab + 1];
-  float2 weight_5_2 = (*weights)[first_station + 5][channel][first_tab + 2];
-
-  __local float4 local_sums[3][NR_STATIONS / 6][NR_TABS / 3];
-  float4 sample_0, sample_1, sample_2, sample_3, sample_4, sample_5;
-  float4 sum_0, sum_1, sum_2;
-
-  if (first_station == 0) {
-    local_sums[0][0][get_local_id(0)] = (float4) { 0, 0, 0, 0 };
-    local_sums[1][0][get_local_id(0)] = (float4) { 0, 0, 0, 0 };
-    local_sums[2][0][get_local_id(0)] = (float4) { 0, 0, 0, 0 };
-  }
-
-  for (int time = 0 - get_local_id(1); time < (int) (NR_TIMES_PER_BLOCK + NR_STATIONS / 6 - 1 - get_local_id(1)); time++) {
-    bool validTime = time >= 0 && time < NR_TIMES_PER_BLOCK;
-
-    if (validTime) {
-      sample_0 = (*correctedData)[first_station + 0][time][channel];
-      sample_1 = (*correctedData)[first_station + 1][time][channel];
-      sample_2 = (*correctedData)[first_station + 2][time][channel];
-      sample_3 = (*correctedData)[first_station + 3][time][channel];
-      sample_4 = (*correctedData)[first_station + 4][time][channel];
-      sample_5 = (*correctedData)[first_station + 5][time][channel];
-
-      sum_0 = local_sums[0][get_local_id(1)][get_local_id(0)];
-      sum_1 = local_sums[1][get_local_id(1)][get_local_id(0)];
-      sum_2 = local_sums[2][get_local_id(1)][get_local_id(0)];
-
-      sum_0 += weight_0_0.xxxx * sample_0;
-      sum_1 += weight_0_1.xxxx * sample_0;
-      sum_2 += weight_0_2.xxxx * sample_0;
-      float4 sample_0_tr = (float4) { -sample_0.y, sample_0.x, -sample_0.w, sample_0.z };
-      sum_0 += weight_0_0.yyyy * sample_0_tr;
-      sum_1 += weight_0_1.yyyy * sample_0_tr;
-      sum_2 += weight_0_2.yyyy * sample_0_tr;
-
-      sum_0 += weight_1_0.xxxx * sample_1;
-      sum_1 += weight_1_1.xxxx * sample_1;
-      sum_2 += weight_1_2.xxxx * sample_1;
-      float4 sample_1_tr = (float4) { -sample_1.y, sample_1.x, -sample_1.w, sample_1.z };
-      sum_0 += weight_1_0.yyyy * sample_1_tr;
-      sum_1 += weight_1_1.yyyy * sample_1_tr;
-      sum_2 += weight_1_2.yyyy * sample_1_tr;
-
-      sum_0 += weight_2_0.xxxx * sample_2;
-      sum_1 += weight_2_1.xxxx * sample_2;
-      sum_2 += weight_2_2.xxxx * sample_2;
-      float4 sample_2_tr = (float4) { -sample_2.y, sample_2.x, -sample_2.w, sample_2.z };
-      sum_0 += weight_2_0.yyyy * sample_2_tr;
-      sum_1 += weight_2_1.yyyy * sample_2_tr;
-      sum_2 += weight_2_2.yyyy * sample_2_tr;
-
-      sum_0 += weight_3_0.xxxx * sample_3;
-      sum_1 += weight_3_1.xxxx * sample_3;
-      sum_2 += weight_3_2.xxxx * sample_3;
-      float4 sample_3_tr = (float4) { -sample_3.y, sample_3.x, -sample_3.w, sample_3.z };
-      sum_0 += weight_3_0.yyyy * sample_3_tr;
-      sum_1 += weight_3_1.yyyy * sample_3_tr;
-      sum_2 += weight_3_2.yyyy * sample_3_tr;
-
-      sum_0 += weight_4_0.xxxx * sample_4;
-      sum_1 += weight_4_1.xxxx * sample_4;
-      sum_2 += weight_4_2.xxxx * sample_4;
-      float4 sample_4_tr = (float4) { -sample_4.y, sample_4.x, -sample_4.w, sample_4.z };
-      sum_0 += weight_4_0.yyyy * sample_4_tr;
-      sum_1 += weight_4_1.yyyy * sample_4_tr;
-      sum_2 += weight_4_2.yyyy * sample_4_tr;
-
-      sum_0 += weight_5_0.xxxx * sample_5;
-      sum_1 += weight_5_1.xxxx * sample_5;
-      sum_2 += weight_5_2.xxxx * sample_5;
-      float4 sample_5_tr = (float4) { -sample_5.y, sample_5.x, -sample_5.w, sample_5.z };
-      sum_0 += weight_5_0.yyyy * sample_5_tr;
-      sum_1 += weight_5_1.yyyy * sample_5_tr;
-      sum_2 += weight_5_2.yyyy * sample_5_tr;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (validTime) {
-      if (lastGroupOfStations) {
-        (*complexVoltages)[channel][time][first_tab + 0] = sum_0;
-        (*complexVoltages)[channel][time][first_tab + 1] = sum_1;
-        (*complexVoltages)[channel][time][first_tab + 2] = sum_2;
-      } else {
-        local_sums[0][get_local_id(1) + 1][get_local_id(0)] = sum_0;
-        local_sums[1][get_local_id(1) + 1][get_local_id(0)] = sum_1;
-        local_sums[2][get_local_id(1) + 1][get_local_id(0)] = sum_2;
-      }
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-#if 0
-#if defined STOKES_I || defined STOKES_IQUV
-    float powerX = sum.x * sum.x + sum.y * sum.y;
-    float powerY = sum.z * sum.z + sum.w * sum.w;
-
-    (*stokes)[tab][0][0][time_or_channel] = powerX + powerY;
-#if defined STOKES_IQUV
-    (*stokes)[tab][1][0][time_or_channel] = powerX - powerY;
-    (*stokes)[tab][2][0][time_or_channel] = 2 * (sum.x * sum.z + sum.y * sum.w);
-    (*stokes)[tab][3][0][time_or_channel] = 2 * (sum.y * sum.z - sum.x * sum.w);
-#endif
-#endif
-#endif
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/CoherentStokes.cl b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/CoherentStokes.cl
deleted file mode 100644
index 8491fe641b5ac4013120bfe33aef5ad5ca040995..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/CoherentStokes.cl
+++ /dev/null
@@ -1,152 +0,0 @@
-//# CoherentStokes.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-__kernel void coherentStokes(__global void *restrict stokesDataPtr,
-                             __global const void *restrict complexVoltagesPtr)
-{
-  typedef __global float (*StokesType)[NR_TABS][NR_COHERENT_STOKES][NR_SAMPLES_PER_CHANNEL / COHERENT_STOKES_TIME_INTEGRATION_FACTOR][NR_CHANNELS];
-  typedef __global float4 (*ComplexVoltagesType)[NR_CHANNELS][NR_SAMPLES_PER_CHANNEL / COHERENT_STOKES_TIME_INTEGRATION_FACTOR][COHERENT_STOKES_TIME_INTEGRATION_FACTOR][NR_TABS];
-
-  StokesType stokesData = (StokesType) stokesDataPtr;
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-
-  __local float tmp[NR_COHERENT_STOKES][16][17];
-
-  uint tabBase = 16 * get_global_id(1);
-  uint chBase = 16 * get_global_id(2);
-
-  uint tabOffsetR = get_local_id(0) & 15;
-  uint tabR = tabBase + tabOffsetR;
-  uint chOffsetR = get_local_id(0) >> 4;
-  uint channelR = chBase + chOffsetR;
-  bool doR = NR_TABS % 16 == 0 || tabR < NR_TABS;
-
-  uint tabOffsetW = get_local_id(0) >> 4;
-  uint tabW = tabBase + tabOffsetW;
-  uint chOffsetW = get_local_id(0) & 15;
-  uint channelW = chBase + chOffsetW;
-  bool doW = NR_TABS % 16 == 0 || tabW < NR_TABS;
-
-  for (uint time = 0; time < NR_SAMPLES_PER_CHANNEL / COHERENT_STOKES_TIME_INTEGRATION_FACTOR; time++) {
-    float stokesI = 0;
-#if NR_COHERENT_STOKES == 4
-    float stokesQ = 0, halfStokesU = 0, halfStokesV = 0;
-#endif
-
-    if (doR) {
-      for (uint t = 0; t < COHERENT_STOKES_TIME_INTEGRATION_FACTOR; t++) {
-        float4 sample = (*complexVoltages)[channelR][time][t][tabR];
-        float2 X = sample.xy, Y = sample.zw;
-        float powerX = X.x * X.x + X.y * X.y;
-        float powerY = Y.x * Y.x + Y.y * Y.y;
-        stokesI += powerX + powerY;
-#if NR_COHERENT_STOKES == 4
-        stokesQ += powerX - powerY;
-        halfStokesU += X.x * Y.x + X.y * Y.y;
-        halfStokesV += X.y * Y.x - X.x * Y.y;
-#endif
-      }
-
-      tmp[0][tabOffsetR][chOffsetR] = stokesI;
-#if NR_COHERENT_STOKES == 4
-      tmp[1][tabOffsetR][chOffsetR] = stokesQ;
-      tmp[2][tabOffsetR][chOffsetR] = 2 * halfStokesU;
-      tmp[3][tabOffsetR][chOffsetR] = 2 * halfStokesV;
-#endif
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (doW)
-      for (uint stokes = 0; stokes < NR_COHERENT_STOKES; stokes++)
-        (*stokesData)[tabW][stokes][time][channelW] = tmp[stokes][tabOffsetW][chOffsetW];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
-
-
-#if 0
-__kernel void computeStokes(__global void *restrict stokesDataPtr,
-                            __global const void *restrict dedispersedDataPtr)
-{
-  typedef __global float (*StokesType)[NR_TABS][NR_COHERENT_STOKES][NR_SAMPLES_PER_CHANNEL / COHERENT_STOKES_TIME_INTEGRATION_FACTOR][NR_CHANNELS];
-  typedef __global float2 (*DedispersedDataType)[NR_TABS][NR_POLARIZATIONS][NR_CHANNELS][NR_SAMPLES_PER_CHANNEL];
-
-  StokesType stokesData = (StokesType) stokesDataPtr;
-  DedispersedDataType dedispersedData = (DedispersedDataType) dedispersedDataPtr;
-
-  __local float tmp[NR_COHERENT_STOKES][16][17];
-
-  uint timeBase = 16 * get_global_id(1);
-  uint chBase = 16 * get_global_id(2);
-
-  uint timeOffsetR = get_local_id(0) & 15;
-  uint timeR = timeBase + tabOffsetR;
-  uint chOffsetR = get_local_id(0) >> 4;
-  uint channelR = chBase + chOffsetR;
-  bool doR = NR_TABS % 16 == 0 || tabR < NR_TABS;
-
-  uint tabOffsetW = get_local_id(0) >> 4;
-  uint tabW = tabBase + tabOffsetW;
-  uint chOffsetW = get_local_id(0) & 15;
-  uint channelW = chBase + chOffsetW;
-  bool doW = NR_TABS % 16 == 0 || tabW < NR_TABS;
-
-  for (uint time = 0; time < NR_SAMPLES_PER_CHANNEL / COHERENT_STOKES_TIME_INTEGRATION_FACTOR; time++) {
-    float stokesI = 0;
-#if NR_COHERENT_STOKES == 4
-    float stokesQ = 0, halfStokesU = 0, halfStokesV = 0;
-#endif
-
-    if (doR) {
-      for (uint t = 0; t < COHERENT_STOKES_TIME_INTEGRATION_FACTOR; t++) {
-        float4 sample = (*complexVoltages)[channelR][time][t][tabR];
-        float2 X = sample.xy, Y = sample.zw;
-        float powerX = X.x * X.x + X.y * X.y;
-        float powerY = Y.x * Y.x + Y.y * Y.y;
-        stokesI += powerX + powerY;
-#if NR_COHERENT_STOKES == 4
-        stokesQ += powerX - powerY;
-        halfStokesU += X.x * Y.x + X.y * Y.y;
-        halfStokesV += X.y * Y.x - X.x * Y.y;
-#endif
-      }
-
-      tmp[0][tabOffsetR][chOffsetR] = stokesI;
-#if NR_COHERENT_STOKES == 4
-      tmp[1][tabOffsetR][chOffsetR] = stokesQ;
-      tmp[2][tabOffsetR][chOffsetR] = 2 * halfStokesU;
-      tmp[3][tabOffsetR][chOffsetR] = 2 * halfStokesV;
-#endif
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (doW)
-      for (uint stokes = 0; stokes < NR_COHERENT_STOKES; stokes++)
-        (*stokesData)[tabW][stokes][time][channelW] = tmp[stokes][tabOffsetW][chOffsetW];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/CoherentStokes.cl.ok b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/CoherentStokes.cl.ok
deleted file mode 100644
index 07cc1a63b15bfa5a7e73053f2392a854af6fa6cb..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/CoherentStokes.cl.ok
+++ /dev/null
@@ -1,63 +0,0 @@
-__kernel void computeStokes(__global void *restrict stokesDataPtr,
-                            __global const void *restrict complexVoltagesPtr)
-{
-  typedef __global float (*StokesType)[NR_TABS][NR_STOKES][NR_TIMES_PER_BLOCK / STOKES_INTEGRATION_SAMPLES][NR_CHANNELS];
-  typedef __global float4 (*ComplexVoltagesType)[NR_CHANNELS][NR_TIMES_PER_BLOCK / STOKES_INTEGRATION_SAMPLES][STOKES_INTEGRATION_SAMPLES][NR_TABS];
-
-  StokesType stokesData = (StokesType) stokesDataPtr;
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-
-  __local float tmp[NR_STOKES][16][17];
-
-  uint tabBase = 16 * get_global_id(1);
-  uint chBase = 16 * get_global_id(2);
-
-  uint tabOffsetR = get_local_id(0) & 15;
-  uint tabR = tabBase + tabOffsetR;
-  uint chOffsetR = get_local_id(0) >> 4;
-  uint channelR = chBase + chOffsetR;
-  bool doR = NR_TABS % 16 == 0 || tabR < NR_TABS;
-
-  uint tabOffsetW = get_local_id(0) >> 4;
-  uint tabW = tabBase + tabOffsetW;
-  uint chOffsetW = get_local_id(0) & 15;
-  uint channelW = chBase + chOffsetW;
-  bool doW = NR_TABS % 16 == 0 || tabW < NR_TABS;
-
-  for (uint time = 0; time < NR_TIMES_PER_BLOCK / STOKES_INTEGRATION_SAMPLES; time++) {
-    float stokesI = 0;
-#if NR_STOKES == 4
-    float stokesQ = 0, halfStokesU = 0, halfStokesV = 0;
-#endif
-
-    if (doR) {
-      for (uint t = 0; t < STOKES_INTEGRATION_SAMPLES; t++) {
-        float4 sample = (*complexVoltages)[channelR][time][t][tabR];
-        float2 X = sample.xy, Y = sample.zw;
-        float powerX = X.x * X.x + X.y * X.y;
-        float powerY = Y.x * Y.x + Y.y * Y.y;
-        stokesI += powerX + powerY;
-#if NR_STOKES == 4
-        stokesQ += powerX - powerY;
-        halfStokesU += X.x * Y.x + X.y * Y.y;
-        halfStokesV += X.y * Y.x - X.x * Y.y;
-#endif
-      }
-
-      tmp[0][tabOffsetR][chOffsetR] = stokesI;
-#if NR_STOKES == 4
-      tmp[1][tabOffsetR][chOffsetR] = stokesQ;
-      tmp[2][tabOffsetR][chOffsetR] = 2 * halfStokesU;
-      tmp[3][tabOffsetR][chOffsetR] = 2 * halfStokesV;
-#endif
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (doW)
-      for (uint stokes = 0; stokes < NR_STOKES; stokes++)
-        (*stokesData)[tabW][stokes][time][channelW] = tmp[stokes][tabOffsetW][chOffsetW];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/Dedispersion.cl b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/Dedispersion.cl
deleted file mode 100644
index d51a9e1b877309e06012bb0910c0a5ca28ce2cf3..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/Dedispersion.cl
+++ /dev/null
@@ -1,82 +0,0 @@
-//# Dedispersion.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include "math.cl"
-
-
-//        | DM beam pol ch subtime subch. | SB
-// -------+-------------------------------+---
-// taper  |                        x      | x
-// factor | x           x          x      | x
-// sample |    x    x   x  x       x      | x
-
-#define CHANNEL_BANDWIDTH (SUBBAND_BANDWIDTH / NR_CHANNELS)
-#define SUB_CHANNEL_BANDWIDTH (CHANNEL_BANDWIDTH / DEDISPERSION_FFT_SIZE)
-
-typedef __global float2 (*BufferType)[NR_TABS][NR_POLARIZATIONS][NR_CHANNELS][NR_SAMPLES_PER_CHANNEL / DEDISPERSION_FFT_SIZE][DEDISPERSION_FFT_SIZE];
-
-
-__kernel void applyChirp(__global void *bufferPtr,
-                         __global float *DMs,
-                         float subbandFrequency)
-{
-  __local float local_DMs[NR_TABS];
-
-  for (int i = get_local_id(0); i < NR_TABS; i += get_local_size(0))
-    local_DMs[i] = DMs[i] * 2.0f * (float) M_PI * 4.149e15f;
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  BufferType buffer = (BufferType) bufferPtr;
-
-  uint subChannel = get_global_id(0);
-  uint time = get_global_id(1);
-  uint channel = get_global_id(2);
-
-#if NR_CHANNELS > 1
-  float subbandBaseFrequency = subbandFrequency - .5f * (float) SUBBAND_BANDWIDTH;
-  float channel0frequency = subbandBaseFrequency + channel * CHANNEL_BANDWIDTH;
-#else
-  float channel0frequency = subbandFrequency;
-#endif
-
-  float binFrequency = subChannel * SUB_CHANNEL_BANDWIDTH;
-
-  if (subChannel > DEDISPERSION_FFT_SIZE)
-    binFrequency -= CHANNEL_BANDWIDTH;
-
-  float taper = native_rsqrt(1 + pow(binFrequency / (.47f * (float) CHANNEL_BANDWIDTH), 80.0f)) * DEDISPERSION_FFT_SIZE;
-  float frequencyDiv = binFrequency / channel0frequency;
-  float frequencyFac = frequencyDiv * frequencyDiv / (channel0frequency + binFrequency);
-
-  for (uint tab = 0; tab < NR_TABS; tab++) {
-    float DM = local_DMs[tab];
-
-    /* if (DM > 0) */ {
-      float2 sampleX = (*buffer)[tab][0][channel][time][subChannel];
-      float2 sampleY = (*buffer)[tab][1][channel][time][subChannel];
-      float2 factor = cexp(DM * frequencyFac) * taper;
-
-      (*buffer)[tab][0][channel][time][subChannel] = cmul(factor, sampleX);
-      (*buffer)[tab][1][channel][time][subChannel] = cmul(factor, sampleY);
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/IncoherentStokes.cl b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/IncoherentStokes.cl
deleted file mode 100644
index 51edf76e3dcfe4fc92ac0552abb829b7c7738fe4..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/IncoherentStokes.cl
+++ /dev/null
@@ -1,66 +0,0 @@
-//# IncoherentStokes.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-typedef __global float (*IncoherentStokesType)[NR_INCOHERENT_STOKES][NR_SAMPLES_PER_CHANNEL / INCOHERENT_STOKES_TIME_INTEGRATION_FACTOR][NR_CHANNELS];
-typedef __global float4 (*InputType)[NR_STATIONS][NR_CHANNELS][NR_SAMPLES_PER_CHANNEL / INCOHERENT_STOKES_TIME_INTEGRATION_FACTOR][INCOHERENT_STOKES_TIME_INTEGRATION_FACTOR];
-
-
-__kernel void incoherentStokes(__global void *restrict stokesPtr,
-                               __global const void *restrict inputPtr)
-{
-  IncoherentStokesType stokes = (IncoherentStokesType) stokesPtr;
-  InputType input = (InputType) inputPtr;
-
-  uint time = get_global_id(0);
-  uint channel = get_global_id(1);
-
-  if (time >= NR_SAMPLES_PER_CHANNEL / INCOHERENT_STOKES_TIME_INTEGRATION_FACTOR)
-    return;
-
-  float stokesI = 0;
-#if NR_INCOHERENT_STOKES == 4
-  float stokesQ = 0, halfStokesU = 0, halfStokesV = 0;
-#endif
-
-  for (uint station = 0; station < NR_STATIONS; station++) {
-    for (uint t = 0; t < INCOHERENT_STOKES_TIME_INTEGRATION_FACTOR; t++) {
-      float4 sample = (*input)[station][channel][time][t];
-      float2 X = sample.xy;
-      float2 Y = sample.zw;
-      float powerX = X.x * X.x + X.y * X.y;
-      float powerY = Y.x * Y.x + Y.y * Y.y;
-
-      stokesI += powerX + powerY;
-#if NR_INCOHERENT_STOKES == 4
-      stokesQ += powerX - powerY;
-      halfStokesU += X.x * Y.x + X.y * Y.y;
-      halfStokesV += X.y * Y.x - X.x * Y.y;
-#endif
-    }
-  }
-
-  (*stokes)[0][time][channel] = stokesI;
-#if NR_INCOHERENT_STOKES == 4
-  (*stokes)[1][time][channel] = stokesQ;
-  (*stokes)[2][time][channel] = 2 * halfStokesU;
-  (*stokes)[3][time][channel] = 2 * halfStokesV;
-#endif
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/IntToFloat.cl b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/IntToFloat.cl
deleted file mode 100644
index 4ead4d543f73899bc8f113d7bd6794eac4ef88d5..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/IntToFloat.cl
+++ /dev/null
@@ -1,46 +0,0 @@
-//# IntToFloat.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#if NR_BITS_PER_SAMPLE == 16
-typedef short2 SampleType;
-#elif NR_BITS_PER_SAMPLE == 8
-typedef char2 SampleType;
-#else
-#error unsupport NR_BITS_PER_SAMPLE
-#endif
-
-typedef __global SampleType (*SampledDataType)[NR_STATIONS][NR_SAMPLES_PER_SUBBAND][NR_POLARIZATIONS];
-typedef __global float2 (*ConvertedDataType)[NR_STATIONS][NR_POLARIZATIONS][NR_SAMPLES_PER_SUBBAND];
-
-
-__kernel void intToFloat(__global void *restrict convertedDataPtr,
-                         __global const void *restrict sampledDataPtr)
-{
-  ConvertedDataType convertedData = (ConvertedDataType) convertedDataPtr;
-  SampledDataType sampledData = (SampledDataType) sampledDataPtr;
-
-  uint station = get_global_id(1);
-
-  for (uint time = get_local_id(0); time < NR_SAMPLES_PER_SUBBAND; time += get_local_size(0)) {
-    (*convertedData)[station][0][time] = convert_float2((*sampledData)[station][time][0]);
-    (*convertedData)[station][1][time] = convert_float2((*sampledData)[station][time][1]);
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/Transpose.cl b/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/Transpose.cl
deleted file mode 100644
index 971883fe6284c0ddd6500e9817f911094f061875..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/BeamFormer/Transpose.cl
+++ /dev/null
@@ -1,109 +0,0 @@
-//# Transpose.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#if 0
-typedef __global float2 (*TransposedDataType)[NR_TABS][NR_POLARIZATIONS][NR_SAMPLES_PER_CHANNEL][NR_CHANNELS];
-typedef __global float4 (*ComplexVoltagesType)[NR_CHANNELS][NR_SAMPLES_PER_CHANNEL][NR_TABS];
-
-__kernel void transposeComplexVoltages(__global void *restrict transposedDataPtr,
-                                       __global const void *restrict complexVoltagesPtr)
-{
-  TransposedDataType transposedData = (TransposedDataType) transposedDataPtr;
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-
-  __local float4 tmp[16][17];
-
-  uint tabBase = 16 * get_global_id(1);
-  uint chBase = 16 * get_global_id(2);
-
-  uint tabOffsetR = get_local_id(0) & 15;
-  uint tabR = tabBase + tabOffsetR;
-  uint chOffsetR = get_local_id(0) >> 4;
-  uint channelR = chBase + chOffsetR;
-  bool doR = NR_TABS % 16 == 0 || tabR < NR_TABS;
-
-  uint tabOffsetW = get_local_id(0) >> 4;
-  uint tabW = tabBase + tabOffsetW;
-  uint chOffsetW = get_local_id(0) & 15;
-  uint channelW = chBase + chOffsetW;
-  bool doW = NR_TABS % 16 == 0 || tabW < NR_TABS;
-
-  for (int time = 0; time < NR_SAMPLES_PER_CHANNEL; time++) {
-    if (doR)
-      tmp[tabOffsetR][chOffsetR] = (*complexVoltages)[channelR][time][tabR];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (doW) {
-      float4 sample = tmp[tabOffsetW][chOffsetW];
-      (*transposedData)[tabW][0][time][channelW] = sample.xy;
-      (*transposedData)[tabW][1][time][channelW] = sample.zw;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
-
-#else
-
-typedef __global float2 (*TransposedDataType)[NR_TABS][NR_POLARIZATIONS][NR_CHANNELS][NR_SAMPLES_PER_CHANNEL];
-typedef __global float4 (*ComplexVoltagesType)[NR_CHANNELS][NR_SAMPLES_PER_CHANNEL][NR_TABS];
-
-__kernel void transposeComplexVoltages(__global void *restrict transposedDataPtr,
-                                       __global const void *restrict complexVoltagesPtr)
-{
-  TransposedDataType transposedData = (TransposedDataType) transposedDataPtr;
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-
-  __local float4 tmp[16][17];
-
-  uint tabBase = 16 * get_global_id(1);
-  uint timeBase = 16 * get_global_id(2);
-
-  uint tabOffsetR = get_local_id(0) & 15;
-  uint tabR = tabBase + tabOffsetR;
-  uint timeOffsetR = get_local_id(0) >> 4;
-  uint timeR = timeBase + timeOffsetR;
-  bool doR = NR_TABS % 16 == 0 || tabR < NR_TABS;
-
-  uint tabOffsetW = get_local_id(0) >> 4;
-  uint tabW = tabBase + tabOffsetW;
-  uint timeOffsetW = get_local_id(0) & 15;
-  uint timeW = timeBase + timeOffsetW;
-  bool doW = NR_TABS % 16 == 0 || tabW < NR_TABS;
-
-  for (int channel = 0; channel < NR_CHANNELS; channel++) {
-    if (doR)
-      tmp[tabOffsetR][timeOffsetR] = (*complexVoltages)[timeR][channel][tabR];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (doW) {
-      float4 sample = tmp[tabOffsetW][timeOffsetW];
-      (*transposedData)[tabW][0][channel][timeW] = sample.xy;
-      (*transposedData)[tabW][1][channel][timeW] = sample.zw;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/CMakeLists.txt b/RTCP/Cobalt/GPUProc/src/opencl/CMakeLists.txt
deleted file mode 100644
index 3923ababad474f1e551249e4c93aabe5ef022cd1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-install(FILES
-  Correlator.cl
-  DelayAndBandPass.cl
-  #fft2.cl
-  FFT.cl
-  FIR.cl
-  math.cl
-  NewCorrelator.cl
-  DESTINATION share/gpu/kernels)
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Correlator.cl b/RTCP/Cobalt/GPUProc/src/opencl/Correlator.cl
deleted file mode 100644
index 977f8e90791807e4c8f9833d900054478bcba6e6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Correlator.cl
+++ /dev/null
@@ -1,641 +0,0 @@
-//# Correlator.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include "math.cl"
-
-#define NR_BASELINES     (NR_STATIONS * (NR_STATIONS + 1) / 2)
-
-#if NR_STATIONS == 288
-#  if defined NVIDIA_CUDA
-#    define BLOCK_SIZE	 8
-#  elif NR_SAMPLES_PER_CHANNEL % 6 == 0
-#    define BLOCK_SIZE	 6
-#  else
-#    define BLOCK_SIZE	 4
-#  endif
-#elif NR_SAMPLES_PER_CHANNEL % 24 == 0
-#  define BLOCK_SIZE	 24
-#else
-#  define BLOCK_SIZE	 16
-#endif
-
-typedef __global fcomplex2 (*CorrectedDataType)[NR_STATIONS][NR_CHANNELS][NR_SAMPLES_PER_CHANNEL];
-typedef __global fcomplex4 (*VisibilitiesType)[NR_BASELINES][NR_CHANNELS];
-
-
-//#pragma OPENCL EXTENSION cl_intel_printf : enable
-
-/*!
- * Computes correlations between all pairs of stations (baselines) and X,Y
- * polarizations. Also computes all station (and pol) auto-correlations.
- *
- * We consider the output space shaped as a triangle of S*(S-1)/2 full
- * correlations, plus S auto-correlations at the hypothenuse (S = NR_STATIONS).
- * This correlator consists of various versions, correlate_NxN, that differ in
- * used register block size. We have 1x1 (this kernel), 2x2, 3x3, and 4x4.
- * Measure, then select the fastest for your platform.
- *
- * Beyond dozens of antenna fields (exact number depends on observation,
- * software and hardware parameters), our kernels in NewCorrelator.cl are
- * significantly faster than these correlator kernels.
- *
- * \param[out] visibilitiesPtr         2D output array of visibilities. Each visibility contains the 4 polarization pairs, XX, XY, YX, YY, each of complex float type.
- * \param[in]  correctedDataPtr        3D input array of samples. Each sample contains the 2 polarizations X, Y, each of complex float type.
- *
- * Pre-processor input symbols (some are tied to the execution configuration)
- * Symbol                  | Valid Values            | Description
- * ----------------------- | ----------------------- | -----------
- * NR_STATIONS             | >= 1                    | number of antenna fields
- * NR_SAMPLES_PER_CHANNEL  | multiple of BLOCK_SIZE  | number of input samples per channel
- * NR_CHANNELS             | > 1 (TODO: supp 1 ch)   | number of frequency channels per subband
- * Note that for > 1 channels, NR_CHANNELS-1 channels are actually processed,
- * because the second PPF has "corrupted" channel 0. (An inverse PPF can disambiguate.) \n
- * Note that this kernel assumes (but does not use) NR_POLARIZATIONS == 2.
- *
- * Execution configuration:
- * - Work dim == 2  (can be 1 iff NR_CHANNELS <= 2)
- *     + Inner dim: the NxN baseline(s) the thread processes
- *     + Outer dim: the channel the thread processes
- * - Work group size: (no restrictions (but processes BLOCK_SIZE * NR_STATIONS), 1) \n
- *   Each work group loads samples from all stations to do the NxN set of correlations
- *   for one of the channels. Some threads in _NxN kernels do not write off-edge output.
- * - Global size: (>= NR_BASELINES and a multiple of work group size, number of actually processed channels)
- */
-__kernel void correlate(__global void *visibilitiesPtr,
-                        __global const void *correctedDataPtr
-                        )
-{
-  VisibilitiesType visibilities = (VisibilitiesType) visibilitiesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-
-  __local float samples[4][BLOCK_SIZE][NR_STATIONS | 1]; // avoid power-of-2
-
-  uint baseline = get_global_id(0);
-  uint channel = get_global_id(1) + 1;
-  uint stat_0 = convert_uint_rtz(sqrt(convert_float(8 * baseline + 1)) - 0.99999f) / 2;
-  uint stat_A = baseline - stat_0 * (stat_0 + 1) / 2;
-
-  float4 visR = (float4) 0, visI = (float4) 0;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += BLOCK_SIZE) {
-    // load data into local memory
-    for (uint i = get_local_id(0); i < BLOCK_SIZE * NR_STATIONS; i += get_local_size(0)) {
-      uint time = i % BLOCK_SIZE;
-      uint stat = i / BLOCK_SIZE;
-
-      fcomplex2 sample = (*correctedData)[stat][channel][major + time];
-
-      samples[0][time][stat] = sample.x;
-      samples[1][time][stat] = sample.y;
-      samples[2][time][stat] = sample.z;
-      samples[3][time][stat] = sample.w;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    // compute correlations
-    if (baseline < NR_BASELINES) {
-      for (uint time = 0; time < BLOCK_SIZE; time++) {
-        fcomplex2 sample_1, sample_A;
-        sample_1.x = samples[0][time][stat_0];
-        sample_1.y = samples[1][time][stat_0];
-        sample_1.z = samples[2][time][stat_0];
-        sample_1.w = samples[3][time][stat_0];
-        sample_A.x = samples[0][time][stat_A];
-        sample_A.y = samples[1][time][stat_A];
-        sample_A.z = samples[2][time][stat_A];
-        sample_A.w = samples[3][time][stat_A];
-
-        visR += sample_1.xxzz * sample_A.xzxz;
-        visI += sample_1.yyww * sample_A.xzxz;
-        visR += sample_1.yyww * sample_A.ywyw;
-        visI -= sample_1.xxzz * sample_A.ywyw;
-      }
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-  // write visibilities
-  if (baseline < NR_BASELINES)
-    (*visibilities)[baseline][channel] = (fcomplex4) { visR.x, visI.x, visR.y, visI.y, visR.z, visI.z, visR.w, visI.w };
-}
-
-
-/*!
- * See the correlate() kernel.
- */
-__kernel void correlate_2x2(__global void *visibilitiesPtr,
-                            __global const void *correctedDataPtr
-                            )
-{
-  VisibilitiesType visibilities = (VisibilitiesType) visibilitiesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-
-  __local fcomplex2 samples[2][BLOCK_SIZE][(NR_STATIONS + 1) / 2 | 1]; // avoid power-of-2
-
-  uint channel = get_global_id(1) + 1;
-  uint block = get_global_id(0);
-
-  uint x = convert_uint_rtz(sqrt(convert_float(8 * block + 1)) - 0.99999f) / 2;
-  uint y = block - x * (x + 1) / 2;
-
-  uint stat_A = 2 * x;
-
-  bool compute_correlations = stat_A < NR_STATIONS;
-
-  float4 vis_0A_r = (float4) 0, vis_0A_i = (float4) 0;
-  float4 vis_0B_r = (float4) 0, vis_0B_i = (float4) 0;
-  float4 vis_1A_r = (float4) 0, vis_1A_i = (float4) 0;
-  float4 vis_1B_r = (float4) 0, vis_1B_i = (float4) 0;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += BLOCK_SIZE) {
-    // load data into local memory
-#pragma unroll 1
-    for (uint i = get_local_id(0); i < BLOCK_SIZE * NR_STATIONS; i += get_local_size(0)) {
-      uint time = i % BLOCK_SIZE;
-      uint stat = i / BLOCK_SIZE;
-
-      samples[stat & 1][time][stat / 2] = (*correctedData)[stat][channel][major + time];
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (compute_correlations) {
-      for (uint time = 0; time < BLOCK_SIZE; time++) {
-        float4 sample_0 = samples[0][time][y];
-        float4 sample_A = samples[0][time][x];
-        float4 sample_B = samples[1][time][x];
-        float4 sample_1 = samples[1][time][y];
-
-        vis_0A_r += sample_0.xxzz * sample_A.xzxz;
-        vis_0A_i += sample_0.yyww * sample_A.xzxz;
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_1A_r += sample_1.xxzz * sample_A.xzxz;
-        vis_1A_i += sample_1.yyww * sample_A.xzxz;
-        vis_1B_r += sample_1.xxzz * sample_B.xzxz;
-        vis_1B_i += sample_1.yyww * sample_B.xzxz;
-
-        vis_0A_r += sample_0.yyww * sample_A.ywyw;
-        vis_0A_i -= sample_0.xxzz * sample_A.ywyw;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-        vis_1A_r += sample_1.yyww * sample_A.ywyw;
-        vis_1A_i -= sample_1.xxzz * sample_A.ywyw;
-        vis_1B_r += sample_1.yyww * sample_B.ywyw;
-        vis_1B_i -= sample_1.xxzz * sample_B.ywyw;
-      }
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-  // write visibilities
-  uint stat_0 = 2 * y;
-  uint stat_1 = stat_0 + 1;
-  uint stat_B = stat_A + 1;
-  bool do_baseline_0A = stat_A < NR_STATIONS;
-  bool do_baseline_0B = stat_B < NR_STATIONS;
-  bool do_baseline_1A = do_baseline_0A && stat_1 <= stat_A;
-  bool do_baseline_1B = do_baseline_0B;
-
-  if (do_baseline_0A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0A_r.x, vis_0A_i.x, vis_0A_r.y, vis_0A_i.y, vis_0A_r.z, vis_0A_i.z, vis_0A_r.w, vis_0A_i.w };
-  }
-
-  if (do_baseline_0B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0B_r.x, vis_0B_i.x, vis_0B_r.y, vis_0B_i.y, vis_0B_r.z, vis_0B_i.z, vis_0B_r.w, vis_0B_i.w };
-  }
-
-  if (do_baseline_1A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1A_r.x, vis_1A_i.x, vis_1A_r.y, vis_1A_i.y, vis_1A_r.z, vis_1A_i.z, vis_1A_r.w, vis_1A_i.w };
-  }
-
-  if (do_baseline_1B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1B_r.x, vis_1B_i.x, vis_1B_r.y, vis_1B_i.y, vis_1B_r.z, vis_1B_i.z, vis_1B_r.w, vis_1B_i.w };
-  }
-}
-
-
-/*!
- * See the correlate() kernel.
- */
-__kernel void correlate_3x3(__global void *visibilitiesPtr,
-                            __global const void *correctedDataPtr
-                            )
-{
-  VisibilitiesType visibilities = (VisibilitiesType) visibilitiesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-
-  __local fcomplex2 samples[3][BLOCK_SIZE][(NR_STATIONS + 2) / 3 | 1]; // avoid power-of-2
-
-  uint channel = get_global_id(1) + 1;
-  uint block = get_global_id(0);
-
-  uint x = convert_uint_rtz(sqrt(convert_float(8 * block + 1)) - 0.99999f) / 2;
-  uint y = block - x * (x + 1) / 2;
-
-  uint stat_A = 3 * x;
-
-  bool compute_correlations = stat_A < NR_STATIONS;
-
-  float4 vis_0A_r = (float4) 0, vis_0A_i = (float4) 0;
-  float4 vis_0B_r = (float4) 0, vis_0B_i = (float4) 0;
-  float4 vis_0C_r = (float4) 0, vis_0C_i = (float4) 0;
-  float4 vis_1A_r = (float4) 0, vis_1A_i = (float4) 0;
-  float4 vis_1B_r = (float4) 0, vis_1B_i = (float4) 0;
-  float4 vis_1C_r = (float4) 0, vis_1C_i = (float4) 0;
-  float4 vis_2A_r = (float4) 0, vis_2A_i = (float4) 0;
-  float4 vis_2B_r = (float4) 0, vis_2B_i = (float4) 0;
-  float4 vis_2C_r = (float4) 0, vis_2C_i = (float4) 0;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += BLOCK_SIZE) {
-    // load data into local memory
-#pragma unroll 1
-    for (uint i = get_local_id(0); i < BLOCK_SIZE * NR_STATIONS; i += get_local_size(0)) {
-      uint time = i % BLOCK_SIZE;
-      uint stat = i / BLOCK_SIZE;
-
-      samples[stat % 3][time][stat / 3] = (*correctedData)[stat][channel][major + time];
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (compute_correlations) {
-      for (uint time = 0; time < BLOCK_SIZE; time++) {
-        fcomplex2 sample_0 = samples[0][time][y];
-        fcomplex2 sample_A = samples[0][time][x];
-        fcomplex2 sample_B = samples[1][time][x];
-        fcomplex2 sample_C = samples[2][time][x];
-        fcomplex2 sample_1 = samples[1][time][y];
-        fcomplex2 sample_2 = samples[2][time][y];
-
-        vis_0A_r += sample_0.xxzz * sample_A.xzxz;
-        vis_0A_i += sample_0.yyww * sample_A.xzxz;
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_0C_r += sample_0.xxzz * sample_C.xzxz;
-        vis_0C_i += sample_0.yyww * sample_C.xzxz;
-        vis_1A_r += sample_1.xxzz * sample_A.xzxz;
-        vis_1A_i += sample_1.yyww * sample_A.xzxz;
-        vis_1B_r += sample_1.xxzz * sample_B.xzxz;
-        vis_1B_i += sample_1.yyww * sample_B.xzxz;
-        vis_1C_r += sample_1.xxzz * sample_C.xzxz;
-        vis_1C_i += sample_1.yyww * sample_C.xzxz;
-        vis_2A_r += sample_2.xxzz * sample_A.xzxz;
-        vis_2A_i += sample_2.yyww * sample_A.xzxz;
-        vis_2B_r += sample_2.xxzz * sample_B.xzxz;
-        vis_2B_i += sample_2.yyww * sample_B.xzxz;
-        vis_2C_r += sample_2.xxzz * sample_C.xzxz;
-        vis_2C_i += sample_2.yyww * sample_C.xzxz;
-
-        vis_0A_r += sample_0.yyww * sample_A.ywyw;
-        vis_0A_i -= sample_0.xxzz * sample_A.ywyw;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-        vis_0C_r += sample_0.yyww * sample_C.ywyw;
-        vis_0C_i -= sample_0.xxzz * sample_C.ywyw;
-        vis_1A_r += sample_1.yyww * sample_A.ywyw;
-        vis_1A_i -= sample_1.xxzz * sample_A.ywyw;
-        vis_1B_r += sample_1.yyww * sample_B.ywyw;
-        vis_1B_i -= sample_1.xxzz * sample_B.ywyw;
-        vis_1C_r += sample_1.yyww * sample_C.ywyw;
-        vis_1C_i -= sample_1.xxzz * sample_C.ywyw;
-        vis_2A_r += sample_2.yyww * sample_A.ywyw;
-        vis_2A_i -= sample_2.xxzz * sample_A.ywyw;
-        vis_2B_r += sample_2.yyww * sample_B.ywyw;
-        vis_2B_i -= sample_2.xxzz * sample_B.ywyw;
-        vis_2C_r += sample_2.yyww * sample_C.ywyw;
-        vis_2C_i -= sample_2.xxzz * sample_C.ywyw;
-      }
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-  // write visibilities
-  uint stat_0 = 3 * y;
-  uint stat_1 = stat_0 + 1;
-  uint stat_2 = stat_0 + 2;
-  uint stat_B = stat_A + 1;
-  uint stat_C = stat_A + 2;
-
-  bool do_baseline_0A = stat_0 < NR_STATIONS && stat_A < NR_STATIONS && stat_0 <= stat_A;
-  bool do_baseline_0B = stat_0 < NR_STATIONS && stat_B < NR_STATIONS && stat_0 <= stat_B;
-  bool do_baseline_0C = stat_0 < NR_STATIONS && stat_C < NR_STATIONS && stat_0 <= stat_C;
-  bool do_baseline_1A = stat_1 < NR_STATIONS && stat_A < NR_STATIONS && stat_1 <= stat_A;
-  bool do_baseline_1B = stat_1 < NR_STATIONS && stat_B < NR_STATIONS && stat_1 <= stat_B;
-  bool do_baseline_1C = stat_1 < NR_STATIONS && stat_C < NR_STATIONS && stat_1 <= stat_C;
-  bool do_baseline_2A = stat_2 < NR_STATIONS && stat_A < NR_STATIONS && stat_2 <= stat_A;
-  bool do_baseline_2B = stat_2 < NR_STATIONS && stat_B < NR_STATIONS && stat_2 <= stat_B;
-  bool do_baseline_2C = stat_2 < NR_STATIONS && stat_C < NR_STATIONS && stat_2 <= stat_C;
-
-  if (do_baseline_0A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0A_r.x, vis_0A_i.x, vis_0A_r.y, vis_0A_i.y, vis_0A_r.z, vis_0A_i.z, vis_0A_r.w, vis_0A_i.w };
-  }
-
-  if (do_baseline_0B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0B_r.x, vis_0B_i.x, vis_0B_r.y, vis_0B_i.y, vis_0B_r.z, vis_0B_i.z, vis_0B_r.w, vis_0B_i.w };
-  }
-
-  if (do_baseline_0C) {
-    uint baseline = (stat_C * (stat_C + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0C_r.x, vis_0C_i.x, vis_0C_r.y, vis_0C_i.y, vis_0C_r.z, vis_0C_i.z, vis_0C_r.w, vis_0C_i.w };
-  }
-
-  if (do_baseline_1A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1A_r.x, vis_1A_i.x, vis_1A_r.y, vis_1A_i.y, vis_1A_r.z, vis_1A_i.z, vis_1A_r.w, vis_1A_i.w };
-  }
-
-  if (do_baseline_1B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1B_r.x, vis_1B_i.x, vis_1B_r.y, vis_1B_i.y, vis_1B_r.z, vis_1B_i.z, vis_1B_r.w, vis_1B_i.w };
-  }
-
-  if (do_baseline_1C) {
-    uint baseline = (stat_C * (stat_C + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1C_r.x, vis_1C_i.x, vis_1C_r.y, vis_1C_i.y, vis_1C_r.z, vis_1C_i.z, vis_1C_r.w, vis_1C_i.w };
-  }
-
-  if (do_baseline_2A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_2;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_2A_r.x, vis_2A_i.x, vis_2A_r.y, vis_2A_i.y, vis_2A_r.z, vis_2A_i.z, vis_2A_r.w, vis_2A_i.w };
-  }
-
-  if (do_baseline_2B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_2;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_2B_r.x, vis_2B_i.x, vis_2B_r.y, vis_2B_i.y, vis_2B_r.z, vis_2B_i.z, vis_2B_r.w, vis_2B_i.w };
-  }
-
-  if (do_baseline_2C) {
-    uint baseline = (stat_C * (stat_C + 1) / 2) + stat_2;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_2C_r.x, vis_2C_i.x, vis_2C_r.y, vis_2C_i.y, vis_2C_r.z, vis_2C_i.z, vis_2C_r.w, vis_2C_i.w };
-  }
-}
-
-
-/*!
- * See the correlate() kernel.
- */
-__kernel void correlate_4x4(__global void *visibilitiesPtr,
-                            __global const void *correctedDataPtr
-                            )
-{
-  VisibilitiesType visibilities = (VisibilitiesType) visibilitiesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-
-  __local fcomplex2 samples[4][BLOCK_SIZE][(NR_STATIONS + 3) / 4 | 1]; // avoid power-of-2
-
-  uint channel = get_global_id(1) + 1;
-  uint block = get_global_id(0);
-
-  uint x = convert_uint_rtz(sqrt(convert_float(8 * block + 1)) - 0.99999f) / 2;
-  uint y = block - x * (x + 1) / 2;
-
-  uint stat_A = 4 * x;
-
-  bool compute_correlations = stat_A < NR_STATIONS;
-
-  float4 vis_0A_r = (float4) 0, vis_0A_i = (float4) 0;
-  float4 vis_0B_r = (float4) 0, vis_0B_i = (float4) 0;
-  float4 vis_0C_r = (float4) 0, vis_0C_i = (float4) 0;
-  float4 vis_0D_r = (float4) 0, vis_0D_i = (float4) 0;
-  float4 vis_1A_r = (float4) 0, vis_1A_i = (float4) 0;
-  float4 vis_1B_r = (float4) 0, vis_1B_i = (float4) 0;
-  float4 vis_1C_r = (float4) 0, vis_1C_i = (float4) 0;
-  float4 vis_1D_r = (float4) 0, vis_1D_i = (float4) 0;
-  float4 vis_2A_r = (float4) 0, vis_2A_i = (float4) 0;
-  float4 vis_2B_r = (float4) 0, vis_2B_i = (float4) 0;
-  float4 vis_2C_r = (float4) 0, vis_2C_i = (float4) 0;
-  float4 vis_2D_r = (float4) 0, vis_2D_i = (float4) 0;
-  float4 vis_3A_r = (float4) 0, vis_3A_i = (float4) 0;
-  float4 vis_3B_r = (float4) 0, vis_3B_i = (float4) 0;
-  float4 vis_3C_r = (float4) 0, vis_3C_i = (float4) 0;
-  float4 vis_3D_r = (float4) 0, vis_3D_i = (float4) 0;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += BLOCK_SIZE) {
-    // load data into local memory
-#pragma unroll 1
-    for (uint i = get_local_id(0); i < BLOCK_SIZE * NR_STATIONS; i += get_local_size(0)) {
-      uint time = i % BLOCK_SIZE;
-      uint stat = i / BLOCK_SIZE;
-
-      samples[stat % 4][time][stat / 4] = (*correctedData)[stat][channel][major + time];
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (compute_correlations) {
-      for (uint time = 0; time < BLOCK_SIZE; time++) {
-        fcomplex2 sample_0 = samples[0][time][y];
-        fcomplex2 sample_A = samples[0][time][x];
-        fcomplex2 sample_B = samples[1][time][x];
-        fcomplex2 sample_C = samples[2][time][x];
-        fcomplex2 sample_D = samples[3][time][x];
-        fcomplex2 sample_1 = samples[1][time][y];
-        fcomplex2 sample_2 = samples[2][time][y];
-        fcomplex2 sample_3 = samples[3][time][y];
-
-        vis_0A_r += sample_0.xxzz * sample_A.xzxz;
-        vis_0A_i += sample_0.yyww * sample_A.xzxz;
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_0C_r += sample_0.xxzz * sample_C.xzxz;
-        vis_0C_i += sample_0.yyww * sample_C.xzxz;
-        vis_0D_r += sample_0.xxzz * sample_D.xzxz;
-        vis_0D_i += sample_0.yyww * sample_D.xzxz;
-        vis_1A_r += sample_1.xxzz * sample_A.xzxz;
-        vis_1A_i += sample_1.yyww * sample_A.xzxz;
-        vis_1B_r += sample_1.xxzz * sample_B.xzxz;
-        vis_1B_i += sample_1.yyww * sample_B.xzxz;
-        vis_1C_r += sample_1.xxzz * sample_C.xzxz;
-        vis_1C_i += sample_1.yyww * sample_C.xzxz;
-        vis_1D_r += sample_1.xxzz * sample_D.xzxz;
-        vis_1D_i += sample_1.yyww * sample_D.xzxz;
-        vis_2A_r += sample_2.xxzz * sample_A.xzxz;
-        vis_2A_i += sample_2.yyww * sample_A.xzxz;
-        vis_2B_r += sample_2.xxzz * sample_B.xzxz;
-        vis_2B_i += sample_2.yyww * sample_B.xzxz;
-        vis_2C_r += sample_2.xxzz * sample_C.xzxz;
-        vis_2C_i += sample_2.yyww * sample_C.xzxz;
-        vis_2D_r += sample_2.xxzz * sample_D.xzxz;
-        vis_2D_i += sample_2.yyww * sample_D.xzxz;
-        vis_3A_r += sample_3.xxzz * sample_A.xzxz;
-        vis_3A_i += sample_3.yyww * sample_A.xzxz;
-        vis_3B_r += sample_3.xxzz * sample_B.xzxz;
-        vis_3B_i += sample_3.yyww * sample_B.xzxz;
-        vis_3C_r += sample_3.xxzz * sample_C.xzxz;
-        vis_3C_i += sample_3.yyww * sample_C.xzxz;
-        vis_3D_r += sample_3.xxzz * sample_D.xzxz;
-        vis_3D_i += sample_3.yyww * sample_D.xzxz;
-
-        vis_0A_r += sample_0.yyww * sample_A.ywyw;
-        vis_0A_i -= sample_0.xxzz * sample_A.ywyw;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-        vis_0C_r += sample_0.yyww * sample_C.ywyw;
-        vis_0C_i -= sample_0.xxzz * sample_C.ywyw;
-        vis_0D_r += sample_0.yyww * sample_D.ywyw;
-        vis_0D_i -= sample_0.xxzz * sample_D.ywyw;
-        vis_1A_r += sample_1.yyww * sample_A.ywyw;
-        vis_1A_i -= sample_1.xxzz * sample_A.ywyw;
-        vis_1B_r += sample_1.yyww * sample_B.ywyw;
-        vis_1B_i -= sample_1.xxzz * sample_B.ywyw;
-        vis_1C_r += sample_1.yyww * sample_C.ywyw;
-        vis_1C_i -= sample_1.xxzz * sample_C.ywyw;
-        vis_1D_r += sample_1.yyww * sample_D.ywyw;
-        vis_1D_i -= sample_1.xxzz * sample_D.ywyw;
-        vis_2A_r += sample_2.yyww * sample_A.ywyw;
-        vis_2A_i -= sample_2.xxzz * sample_A.ywyw;
-        vis_2B_r += sample_2.yyww * sample_B.ywyw;
-        vis_2B_i -= sample_2.xxzz * sample_B.ywyw;
-        vis_2C_r += sample_2.yyww * sample_C.ywyw;
-        vis_2C_i -= sample_2.xxzz * sample_C.ywyw;
-        vis_2D_r += sample_2.yyww * sample_D.ywyw;
-        vis_2D_i -= sample_2.xxzz * sample_D.ywyw;
-        vis_3A_r += sample_3.yyww * sample_A.ywyw;
-        vis_3A_i -= sample_3.xxzz * sample_A.ywyw;
-        vis_3B_r += sample_3.yyww * sample_B.ywyw;
-        vis_3B_i -= sample_3.xxzz * sample_B.ywyw;
-        vis_3C_r += sample_3.yyww * sample_C.ywyw;
-        vis_3C_i -= sample_3.xxzz * sample_C.ywyw;
-        vis_3D_r += sample_3.yyww * sample_D.ywyw;
-        vis_3D_i -= sample_3.xxzz * sample_D.ywyw;
-      }
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-  // write visibilities
-  uint stat_0 = 4 * y;
-  uint stat_1 = stat_0 + 1;
-  uint stat_2 = stat_0 + 2;
-  uint stat_3 = stat_0 + 3;
-  uint stat_B = stat_A + 1;
-  uint stat_C = stat_A + 2;
-  uint stat_D = stat_A + 3;
-
-  bool do_baseline_0A = stat_0 < NR_STATIONS && stat_A < NR_STATIONS && stat_0 <= stat_A;
-  bool do_baseline_0B = stat_0 < NR_STATIONS && stat_B < NR_STATIONS && stat_0 <= stat_B;
-  bool do_baseline_0C = stat_0 < NR_STATIONS && stat_C < NR_STATIONS && stat_0 <= stat_C;
-  bool do_baseline_0D = stat_0 < NR_STATIONS && stat_D < NR_STATIONS && stat_0 <= stat_D;
-  bool do_baseline_1A = stat_1 < NR_STATIONS && stat_A < NR_STATIONS && stat_1 <= stat_A;
-  bool do_baseline_1B = stat_1 < NR_STATIONS && stat_B < NR_STATIONS && stat_1 <= stat_B;
-  bool do_baseline_1C = stat_1 < NR_STATIONS && stat_C < NR_STATIONS && stat_1 <= stat_C;
-  bool do_baseline_1D = stat_1 < NR_STATIONS && stat_D < NR_STATIONS && stat_1 <= stat_D;
-  bool do_baseline_2A = stat_2 < NR_STATIONS && stat_A < NR_STATIONS && stat_2 <= stat_A;
-  bool do_baseline_2B = stat_2 < NR_STATIONS && stat_B < NR_STATIONS && stat_2 <= stat_B;
-  bool do_baseline_2C = stat_2 < NR_STATIONS && stat_C < NR_STATIONS && stat_2 <= stat_C;
-  bool do_baseline_2D = stat_2 < NR_STATIONS && stat_D < NR_STATIONS && stat_2 <= stat_D;
-  bool do_baseline_3A = stat_3 < NR_STATIONS && stat_A < NR_STATIONS && stat_3 <= stat_A;
-  bool do_baseline_3B = stat_3 < NR_STATIONS && stat_B < NR_STATIONS && stat_3 <= stat_B;
-  bool do_baseline_3C = stat_3 < NR_STATIONS && stat_C < NR_STATIONS && stat_3 <= stat_C;
-  bool do_baseline_3D = stat_3 < NR_STATIONS && stat_D < NR_STATIONS && stat_3 <= stat_D;
-
-  if (do_baseline_0A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0A_r.x, vis_0A_i.x, vis_0A_r.y, vis_0A_i.y, vis_0A_r.z, vis_0A_i.z, vis_0A_r.w, vis_0A_i.w };
-  }
-
-  if (do_baseline_0B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0B_r.x, vis_0B_i.x, vis_0B_r.y, vis_0B_i.y, vis_0B_r.z, vis_0B_i.z, vis_0B_r.w, vis_0B_i.w };
-  }
-
-  if (do_baseline_0C) {
-    uint baseline = (stat_C * (stat_C + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0C_r.x, vis_0C_i.x, vis_0C_r.y, vis_0C_i.y, vis_0C_r.z, vis_0C_i.z, vis_0C_r.w, vis_0C_i.w };
-  }
-
-  if (do_baseline_0D) {
-    uint baseline = (stat_D * (stat_D + 1) / 2) + stat_0;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_0D_r.x, vis_0D_i.x, vis_0D_r.y, vis_0D_i.y, vis_0D_r.z, vis_0D_i.z, vis_0D_r.w, vis_0D_i.w };
-  }
-
-  if (do_baseline_1A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1A_r.x, vis_1A_i.x, vis_1A_r.y, vis_1A_i.y, vis_1A_r.z, vis_1A_i.z, vis_1A_r.w, vis_1A_i.w };
-  }
-
-  if (do_baseline_1B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1B_r.x, vis_1B_i.x, vis_1B_r.y, vis_1B_i.y, vis_1B_r.z, vis_1B_i.z, vis_1B_r.w, vis_1B_i.w };
-  }
-
-  if (do_baseline_1C) {
-    uint baseline = (stat_C * (stat_C + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1C_r.x, vis_1C_i.x, vis_1C_r.y, vis_1C_i.y, vis_1C_r.z, vis_1C_i.z, vis_1C_r.w, vis_1C_i.w };
-  }
-
-  if (do_baseline_1D) {
-    uint baseline = (stat_D * (stat_D + 1) / 2) + stat_1;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_1D_r.x, vis_1D_i.x, vis_1D_r.y, vis_1D_i.y, vis_1D_r.z, vis_1D_i.z, vis_1D_r.w, vis_1D_i.w };
-  }
-
-  if (do_baseline_2A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_2;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_2A_r.x, vis_2A_i.x, vis_2A_r.y, vis_2A_i.y, vis_2A_r.z, vis_2A_i.z, vis_2A_r.w, vis_2A_i.w };
-  }
-
-  if (do_baseline_2B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_2;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_2B_r.x, vis_2B_i.x, vis_2B_r.y, vis_2B_i.y, vis_2B_r.z, vis_2B_i.z, vis_2B_r.w, vis_2B_i.w };
-  }
-
-  if (do_baseline_2C) {
-    uint baseline = (stat_C * (stat_C + 1) / 2) + stat_2;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_2C_r.x, vis_2C_i.x, vis_2C_r.y, vis_2C_i.y, vis_2C_r.z, vis_2C_i.z, vis_2C_r.w, vis_2C_i.w };
-  }
-
-  if (do_baseline_2D) {
-    uint baseline = (stat_D * (stat_D + 1) / 2) + stat_2;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_2D_r.x, vis_2D_i.x, vis_2D_r.y, vis_2D_i.y, vis_2D_r.z, vis_2D_i.z, vis_2D_r.w, vis_2D_i.w };
-  }
-
-  if (do_baseline_3A) {
-    uint baseline = (stat_A * (stat_A + 1) / 2) + stat_3;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_3A_r.x, vis_3A_i.x, vis_3A_r.y, vis_3A_i.y, vis_3A_r.z, vis_3A_i.z, vis_3A_r.w, vis_3A_i.w };
-  }
-
-  if (do_baseline_3B) {
-    uint baseline = (stat_B * (stat_B + 1) / 2) + stat_3;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_3B_r.x, vis_3B_i.x, vis_3B_r.y, vis_3B_i.y, vis_3B_r.z, vis_3B_i.z, vis_3B_r.w, vis_3B_i.w };
-  }
-
-  if (do_baseline_3C) {
-    uint baseline = (stat_C * (stat_C + 1) / 2) + stat_3;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_3C_r.x, vis_3C_i.x, vis_3C_r.y, vis_3C_i.y, vis_3C_r.z, vis_3C_i.z, vis_3C_r.w, vis_3C_i.w };
-  }
-
-  if (do_baseline_3D) {
-    uint baseline = (stat_D * (stat_D + 1) / 2) + stat_3;
-    (*visibilities)[baseline][channel] = (fcomplex4) { vis_3D_r.x, vis_3D_i.x, vis_3D_r.y, vis_3D_i.y, vis_3D_r.z, vis_3D_i.z, vis_3D_r.w, vis_3D_i.w };
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/DelayAndBandPass.cl b/RTCP/Cobalt/GPUProc/src/opencl/DelayAndBandPass.cl
deleted file mode 100644
index b9de841b77dbbbb64437ac4c21588c9d6109b2f1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/DelayAndBandPass.cl
+++ /dev/null
@@ -1,195 +0,0 @@
-//# DelayAndBandPass.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include "math.cl"
-
-/** @file
- * This file contains an OpenCL implementation of the GPU kernel for the delay
- * and bandpass correction.
- *
- * Usually, this kernel will be run after the polyphase filter kernel FIR.cl. In
- * that case, the input data for this kernel is already in floating point format
- * (@c NR_CHANNELS > 1). However, if this kernel is the first in row, then the
- * input data is still in integer format (@c NR_CHANNELS == 1), and this kernel
- * needs to do the integer-to-float conversion.
- *
- * @attention The following pre-processor variables must be supplied when
- * compiling this program. Please take the pre-conditions for these variables
- * into account:
- * - @c NR_CHANNELS: 1 or a multiple of 16
- * - if @c NR_CHANNELS == 1 (input data is in integer format):
- *   - @c NR_BITS_PER_SAMPLE: 8 or 16
- *   - @c NR_SAMPLES_PER_SUBBAND: a multiple of 16
- * - if @c NR_CHANNELS > 1 (input data is in floating point format):
- *   - @c NR_SAMPLES_PER_CHANNEL: a multiple of 16
- * - @c NR_POLARIZATIONS: 2
- * - @c SUBBAND_WIDTH: a multiple of @c NR_CHANNELS
- */
-
-#if NR_CHANNELS == 1
-#undef BANDPASS_CORRECTION
-#endif
-
-
-typedef __global fcomplex2 (*restrict OutputDataType)[NR_STATIONS][NR_CHANNELS][NR_SAMPLES_PER_CHANNEL];
-#if NR_CHANNELS == 1
-#if NR_BITS_PER_SAMPLE == 16
-typedef __global short_complex2 (*restrict InputDataType)[NR_STATIONS][NR_SAMPLES_PER_SUBBAND];
-#elif NR_BITS_PER_SAMPLE == 8
-typedef __global char_complex2 (*restrict InputDataType)[NR_STATIONS][NR_SAMPLES_PER_SUBBAND];
-#else
-#error unsupport NR_BITS_PER_SAMPLE
-#endif
-#else
-typedef __global fcomplex (*restrict InputDataType)[NR_STATIONS][NR_POLARIZATIONS][NR_SAMPLES_PER_CHANNEL][NR_CHANNELS];
-#endif
-typedef __global const float2 (*restrict DelaysType)[NR_BEAMS][NR_STATIONS]; // 2 Polarizations; in seconds
-typedef __global const float2 (*restrict PhaseOffsetsType)[NR_STATIONS]; // 2 Polarizations; in radians
-typedef __global const float (*restrict BandPassFactorsType)[NR_CHANNELS];
-
-
-/**
- * This kernel perfroms three operations on the input data:
- * - Apply a fine delay by doing a per channel phase correction.
- * - Apply a bandpass correction to compensate for the errors introduced by the
- *   polyphase filter that produced the subbands. This error is deterministic,
- *   hence it can be fully compensated for.
- * - Transpose the data so that the time slices for each channel are placed
- *   consecutively in memory.
- *
- * @param[out] correctedDataPtr    pointer to output data of ::OutputDataType,
- *                                 a 3D array [station][channel][sample]
- *                                 of ::fcomplex2 (2 complex polarizations)
- * @param[in]  filteredDataPtr     pointer to input data; this can either be a
- *                                 4D array [station][polarization][sample][channel]
- *                                 of ::fcomplex, or a 2D array [station][subband]
- *                                 of ::short_complex2 or ::char_complex2,
- *                                 depending on the value of @c NR_CHANNELS
- * @param[in]  subbandFrequency    center freqency of the subband
- * @param[in]  beam                index number of the beam
- * @param[in]  delaysAtBeginPtr    pointer to delay data of ::DelaysType,
- *                                 a 2D array [beam][station] of float2 (real:
- *                                 2 polarizations), containing delays in
- *                                 seconds at begin of integration period
- * @param[in]  delaysAfterEndPtr   pointer to delay data of ::DelaysType,
- *                                 a 2D array [beam][station] of float2 (real:
- *                                 2 polarizations), containing delays in
- *                                 seconds after end of integration period
- * @param[in]  phaseOffsetsPtr     pointer to phase offset data of
- *                                 ::PhaseOffsetsType, a 1D array [station] of
- *                                 float2 (real: 2 polarizations), containing
- *                                 phase offsets in radians
- * @param[in]  bandPassFactorsPtr  pointer to bandpass correction data of
- *                                 ::BandPassFactorsType, a 1D array [channel] of
- *                                 float, containing bandpass correction factors
- */
-__kernel __attribute__((reqd_work_group_size(16 * 16, 1, 1)))
-void applyDelaysAndCorrectBandPass(__global fcomplex *restrict correctedDataPtr,
-                                   __global const fcomplex *restrict filteredDataPtr,
-                                   float subbandFrequency,
-                                   unsigned beam,
-                                   __global const float2 *restrict delaysAtBeginPtr,
-                                   __global const float2 *restrict delaysAfterEndPtr,
-                                   __global const float2 *restrict phaseOffsetsPtr,
-                                   __global const float *restrict bandPassFactorsPtr)
-{
-  OutputDataType outputData = (OutputDataType) correctedDataPtr;
-  InputDataType inputData = (InputDataType) filteredDataPtr;
-  DelaysType delaysAtBegin = (DelaysType) delaysAtBeginPtr;
-  DelaysType delaysAfterEnd = (DelaysType) delaysAfterEndPtr;
-  PhaseOffsetsType phaseOffsets = (PhaseOffsetsType) phaseOffsetsPtr;
-
-#if NR_CHANNELS > 1
-  BandPassFactorsType bandPassFactors = (BandPassFactorsType) bandPassFactorsPtr;
-
-  __local fcomplex2 tmp[16][17]; // one too wide to allow coalesced reads
-
-  uint major = get_global_id(0) / 16;
-  uint minor = get_global_id(0) % 16;
-  uint channel = get_global_id(1) * 16;
-#endif
-  uint station = get_global_id(2);
-
-#if defined DELAY_COMPENSATION
-#if NR_CHANNELS == 1
-  float frequency = subbandFrequency;
-#else
-  float frequency = subbandFrequency - .5f * SUBBAND_BANDWIDTH + (channel + minor) * (SUBBAND_BANDWIDTH / NR_CHANNELS);
-#endif
-  float2 delayAtBegin = (*delaysAtBegin)[beam][station];
-  float2 delayAfterEnd = (*delaysAfterEnd)[beam][station];
-  float2 phiBegin = -2 * 3.1415926535f * delayAtBegin;
-  float2 phiEnd = -2 * 3.1415926535f * delayAfterEnd;
-  float2 deltaPhi = (phiEnd - phiBegin) / NR_SAMPLES_PER_CHANNEL;
-#if NR_CHANNELS == 1
-  float2 myPhiBegin = (phiBegin + get_local_id(0) * deltaPhi) * frequency + (*phaseOffsets)[station];
-  float2 myPhiDelta = get_local_size(0) * deltaPhi * frequency;
-#else
-  float2 myPhiBegin = (phiBegin + major * deltaPhi) * frequency + (*phaseOffsets)[station];
-  float2 myPhiDelta = 16 * deltaPhi * frequency;
-#endif
-  fcomplex vX = cexp(myPhiBegin.x);
-  fcomplex vY = cexp(myPhiBegin.y);
-  fcomplex dvX = cexp(myPhiDelta.x);
-  fcomplex dvY = cexp(myPhiDelta.y);
-#endif
-
-#if defined BANDPASS_CORRECTION
-  float weight = (*bandPassFactors)[channel + minor];
-#endif
-
-#if defined DELAY_COMPENSATION && defined BANDPASS_CORRECTION
-  vX *= weight;
-  vY *= weight;
-#endif
-
-#if NR_CHANNELS == 1
-  for (uint time = get_local_id(0); time < NR_SAMPLES_PER_SUBBAND; time += get_local_size(0)) {
-    fcomplex2 samples = convert_float4((*inputData)[station][time]);
-    fcomplex sampleX = samples.s01;
-    fcomplex sampleY = samples.s23;
-#else
-  for (uint time = 0; time < NR_SAMPLES_PER_CHANNEL; time += 16) {
-    fcomplex sampleX = (*inputData)[station][0][time + major][channel + minor];
-    fcomplex sampleY = (*inputData)[station][1][time + major][channel + minor];
-#endif
-
-#if defined DELAY_COMPENSATION
-    sampleX = cmul(sampleX, vX);
-    sampleY = cmul(sampleY, vY);
-    vX = cmul(vX, dvX);
-    vY = cmul(vY, dvY);
-#elif defined BANDPASS_CORRECTION
-    sampleX *= weight;
-    sampleY *= weight;
-#endif
-
-#if NR_CHANNELS == 1
-    (*outputData)[station][0][time] = (float4) (sampleX, sampleY);
-#else
-    tmp[major][minor] = (float4) (sampleX, sampleY);
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    (*outputData)[station][channel + major][time + minor] = tmp[minor][major];
-    barrier(CLK_LOCAL_MEM_FENCE);
-#endif
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/FFT.cl b/RTCP/Cobalt/GPUProc/src/opencl/FFT.cl
deleted file mode 100644
index fc5ed2e3c4051cc286ee52f9c89b943e689eefae..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/FFT.cl
+++ /dev/null
@@ -1,283 +0,0 @@
-// Run kernel fft0 with global dim = {64*BatchSize}, local dim={64}
-#ifndef M_PI
-//#define M_PI 0x1.921fb54442d18p+1
-#define M_PI 3.1415926536f
-#endif
-#define complexMul(a,b) ((float2)(mad(-(a).y, (b).y, (a).x * (b).x), mad((a).y, (b).x, (a).x * (b).y)))
-#define conj(a) ((float2)((a).x, -(a).y))
-#define conjTransp(a) ((float2)(-(a).y, (a).x))
-
-#define fftKernel2(a,dir) \
-  { \
-    float2 c = (a)[0];    \
-    (a)[0] = c + (a)[1];  \
-    (a)[1] = c - (a)[1];  \
-  }
-
-#define fftKernel2S(d1,d2,dir) \
-  { \
-    float2 c = (d1);   \
-    (d1) = c + (d2);   \
-    (d2) = c - (d2);   \
-  }
-
-#define fftKernel4(a,dir) \
-  { \
-    fftKernel2S((a)[0], (a)[2], dir); \
-    fftKernel2S((a)[1], (a)[3], dir); \
-    fftKernel2S((a)[0], (a)[1], dir); \
-    (a)[3] = (float2)(dir) * (conjTransp((a)[3])); \
-    fftKernel2S((a)[2], (a)[3], dir); \
-    float2 c = (a)[1]; \
-    (a)[1] = (a)[2]; \
-    (a)[2] = c; \
-  }
-
-#define fftKernel4s(a0,a1,a2,a3,dir) \
-  { \
-    fftKernel2S((a0), (a2), dir); \
-    fftKernel2S((a1), (a3), dir); \
-    fftKernel2S((a0), (a1), dir); \
-    (a3) = (float2)(dir) * (conjTransp((a3))); \
-    fftKernel2S((a2), (a3), dir); \
-    float2 c = (a1); \
-    (a1) = (a2); \
-    (a2) = c; \
-  }
-
-#define bitreverse8(a) \
-  { \
-    float2 c; \
-    c = (a)[1]; \
-    (a)[1] = (a)[4]; \
-    (a)[4] = c; \
-    c = (a)[3]; \
-    (a)[3] = (a)[6]; \
-    (a)[6] = c; \
-  }
-
-#define fftKernel8(a,dir) \
-  { \
-    const float2 w1 = (float2)(0x1.6a09e6p-1f,  dir * 0x1.6a09e6p-1f);  \
-    const float2 w3 = (float2)(-0x1.6a09e6p-1f, dir * 0x1.6a09e6p-1f);  \
-    float2 c; \
-    fftKernel2S((a)[0], (a)[4], dir); \
-    fftKernel2S((a)[1], (a)[5], dir); \
-    fftKernel2S((a)[2], (a)[6], dir); \
-    fftKernel2S((a)[3], (a)[7], dir); \
-    (a)[5] = complexMul(w1, (a)[5]); \
-    (a)[6] = (float2)(dir) * (conjTransp((a)[6])); \
-    (a)[7] = complexMul(w3, (a)[7]); \
-    fftKernel2S((a)[0], (a)[2], dir); \
-    fftKernel2S((a)[1], (a)[3], dir); \
-    fftKernel2S((a)[4], (a)[6], dir); \
-    fftKernel2S((a)[5], (a)[7], dir); \
-    (a)[3] = (float2)(dir) * (conjTransp((a)[3])); \
-    (a)[7] = (float2)(dir) * (conjTransp((a)[7])); \
-    fftKernel2S((a)[0], (a)[1], dir); \
-    fftKernel2S((a)[2], (a)[3], dir); \
-    fftKernel2S((a)[4], (a)[5], dir); \
-    fftKernel2S((a)[6], (a)[7], dir); \
-    bitreverse8((a)); \
-  }
-
-#define bitreverse4x4(a) \
-  { \
-    float2 c; \
-    c = (a)[1];  (a)[1] = (a)[4];  (a)[4] = c; \
-    c = (a)[2];  (a)[2] = (a)[8];  (a)[8] = c; \
-    c = (a)[3];  (a)[3] = (a)[12]; (a)[12] = c; \
-    c = (a)[6];  (a)[6] = (a)[9];  (a)[9] = c; \
-    c = (a)[7];  (a)[7] = (a)[13]; (a)[13] = c; \
-    c = (a)[11]; (a)[11] = (a)[14]; (a)[14] = c; \
-  }
-
-#define fftKernel16(a,dir) \
-  { \
-    const float w0 = 0x1.d906bcp-1f; \
-    const float w1 = 0x1.87de2ap-2f; \
-    const float w2 = 0x1.6a09e6p-1f; \
-    fftKernel4s((a)[0], (a)[4], (a)[8],  (a)[12], dir); \
-    fftKernel4s((a)[1], (a)[5], (a)[9],  (a)[13], dir); \
-    fftKernel4s((a)[2], (a)[6], (a)[10], (a)[14], dir); \
-    fftKernel4s((a)[3], (a)[7], (a)[11], (a)[15], dir); \
-    (a)[5] = complexMul((a)[5], (float2)(w0, dir * w1)); \
-    (a)[6] = complexMul((a)[6], (float2)(w2, dir * w2)); \
-    (a)[7] = complexMul((a)[7], (float2)(w1, dir * w0)); \
-    (a)[9] = complexMul((a)[9], (float2)(w2, dir * w2)); \
-    (a)[10] = (float2)(dir) * (conjTransp((a)[10])); \
-    (a)[11] = complexMul((a)[11], (float2)(-w2, dir * w2)); \
-    (a)[13] = complexMul((a)[13], (float2)(w1, dir * w0)); \
-    (a)[14] = complexMul((a)[14], (float2)(-w2, dir * w2)); \
-    (a)[15] = complexMul((a)[15], (float2)(-w0, dir * -w1)); \
-    fftKernel4((a), dir); \
-    fftKernel4((a) + 4, dir); \
-    fftKernel4((a) + 8, dir); \
-    fftKernel4((a) + 12, dir); \
-    bitreverse4x4((a)); \
-  }
-
-#define bitreverse32(a) \
-  { \
-    float2 c1, c2; \
-    c1 = (a)[2];   (a)[2] = (a)[1];   c2 = (a)[4];   (a)[4] = c1;   c1 = (a)[8];   (a)[8] = c2;    c2 = (a)[16];  (a)[16] = c1;   (a)[1] = c2; \
-    c1 = (a)[6];   (a)[6] = (a)[3];   c2 = (a)[12];  (a)[12] = c1;  c1 = (a)[24];  (a)[24] = c2;   c2 = (a)[17];  (a)[17] = c1;   (a)[3] = c2; \
-    c1 = (a)[10];  (a)[10] = (a)[5];  c2 = (a)[20];  (a)[20] = c1;  c1 = (a)[9];   (a)[9] = c2;    c2 = (a)[18];  (a)[18] = c1;   (a)[5] = c2; \
-    c1 = (a)[14];  (a)[14] = (a)[7];  c2 = (a)[28];  (a)[28] = c1;  c1 = (a)[25];  (a)[25] = c2;   c2 = (a)[19];  (a)[19] = c1;   (a)[7] = c2; \
-    c1 = (a)[22];  (a)[22] = (a)[11]; c2 = (a)[13];  (a)[13] = c1;  c1 = (a)[26];  (a)[26] = c2;   c2 = (a)[21];  (a)[21] = c1;   (a)[11] = c2; \
-    c1 = (a)[30];  (a)[30] = (a)[15]; c2 = (a)[29];  (a)[29] = c1;  c1 = (a)[27];  (a)[27] = c2;   c2 = (a)[23];  (a)[23] = c1;   (a)[15] = c2; \
-  }
-
-#define fftKernel32(a,dir) \
-  { \
-    fftKernel2S((a)[0],  (a)[16], dir); \
-    fftKernel2S((a)[1],  (a)[17], dir); \
-    fftKernel2S((a)[2],  (a)[18], dir); \
-    fftKernel2S((a)[3],  (a)[19], dir); \
-    fftKernel2S((a)[4],  (a)[20], dir); \
-    fftKernel2S((a)[5],  (a)[21], dir); \
-    fftKernel2S((a)[6],  (a)[22], dir); \
-    fftKernel2S((a)[7],  (a)[23], dir); \
-    fftKernel2S((a)[8],  (a)[24], dir); \
-    fftKernel2S((a)[9],  (a)[25], dir); \
-    fftKernel2S((a)[10], (a)[26], dir); \
-    fftKernel2S((a)[11], (a)[27], dir); \
-    fftKernel2S((a)[12], (a)[28], dir); \
-    fftKernel2S((a)[13], (a)[29], dir); \
-    fftKernel2S((a)[14], (a)[30], dir); \
-    fftKernel2S((a)[15], (a)[31], dir); \
-    (a)[17] = complexMul((a)[17], (float2)(0x1.f6297cp-1f, dir * 0x1.8f8b84p-3f)); \
-    (a)[18] = complexMul((a)[18], (float2)(0x1.d906bcp-1f, dir * 0x1.87de2ap-2f)); \
-    (a)[19] = complexMul((a)[19], (float2)(0x1.a9b662p-1f, dir * 0x1.1c73b4p-1f)); \
-    (a)[20] = complexMul((a)[20], (float2)(0x1.6a09e6p-1f, dir * 0x1.6a09e6p-1f)); \
-    (a)[21] = complexMul((a)[21], (float2)(0x1.1c73b4p-1f, dir * 0x1.a9b662p-1f)); \
-    (a)[22] = complexMul((a)[22], (float2)(0x1.87de2ap-2f, dir * 0x1.d906bcp-1f)); \
-    (a)[23] = complexMul((a)[23], (float2)(0x1.8f8b84p-3f, dir * 0x1.f6297cp-1f)); \
-    (a)[24] = complexMul((a)[24], (float2)(0x0p+0f, dir * 0x1p+0f)); \
-    (a)[25] = complexMul((a)[25], (float2)(-0x1.8f8b84p-3f, dir * 0x1.f6297cp-1f)); \
-    (a)[26] = complexMul((a)[26], (float2)(-0x1.87de2ap-2f, dir * 0x1.d906bcp-1f)); \
-    (a)[27] = complexMul((a)[27], (float2)(-0x1.1c73b4p-1f, dir * 0x1.a9b662p-1f)); \
-    (a)[28] = complexMul((a)[28], (float2)(-0x1.6a09e6p-1f, dir * 0x1.6a09e6p-1f)); \
-    (a)[29] = complexMul((a)[29], (float2)(-0x1.a9b662p-1f, dir * 0x1.1c73b4p-1f)); \
-    (a)[30] = complexMul((a)[30], (float2)(-0x1.d906bcp-1f, dir * 0x1.87de2ap-2f)); \
-    (a)[31] = complexMul((a)[31], (float2)(-0x1.f6297cp-1f, dir * 0x1.8f8b84p-3f)); \
-    fftKernel16((a), dir); \
-    fftKernel16((a) + 16, dir); \
-    bitreverse32((a)); \
-  }
-
-__kernel void \
-  clFFT_1DTwistInterleaved(__global float2 *in, unsigned int startRow, unsigned int numCols, unsigned int N, unsigned int numRowsToProcess, int dir) \
-  { \
-  float2 a, w; \
-  float ang; \
-  unsigned int j; \
-  unsigned int i = get_global_id(0); \
-  unsigned int startIndex = i; \
-         \
-  if(i < numCols) \
-  { \
-    for(j = 0; j < numRowsToProcess; j++) \
-    { \
-      a = in[startIndex]; \
-      ang = 2.0f * M_PI * dir * i * (startRow + j) / N; \
-      w = (float2)(native_cos(ang), native_sin(ang)); \
-      a = complexMul(a, w); \
-      in[startIndex] = a; \
-      startIndex += numCols; \
-    } \
-  }        \
-  } \
-  __kernel void fft0(__global float2 *in_out)
-{
-  const int dir = -1;
-  __local float2 sMem[4][272];
-  int i, j;
-  float ang, angf;
-  __local float2 *lMemStore, *lMemLoad;
-  float2 a0, a1, a2, a3;
-  int offset = (get_group_id(0) * 4 + get_local_id(1)) * 256 + get_local_id(0);
-  in_out += offset;
-  a0 = in_out[0];
-  a1 = in_out[64];
-  a2 = in_out[128];
-  a3 = in_out[192];
-  fftKernel4s(a0, a1, a2, a3, dir);
-  angf = (float) get_local_id(0);
-  ang = dir * ( 2.0f * M_PI * 1.0f / 256.0f ) * angf;
-  float2 w0 = (float2)(native_cos(ang), native_sin(ang));
-  ang = dir * ( 2.0f * M_PI * 2.0f / 256.0f ) * angf;
-  float2 w1 = (float2)(native_cos(ang), native_sin(ang));
-  ang = dir * ( 2.0f * M_PI * 3.0f / 256.0f ) * angf;
-  float2 w2 = (float2)(native_cos(ang), native_sin(ang));
-  a1 = complexMul(a1, w0);
-  a2 = complexMul(a2, w1);
-  a3 = complexMul(a3, w2);
-  lMemStore = &sMem[get_local_id(1)][get_local_id(0)];
-  j = get_local_id(0) & 3;
-  i = get_local_id(0) >> 2;
-  lMemLoad = &sMem[get_local_id(1)][j * 68 + i];
-  lMemStore[0] = a0;
-  lMemStore[68] = a1;
-  lMemStore[136] = a2;
-  lMemStore[204] = a3;
-  barrier(CLK_LOCAL_MEM_FENCE);
-  a0 = lMemLoad[0];
-  a1 = lMemLoad[16];
-  a2 = lMemLoad[32];
-  a3 = lMemLoad[48];
-  barrier(CLK_LOCAL_MEM_FENCE);
-  fftKernel4s(a0, a1, a2, a3, dir);
-  angf = (float) (get_local_id(0) >> 2);
-  ang = dir * ( 2.0f * M_PI * 1.0f / 64.0f ) * angf;
-  float2 w3 = (float2)(native_cos(ang), native_sin(ang));
-  ang = dir * ( 2.0f * M_PI * 2.0f / 64.0f ) * angf;
-  float2 w4 = (float2)(native_cos(ang), native_sin(ang));
-  ang = dir * ( 2.0f * M_PI * 3.0f / 64.0f ) * angf;
-  float2 w5 = (float2)(native_cos(ang), native_sin(ang));
-  a1 = complexMul(a1, w3);
-  a2 = complexMul(a2, w4);
-  a3 = complexMul(a3, w5);
-  j = (get_local_id(0) & 15) >> 2;
-  i = (get_local_id(0) >> 4) * 4 + (get_local_id(0) & 3);
-  lMemLoad = &sMem[get_local_id(1)][j * 68 + i];
-  lMemStore[0] = a0;
-  lMemStore[68] = a1;
-  lMemStore[136] = a2;
-  lMemStore[204] = a3;
-  barrier(CLK_LOCAL_MEM_FENCE);
-  a0 = lMemLoad[0];
-  a1 = lMemLoad[16];
-  a2 = lMemLoad[32];
-  a3 = lMemLoad[48];
-  barrier(CLK_LOCAL_MEM_FENCE);
-  fftKernel4s(a0, a1, a2, a3, dir);
-  angf = (float) (get_local_id(0) >> 4);
-  ang = dir * ( 2.0f * M_PI * 1.0f / 16.0f ) * angf;
-  float2 w6 = (float2)(native_cos(ang), native_sin(ang));
-  ang = dir * ( 2.0f * M_PI * 2.0f / 16.0f ) * angf;
-  float2 w7 = (float2)(native_cos(ang), native_sin(ang));
-  ang = dir * ( 2.0f * M_PI * 3.0f / 16.0f ) * angf;
-  float2 w8 = (float2)(native_cos(ang), native_sin(ang));
-  a1 = complexMul(a1, w6);
-  a2 = complexMul(a2, w7);
-  a3 = complexMul(a3, w8);
-  j = get_local_id(0) >> 4;
-  i = get_local_id(0) & 15;
-  lMemLoad = &sMem[get_local_id(1)][j * 64 + i];
-  lMemStore[0] = a0;
-  lMemStore[64] = a1;
-  lMemStore[128] = a2;
-  lMemStore[192] = a3;
-  barrier(CLK_LOCAL_MEM_FENCE);
-  a0 = lMemLoad[0];
-  a1 = lMemLoad[16];
-  a2 = lMemLoad[32];
-  a3 = lMemLoad[48];
-  fftKernel4s(a0, a1, a2, a3, dir);
-  in_out[0] = a0;
-  in_out[64] = a1;
-  in_out[128] = a2;
-  in_out[192] = a3;
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/FIR.cl b/RTCP/Cobalt/GPUProc/src/opencl/FIR.cl
deleted file mode 100644
index ad6f9eb302e944c559c0ba72129074a6e3b080c6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/FIR.cl
+++ /dev/null
@@ -1,421 +0,0 @@
-//# FIR.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#define COMPLEX 2       // do not change
-
-#if NR_BITS_PER_SAMPLE == 16
-typedef short SampleType;
-#elif NR_BITS_PER_SAMPLE == 8
-typedef char SampleType;
-#else
-#error unsupported NR_BITS_PER_SAMPLE
-#endif
-
-typedef __global SampleType (*SampledDataType)[NR_STATIONS][NR_TAPS - 1 + NR_SAMPLES_PER_CHANNEL][NR_CHANNELS][NR_POLARIZATIONS * COMPLEX];
-typedef __global float (*FilteredDataType)[NR_STATIONS][NR_POLARIZATIONS][NR_SAMPLES_PER_CHANNEL][NR_CHANNELS][COMPLEX];
-typedef __global const float16 (*WeightsType)[NR_CHANNELS];
-
-
-/*!
- * Applies the Finite Input Response filter defined by the weightsPtr array
- * to the sampledDataPtr array. Output is written into the filteredDataPtr
- * array. The filter works on complex numbers. The weights are real values only.
- *
- * Input values are first converted to (complex) float.
- * The kernel also reorders the polarization dimension and expects the weights
- * per channel in reverse order. If an FFT is applied afterwards, the weights
- * of the odd channels are often supplied negated to get the resulting channels
- * in increasing order of frequency.
- *
- * \param[out] filteredDataPtr         4D output array of floats
- * \param[in]  sampledDataPtr          4D input array of signed chars or shorts
- * \param[in]  weightsPtr              2D per-channel FIR filter coefficient array of floats (considering float16 as a dim)
- *
- * Pre-processor input symbols (some are tied to the execution configuration)
- * Symbol                  | Valid Values                | Description
- * ----------------------- | --------------------------- | -----------
- * NR_STATIONS             | >= 1                        | number of antenna fields
- * NR_TAPS                 | 1--16                       | number of FIR filtering coefficients
- * NR_SAMPLES_PER_CHANNEL  | multiple of NR_TAPS and > 0 | number of input samples per channel
- * NR_BITS_PER_SAMPLE      | 8 or 16                     | number of bits of signed integral value type of sampledDataPtr (TODO: support 4)
- * NR_CHANNELS             | multiple of 16 and > 0      | number of frequency channels per subband
- * NR_POLARIZATIONS        | power of 2                  | number of polarizations
- *
- * Execution configuration: (TODO: enforce using __attribute__ reqd_work_group_size)
- * - Work dim == 2  (can be 1 iff NR_STATIONS == 1)
- *     + Inner dim: the channel, pol, real/imag the thread processes
- *     + Outer dim: the station the thread processes
- * - Work group size: must divide global size, no other kernel restrictions
- * - Global size: (NR_CHANNELS * NR_POLARIZATIONS * 2, NR_STATIONS)
- *
- * TODO: convert complex dim to fcomplex (=float2 in math.cl) in device code and to complex<float> in host code.
- */
-__kernel void FIR_filter(__global void *filteredDataPtr,
-                         __global const void *sampledDataPtr,
-                         __global const void *weightsPtr)
-{
-  SampledDataType sampledData = (SampledDataType) sampledDataPtr;
-  FilteredDataType filteredData = (FilteredDataType) filteredDataPtr;
-  WeightsType weightsData = (WeightsType) weightsPtr;
-
-  uint cpr = get_global_id(0);
-#if 0
-  // Straight index calc for NR_CHANNELS == 1
-  uint pol_ri = cpr & 3;
-  uint channel = cpr >> 2;
-  uint ri = cpr & 1;
-  uint pol = pol_ri >> 1;
-#else
-  uint ri = cpr & 1;
-  uint channel = (cpr >> 1) % NR_CHANNELS;
-  uint pol = (cpr >> 1) / NR_CHANNELS;
-  uint pol_ri = (pol << 1) | ri;
-#endif
-  uint station = get_global_id(1);
-
-  //#pragma OPENCL EXTENSION cl_amd_printf : enable
-
-  const float16 weights = (*weightsData)[channel];
-  float16 delayLine;
-  float16 sum;
-
-  delayLine.s0 = convert_float((*sampledData)[station][0][channel][pol_ri]);
-  delayLine.s1 = convert_float((*sampledData)[station][1][channel][pol_ri]);
-  delayLine.s2 = convert_float((*sampledData)[station][2][channel][pol_ri]);
-  delayLine.s3 = convert_float((*sampledData)[station][3][channel][pol_ri]);
-  delayLine.s4 = convert_float((*sampledData)[station][4][channel][pol_ri]);
-  delayLine.s5 = convert_float((*sampledData)[station][5][channel][pol_ri]);
-  delayLine.s6 = convert_float((*sampledData)[station][6][channel][pol_ri]);
-  delayLine.s7 = convert_float((*sampledData)[station][7][channel][pol_ri]);
-  delayLine.s8 = convert_float((*sampledData)[station][8][channel][pol_ri]);
-  delayLine.s9 = convert_float((*sampledData)[station][9][channel][pol_ri]);
-  delayLine.sA = convert_float((*sampledData)[station][10][channel][pol_ri]);
-  delayLine.sB = convert_float((*sampledData)[station][11][channel][pol_ri]);
-  delayLine.sC = convert_float((*sampledData)[station][12][channel][pol_ri]);
-  delayLine.sD = convert_float((*sampledData)[station][13][channel][pol_ri]);
-  delayLine.sE = convert_float((*sampledData)[station][14][channel][pol_ri]);
-
-  for (uint time = 0; time < NR_SAMPLES_PER_CHANNEL; time += NR_TAPS) {
-    delayLine.sF = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 0][channel][pol_ri]);
-    sum.s0 = weights.sF * delayLine.s0;
-    delayLine.s0 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 1][channel][pol_ri]);
-    sum.s0 += weights.sE * delayLine.s1;
-    sum.s0 += weights.sD * delayLine.s2;
-    sum.s0 += weights.sC * delayLine.s3;
-    sum.s0 += weights.sB * delayLine.s4;
-    sum.s0 += weights.sA * delayLine.s5;
-    sum.s0 += weights.s9 * delayLine.s6;
-    sum.s0 += weights.s8 * delayLine.s7;
-    sum.s0 += weights.s7 * delayLine.s8;
-    sum.s0 += weights.s6 * delayLine.s9;
-    sum.s0 += weights.s5 * delayLine.sA;
-    sum.s0 += weights.s4 * delayLine.sB;
-    sum.s0 += weights.s3 * delayLine.sC;
-    sum.s0 += weights.s2 * delayLine.sD;
-    sum.s0 += weights.s1 * delayLine.sE;
-    sum.s0 += weights.s0 * delayLine.sF;
-    (*filteredData)[station][pol][time + 0][channel][ri] = sum.s0;
-
-    sum.s1 = weights.sF * delayLine.s1;
-    delayLine.s1 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 2][channel][pol_ri]);
-    sum.s1 += weights.sE * delayLine.s2;
-    sum.s1 += weights.sD * delayLine.s3;
-    sum.s1 += weights.sC * delayLine.s4;
-    sum.s1 += weights.sB * delayLine.s5;
-    sum.s1 += weights.sA * delayLine.s6;
-    sum.s1 += weights.s9 * delayLine.s7;
-    sum.s1 += weights.s8 * delayLine.s8;
-    sum.s1 += weights.s7 * delayLine.s9;
-    sum.s1 += weights.s6 * delayLine.sA;
-    sum.s1 += weights.s5 * delayLine.sB;
-    sum.s1 += weights.s4 * delayLine.sC;
-    sum.s1 += weights.s3 * delayLine.sD;
-    sum.s1 += weights.s2 * delayLine.sE;
-    sum.s1 += weights.s1 * delayLine.sF;
-    sum.s1 += weights.s0 * delayLine.s0;
-    (*filteredData)[station][pol][time + 1][channel][ri] = sum.s1;
-
-    sum.s2 = weights.sF * delayLine.s2;
-    delayLine.s2 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 3][channel][pol_ri]);
-    sum.s2 += weights.sE * delayLine.s3;
-    sum.s2 += weights.sD * delayLine.s4;
-    sum.s2 += weights.sC * delayLine.s5;
-    sum.s2 += weights.sB * delayLine.s6;
-    sum.s2 += weights.sA * delayLine.s7;
-    sum.s2 += weights.s9 * delayLine.s8;
-    sum.s2 += weights.s8 * delayLine.s9;
-    sum.s2 += weights.s7 * delayLine.sA;
-    sum.s2 += weights.s6 * delayLine.sB;
-    sum.s2 += weights.s5 * delayLine.sC;
-    sum.s2 += weights.s4 * delayLine.sD;
-    sum.s2 += weights.s3 * delayLine.sE;
-    sum.s2 += weights.s2 * delayLine.sF;
-    sum.s2 += weights.s1 * delayLine.s0;
-    sum.s2 += weights.s0 * delayLine.s1;
-    (*filteredData)[station][pol][time + 2][channel][ri] = sum.s2;
-
-    sum.s3 = weights.sF * delayLine.s3;
-    delayLine.s3 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 4][channel][pol_ri]);
-    sum.s3 += weights.sE * delayLine.s4;
-    sum.s3 += weights.sD * delayLine.s5;
-    sum.s3 += weights.sC * delayLine.s6;
-    sum.s3 += weights.sB * delayLine.s7;
-    sum.s3 += weights.sA * delayLine.s8;
-    sum.s3 += weights.s9 * delayLine.s9;
-    sum.s3 += weights.s8 * delayLine.sA;
-    sum.s3 += weights.s7 * delayLine.sB;
-    sum.s3 += weights.s6 * delayLine.sC;
-    sum.s3 += weights.s5 * delayLine.sD;
-    sum.s3 += weights.s4 * delayLine.sE;
-    sum.s3 += weights.s3 * delayLine.sF;
-    sum.s3 += weights.s2 * delayLine.s0;
-    sum.s3 += weights.s1 * delayLine.s1;
-    sum.s3 += weights.s0 * delayLine.s2;
-    (*filteredData)[station][pol][time + 3][channel][ri] = sum.s3;
-
-    sum.s4 = weights.sF * delayLine.s4;
-    delayLine.s4 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 5][channel][pol_ri]);
-    sum.s4 += weights.sE * delayLine.s5;
-    sum.s4 += weights.sD * delayLine.s6;
-    sum.s4 += weights.sC * delayLine.s7;
-    sum.s4 += weights.sB * delayLine.s8;
-    sum.s4 += weights.sA * delayLine.s9;
-    sum.s4 += weights.s9 * delayLine.sA;
-    sum.s4 += weights.s8 * delayLine.sB;
-    sum.s4 += weights.s7 * delayLine.sC;
-    sum.s4 += weights.s6 * delayLine.sD;
-    sum.s4 += weights.s5 * delayLine.sE;
-    sum.s4 += weights.s4 * delayLine.sF;
-    sum.s4 += weights.s3 * delayLine.s0;
-    sum.s4 += weights.s2 * delayLine.s1;
-    sum.s4 += weights.s1 * delayLine.s2;
-    sum.s4 += weights.s0 * delayLine.s3;
-    (*filteredData)[station][pol][time + 4][channel][ri] = sum.s4;
-
-    sum.s5 = weights.sF * delayLine.s5;
-    delayLine.s5 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 6][channel][pol_ri]);
-    sum.s5 += weights.sE * delayLine.s6;
-    sum.s5 += weights.sD * delayLine.s7;
-    sum.s5 += weights.sC * delayLine.s8;
-    sum.s5 += weights.sB * delayLine.s9;
-    sum.s5 += weights.sA * delayLine.sA;
-    sum.s5 += weights.s9 * delayLine.sB;
-    sum.s5 += weights.s8 * delayLine.sC;
-    sum.s5 += weights.s7 * delayLine.sD;
-    sum.s5 += weights.s6 * delayLine.sE;
-    sum.s5 += weights.s5 * delayLine.sF;
-    sum.s5 += weights.s4 * delayLine.s0;
-    sum.s5 += weights.s3 * delayLine.s1;
-    sum.s5 += weights.s2 * delayLine.s2;
-    sum.s5 += weights.s1 * delayLine.s3;
-    sum.s5 += weights.s0 * delayLine.s4;
-    (*filteredData)[station][pol][time + 5][channel][ri] = sum.s5;
-
-    sum.s6 = weights.sF * delayLine.s6;
-    delayLine.s6 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 7][channel][pol_ri]);
-    sum.s6 += weights.sE * delayLine.s7;
-    sum.s6 += weights.sD * delayLine.s8;
-    sum.s6 += weights.sC * delayLine.s9;
-    sum.s6 += weights.sB * delayLine.sA;
-    sum.s6 += weights.sA * delayLine.sB;
-    sum.s6 += weights.s9 * delayLine.sC;
-    sum.s6 += weights.s8 * delayLine.sD;
-    sum.s6 += weights.s7 * delayLine.sE;
-    sum.s6 += weights.s6 * delayLine.sF;
-    sum.s6 += weights.s5 * delayLine.s0;
-    sum.s6 += weights.s4 * delayLine.s1;
-    sum.s6 += weights.s3 * delayLine.s2;
-    sum.s6 += weights.s2 * delayLine.s3;
-    sum.s6 += weights.s1 * delayLine.s4;
-    sum.s6 += weights.s0 * delayLine.s5;
-    (*filteredData)[station][pol][time + 6][channel][ri] = sum.s6;
-
-    sum.s7 = weights.sF * delayLine.s7;
-    delayLine.s7 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 8][channel][pol_ri]);
-    sum.s7 += weights.sE * delayLine.s8;
-    sum.s7 += weights.sD * delayLine.s9;
-    sum.s7 += weights.sC * delayLine.sA;
-    sum.s7 += weights.sB * delayLine.sB;
-    sum.s7 += weights.sA * delayLine.sC;
-    sum.s7 += weights.s9 * delayLine.sD;
-    sum.s7 += weights.s8 * delayLine.sE;
-    sum.s7 += weights.s7 * delayLine.sF;
-    sum.s7 += weights.s6 * delayLine.s0;
-    sum.s7 += weights.s5 * delayLine.s1;
-    sum.s7 += weights.s4 * delayLine.s2;
-    sum.s7 += weights.s3 * delayLine.s3;
-    sum.s7 += weights.s2 * delayLine.s4;
-    sum.s7 += weights.s1 * delayLine.s5;
-    sum.s7 += weights.s0 * delayLine.s6;
-    (*filteredData)[station][pol][time + 7][channel][ri] = sum.s7;
-
-    sum.s8 = weights.sF * delayLine.s8;
-    delayLine.s8 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 9][channel][pol_ri]);
-    sum.s8 += weights.sE * delayLine.s9;
-    sum.s8 += weights.sD * delayLine.sA;
-    sum.s8 += weights.sC * delayLine.sB;
-    sum.s8 += weights.sB * delayLine.sC;
-    sum.s8 += weights.sA * delayLine.sD;
-    sum.s8 += weights.s9 * delayLine.sE;
-    sum.s8 += weights.s8 * delayLine.sF;
-    sum.s8 += weights.s7 * delayLine.s0;
-    sum.s8 += weights.s6 * delayLine.s1;
-    sum.s8 += weights.s5 * delayLine.s2;
-    sum.s8 += weights.s4 * delayLine.s3;
-    sum.s8 += weights.s3 * delayLine.s4;
-    sum.s8 += weights.s2 * delayLine.s5;
-    sum.s8 += weights.s1 * delayLine.s6;
-    sum.s8 += weights.s0 * delayLine.s7;
-    (*filteredData)[station][pol][time + 8][channel][ri] = sum.s8;
-
-    sum.s9 = weights.sF * delayLine.s9;
-    delayLine.s9 = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 10][channel][pol_ri]);
-    sum.s9 += weights.sE * delayLine.sA;
-    sum.s9 += weights.sD * delayLine.sB;
-    sum.s9 += weights.sC * delayLine.sC;
-    sum.s9 += weights.sB * delayLine.sD;
-    sum.s9 += weights.sA * delayLine.sE;
-    sum.s9 += weights.s9 * delayLine.sF;
-    sum.s9 += weights.s8 * delayLine.s0;
-    sum.s9 += weights.s7 * delayLine.s1;
-    sum.s9 += weights.s6 * delayLine.s2;
-    sum.s9 += weights.s5 * delayLine.s3;
-    sum.s9 += weights.s4 * delayLine.s4;
-    sum.s9 += weights.s3 * delayLine.s5;
-    sum.s9 += weights.s2 * delayLine.s6;
-    sum.s9 += weights.s1 * delayLine.s7;
-    sum.s9 += weights.s0 * delayLine.s8;
-    (*filteredData)[station][pol][time + 9][channel][ri] = sum.s9;
-
-    sum.sA = weights.sF * delayLine.sA;
-    delayLine.sA = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 11][channel][pol_ri]);
-    sum.sA += weights.sE * delayLine.sB;
-    sum.sA += weights.sD * delayLine.sC;
-    sum.sA += weights.sC * delayLine.sD;
-    sum.sA += weights.sB * delayLine.sE;
-    sum.sA += weights.sA * delayLine.sF;
-    sum.sA += weights.s9 * delayLine.s0;
-    sum.sA += weights.s8 * delayLine.s1;
-    sum.sA += weights.s7 * delayLine.s2;
-    sum.sA += weights.s6 * delayLine.s3;
-    sum.sA += weights.s5 * delayLine.s4;
-    sum.sA += weights.s4 * delayLine.s5;
-    sum.sA += weights.s3 * delayLine.s6;
-    sum.sA += weights.s2 * delayLine.s7;
-    sum.sA += weights.s1 * delayLine.s8;
-    sum.sA += weights.s0 * delayLine.s9;
-    (*filteredData)[station][pol][time + 10][channel][ri] = sum.sA;
-
-    sum.sB = weights.sF * delayLine.sB;
-    delayLine.sB = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 12][channel][pol_ri]);
-    sum.sB += weights.sE * delayLine.sC;
-    sum.sB += weights.sD * delayLine.sD;
-    sum.sB += weights.sC * delayLine.sE;
-    sum.sB += weights.sB * delayLine.sF;
-    sum.sB += weights.sA * delayLine.s0;
-    sum.sB += weights.s9 * delayLine.s1;
-    sum.sB += weights.s8 * delayLine.s2;
-    sum.sB += weights.s7 * delayLine.s3;
-    sum.sB += weights.s6 * delayLine.s4;
-    sum.sB += weights.s5 * delayLine.s5;
-    sum.sB += weights.s4 * delayLine.s6;
-    sum.sB += weights.s3 * delayLine.s7;
-    sum.sB += weights.s2 * delayLine.s8;
-    sum.sB += weights.s1 * delayLine.s9;
-    sum.sB += weights.s0 * delayLine.sA;
-    (*filteredData)[station][pol][time + 11][channel][ri] = sum.sB;
-
-    sum.sC = weights.sF * delayLine.sC;
-    delayLine.sC = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 13][channel][pol_ri]);
-    sum.sC += weights.sE * delayLine.sD;
-    sum.sC += weights.sD * delayLine.sE;
-    sum.sC += weights.sC * delayLine.sF;
-    sum.sC += weights.sB * delayLine.s0;
-    sum.sC += weights.sA * delayLine.s1;
-    sum.sC += weights.s9 * delayLine.s2;
-    sum.sC += weights.s8 * delayLine.s3;
-    sum.sC += weights.s7 * delayLine.s4;
-    sum.sC += weights.s6 * delayLine.s5;
-    sum.sC += weights.s5 * delayLine.s6;
-    sum.sC += weights.s4 * delayLine.s7;
-    sum.sC += weights.s3 * delayLine.s8;
-    sum.sC += weights.s2 * delayLine.s9;
-    sum.sC += weights.s1 * delayLine.sA;
-    sum.sC += weights.s0 * delayLine.sB;
-    (*filteredData)[station][pol][time + 12][channel][ri] = sum.sC;
-
-    sum.sD = weights.sF * delayLine.sD;
-    delayLine.sD = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 14][channel][pol_ri]);
-    sum.sD += weights.sE * delayLine.sE;
-    sum.sD += weights.sD * delayLine.sF;
-    sum.sD += weights.sC * delayLine.s0;
-    sum.sD += weights.sB * delayLine.s1;
-    sum.sD += weights.sA * delayLine.s2;
-    sum.sD += weights.s9 * delayLine.s3;
-    sum.sD += weights.s8 * delayLine.s4;
-    sum.sD += weights.s7 * delayLine.s5;
-    sum.sD += weights.s6 * delayLine.s6;
-    sum.sD += weights.s5 * delayLine.s7;
-    sum.sD += weights.s4 * delayLine.s8;
-    sum.sD += weights.s3 * delayLine.s9;
-    sum.sD += weights.s2 * delayLine.sA;
-    sum.sD += weights.s1 * delayLine.sB;
-    sum.sD += weights.s0 * delayLine.sC;
-    (*filteredData)[station][pol][time + 13][channel][ri] = sum.sD;
-
-    sum.sE = weights.sF * delayLine.sE;
-    delayLine.sE = convert_float((*sampledData)[station][time + NR_TAPS - 1 + 15][channel][pol_ri]);
-    sum.sE += weights.sE * delayLine.sF;
-    sum.sE += weights.sD * delayLine.s0;
-    sum.sE += weights.sC * delayLine.s1;
-    sum.sE += weights.sB * delayLine.s2;
-    sum.sE += weights.sA * delayLine.s3;
-    sum.sE += weights.s9 * delayLine.s4;
-    sum.sE += weights.s8 * delayLine.s5;
-    sum.sE += weights.s7 * delayLine.s6;
-    sum.sE += weights.s6 * delayLine.s7;
-    sum.sE += weights.s5 * delayLine.s8;
-    sum.sE += weights.s4 * delayLine.s9;
-    sum.sE += weights.s3 * delayLine.sA;
-    sum.sE += weights.s2 * delayLine.sB;
-    sum.sE += weights.s1 * delayLine.sC;
-    sum.sE += weights.s0 * delayLine.sD;
-    (*filteredData)[station][pol][time + 14][channel][ri] = sum.sE;
-
-    sum.sF = weights.sF * delayLine.sF;
-    sum.sF += weights.sE * delayLine.s0;
-    sum.sF += weights.sD * delayLine.s1;
-    sum.sF += weights.sC * delayLine.s2;
-    sum.sF += weights.sB * delayLine.s3;
-    sum.sF += weights.sA * delayLine.s4;
-    sum.sF += weights.s9 * delayLine.s5;
-    sum.sF += weights.s8 * delayLine.s6;
-    sum.sF += weights.s7 * delayLine.s7;
-    sum.sF += weights.s6 * delayLine.s8;
-    sum.sF += weights.s5 * delayLine.s9;
-    sum.sF += weights.s4 * delayLine.sA;
-    sum.sF += weights.s3 * delayLine.sB;
-    sum.sF += weights.s2 * delayLine.sC;
-    sum.sF += weights.s1 * delayLine.sD;
-    sum.sF += weights.s0 * delayLine.sE;
-    (*filteredData)[station][pol][time + 15][channel][ri] = sum.sF;
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerKernel.cc
deleted file mode 100644
index 43ff420c8d015515027ce3fef327418dbccb06c8..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerKernel.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-//# BeamFormerKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "BeamFormerKernel.h"
-
-#include <algorithm>
-
-#include <Common/lofar_complex.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    BeamFormerKernel::BeamFormerKernel(const Parset &ps, cl::Program &program, cl::Buffer &devComplexVoltages, cl::Buffer &devCorrectedData, cl::Buffer &devBeamFormerWeights)
-      :
-      Kernel(ps, program, "complexVoltages")
-    {
-      setArg(0, devComplexVoltages);
-      setArg(1, devCorrectedData);
-      setArg(2, devBeamFormerWeights);
-
-      globalWorkSize = cl::NDRange(NR_POLARIZATIONS, ps.nrTABs(0), ps.nrChannelsPerSubband());
-      localWorkSize = cl::NDRange(NR_POLARIZATIONS, ps.nrTABs(0), 1);
-
-      // FIXME: nrTABs
-      //queue.enqueueNDRangeKernel(*this, cl::NullRange, cl::NDRange(16, ps.nrTABs(0), ps.nrChannelsPerSubband()), cl::NDRange(16, ps.nrTABs(0), 1), 0, &event);
-
-      size_t count = ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * NR_POLARIZATIONS;
-      size_t nrWeightsBytes = ps.settings.antennaFields.size() * ps.nrTABs(0) * ps.nrChannelsPerSubband() * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      size_t nrSampleBytesPerPass = count * ps.settings.antennaFields.size() * sizeof(std::complex<float>);
-      size_t nrComplexVoltagesBytesPerPass = count * ps.nrTABs(0) * sizeof(std::complex<float>);
-      unsigned nrPasses = std::max((ps.settings.antennaFields.size() + 6) / 16, 1U);
-      nrOperations = count * ps.settings.antennaFields.size() * ps.nrTABs(0) * 8;
-      nrBytesRead = nrWeightsBytes + nrSampleBytesPerPass + (nrPasses - 1) * nrComplexVoltagesBytesPerPass;
-      nrBytesWritten = nrPasses * nrComplexVoltagesBytesPerPass;
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerKernel.h
deleted file mode 100644
index e4fa3735d360ff578e9d512d309b7d1e259eb9e8..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerKernel.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//# BeamFormerKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_BEAM_FORMER_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_BEAM_FORMER_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class BeamFormerKernel : public Kernel
-    {
-    public:
-      BeamFormerKernel(const Parset &ps, cl::Program &program, cl::Buffer &devComplexVoltages,
-                       cl::Buffer &devCorrectedData, cl::Buffer &devBeamFormerWeights);
-    };
-
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerTransposeKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerTransposeKernel.cc
deleted file mode 100644
index 076ce93751221775eb62a3b9b70daa002a719c1f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerTransposeKernel.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-//# BeamFormerTransposeKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "BeamFormerTransposeKernel.h"
-
-#include <Common/lofar_complex.h>
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    BeamFormerTransposeKernel::BeamFormerTransposeKernel(const Parset &ps, cl::Program &program, cl::Buffer &devTransposedData, cl::Buffer &devComplexVoltages)
-      :
-      Kernel(ps, program, "transposeComplexVoltages")
-    {
-      ASSERT(ps.nrSamplesPerChannel() % 16 == 0);
-      setArg(0, devTransposedData);
-      setArg(1, devComplexVoltages);
-
-      //globalWorkSize = cl::NDRange(256, (ps.nrTABs(0) + 15) / 16, (ps.nrChannelsPerSubband() + 15) / 16);
-      globalWorkSize = cl::NDRange(256, (ps.nrTABs(0) + 15) / 16, ps.nrSamplesPerChannel() / 16);
-      localWorkSize = cl::NDRange(256, 1, 1);
-
-      nrOperations = 0;
-      nrBytesRead = (size_t) ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * ps.nrTABs(0) * NR_POLARIZATIONS * sizeof(std::complex<float>),
-      //nrBytesWritten = (size_t) ps.nrTABs(0) * NR_POLARIZATIONS * ps.nrSamplesPerChannel() * ps.nrChannelsPerSubband() * sizeof(std::complex<float>);
-      nrBytesWritten = (size_t) ps.nrTABs(0) * NR_POLARIZATIONS * ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * sizeof(std::complex<float>);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerTransposeKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerTransposeKernel.h
deleted file mode 100644
index 5dd97dc8676f6f2e9b4250c5a798800385609acc..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/BeamFormerTransposeKernel.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//# BeamFormerTransposeKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_BEAM_FORMER_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_BEAM_FORMER_TRANSPOSE_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class BeamFormerTransposeKernel : public Kernel
-    {
-    public:
-      BeamFormerTransposeKernel(const Parset &ps, cl::Program &program,
-                                cl::Buffer &devTransposedData, cl::Buffer &devComplexVoltages);
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CoherentStokesKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CoherentStokesKernel.cc
deleted file mode 100644
index 6a11c6d5660d8c0f5c7453359381ae23c59aa73c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CoherentStokesKernel.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-//# CoherentStokesKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "CoherentStokesKernel.h"
-
-#include <Common/lofar_complex.h>
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    CoherentStokesKernel::CoherentStokesKernel(const Parset &ps, cl::Program &program, cl::Buffer &devStokesData, cl::Buffer &devComplexVoltages)
-      :
-      Kernel(ps, program, "coherentStokes")
-    {
-      ASSERT(ps.nrChannelsPerSubband() >= 16 && ps.nrChannelsPerSubband() % 16 == 0);
-      ASSERT(ps.nrCoherentStokes() == 1 || ps.nrCoherentStokes() == 4);
-      setArg(0, devStokesData);
-      setArg(1, devComplexVoltages);
-
-      globalWorkSize = cl::NDRange(256, (ps.nrTABs(0) + 15) / 16, (ps.nrChannelsPerSubband() + 15) / 16);
-      localWorkSize = cl::NDRange(256, 1, 1);
-
-      nrOperations = (size_t) ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * ps.nrTABs(0) * (ps.nrCoherentStokes() == 1 ? 8 : 20 + 2.0 / ps.coherentStokesTimeIntegrationFactor());
-      nrBytesRead = (size_t) ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * ps.nrTABs(0) * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      nrBytesWritten = (size_t) ps.nrTABs(0) * ps.nrCoherentStokes() * ps.nrSamplesPerChannel() / ps.coherentStokesTimeIntegrationFactor() * ps.nrChannelsPerSubband() * sizeof(float);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CoherentStokesKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CoherentStokesKernel.h
deleted file mode 100644
index fd89371575a2511bc0f1cdfcd06cedf6a9667df2..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CoherentStokesKernel.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//# CoherentStokesKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_COHERENT_STOKES_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_COHERENT_STOKES_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class CoherentStokesKernel : public Kernel
-    {
-    public:
-      CoherentStokesKernel(const Parset &ps, cl::Program &program,
-                           cl::Buffer &devStokesData, cl::Buffer &devComplexVoltages);
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CorrelatorKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CorrelatorKernel.cc
deleted file mode 100644
index 3a576ddbe1cc78adf85550d900bd0d41be699553..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CorrelatorKernel.cc
+++ /dev/null
@@ -1,234 +0,0 @@
-//# CorrelatorKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "CorrelatorKernel.h"
-
-#include <vector>
-#include <algorithm>
-
-#include <Common/lofar_complex.h>
-#include <Common/LofarLogger.h>
-#include <CoInterface/Align.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    CorrelatorKernel::CorrelatorKernel(const Parset &ps,
-                                       cl::CommandQueue &queue,
-                                       cl::Program &program,
-                                       cl::Buffer &devVisibilities,
-                                       cl::Buffer &devCorrectedData)
-      :
-# if defined USE_4X4
-      Kernel(ps, program, "correlate_4x4")
-# elif defined USE_3X3
-      Kernel(ps, program, "correlate_3x3")
-# elif defined USE_2X2
-      Kernel(ps, program, "correlate_2x2")
-# else
-      Kernel(ps, program, "correlate")
-# endif
-    {
-      setArg(0, devVisibilities);
-      setArg(1, devCorrectedData);
-
-      size_t maxNrThreads, preferredMultiple;
-      getWorkGroupInfo(queue.getInfo<CL_QUEUE_DEVICE>(), CL_KERNEL_WORK_GROUP_SIZE, &maxNrThreads);
-
-      std::vector<cl_context_properties> properties;
-      queue.getInfo<CL_QUEUE_CONTEXT>().getInfo(CL_CONTEXT_PROPERTIES, &properties);
-
-      if (cl::Platform((cl_platform_id) properties[1]).getInfo<CL_PLATFORM_NAME>() == "AMD Accelerated Parallel Processing")
-        preferredMultiple = 256;
-      else
-        getWorkGroupInfo(queue.getInfo<CL_QUEUE_DEVICE>(), CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, &preferredMultiple);
-
-# if defined USE_4X4
-      unsigned quartStations = (ps.settings.antennaFields.size() + 2) / 4;
-      unsigned nrBlocks = quartStations * (quartStations + 1) / 2;
-# elif defined USE_3X3
-      unsigned thirdStations = (ps.settings.antennaFields.size() + 2) / 3;
-      unsigned nrBlocks = thirdStations * (thirdStations + 1) / 2;
-# elif defined USE_2X2
-      unsigned halfStations = (ps.settings.antennaFields.size() + 1) / 2;
-      unsigned nrBlocks = halfStations * (halfStations + 1) / 2;
-# else
-      unsigned nrBlocks = ps.nrBaselines();
-# endif
-      unsigned nrPasses = ceilDiv(nrBlocks, maxNrThreads);
-      unsigned nrThreads = ceilDiv(nrBlocks, nrPasses);
-      nrThreads = align(nrThreads, preferredMultiple);
-      //LOG_DEBUG_STR("nrBlocks = " << nrBlocks << ", nrPasses = " << nrPasses << ", preferredMultiple = " << preferredMultiple << ", nrThreads = " << nrThreads);
-
-      unsigned nrUsableChannels = std::max(ps.nrChannelsPerSubband() - 1, 1U);
-      globalWorkSize = cl::NDRange(nrPasses * nrThreads, nrUsableChannels);
-      localWorkSize = cl::NDRange(nrThreads, 1);
-
-      nrOperations = (size_t) nrUsableChannels * ps.nrBaselines() * ps.nrSamplesPerChannel() * 32;
-      nrBytesRead = (size_t) nrPasses * ps.settings.antennaFields.size() * nrUsableChannels * ps.nrSamplesPerChannel() * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      nrBytesWritten = (size_t) ps.nrBaselines() * nrUsableChannels * NR_POLARIZATIONS * NR_POLARIZATIONS * sizeof(std::complex<float>);
-    }
-
-    size_t CorrelatorKernel::bufferSize(const Parset& ps, BufferType bufferType)
-    {
-      switch (bufferType) {
-      case INPUT_DATA:
-        return
-          ps.nrSamplesPerSubband() * ps.settings.antennaFields.size() * 
-          NR_POLARIZATIONS * sizeof(std::complex<float>);
-      case OUTPUT_DATA:
-        return 
-          ps.nrBaselines() * ps.nrChannelsPerSubband() * 
-          NR_POLARIZATIONS * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      default: 
-        THROW(GPUProcException, "Invalid bufferType (" << bufferType << ")");
-      }
-    }
-
-#if defined USE_NEW_CORRELATOR
-
-//     CorrelatorKernel::CorrelatorKernel(const Parset &ps, cl::CommandQueue &queue, cl::Program &program, cl::Buffer &devVisibilities, cl::Buffer &devCorrectedData)
-//       :
-// # if defined USE_2X2
-//       Kernel(ps, program, "correlate")
-// # else
-// #  error not implemented
-// # endif
-//     {
-//       setArg(0, devVisibilities);
-//       setArg(1, devCorrectedData);
-
-//       unsigned nrRectanglesPerSide = (ps.settings.antennaFields.size() - 1) / (2 * 16);
-//       unsigned nrRectangles = nrRectanglesPerSide * (nrRectanglesPerSide + 1) / 2;
-//       //LOG_DEBUG_STR("nrRectangles = " << nrRectangles);
-
-//       unsigned nrBlocksPerSide = (ps.settings.antennaFields.size() + 2 * 16 - 1) / (2 * 16);
-//       unsigned nrBlocks = nrBlocksPerSide * (nrBlocksPerSide + 1) / 2;
-//       //LOG_DEBUG_STR("nrBlocks = " << nrBlocks);
-
-//       unsigned nrUsableChannels = std::max(ps.nrChannelsPerSubband() - 1, 1U);
-//       globalWorkSize = cl::NDRange(16 * 16, nrBlocks, nrUsableChannels);
-//       localWorkSize = cl::NDRange(16 * 16, 1, 1);
-
-//       // FIXME
-//       //nrOperations   = (size_t) (32 * 32) * nrRectangles * nrUsableChannels * ps.nrSamplesPerChannel() * 32;
-//       nrOperations = (size_t) ps.nrBaselines() * ps.nrSamplesPerSubband() * 32;
-//       nrBytesRead = (size_t) (32 + 32) * nrRectangles * nrUsableChannels * ps.nrSamplesPerChannel() * NR_POLARIZATIONS * sizeof(std::complex<float>);
-//       nrBytesWritten = (size_t) (32 * 32) * nrRectangles * nrUsableChannels * NR_POLARIZATIONS * NR_POLARIZATIONS * sizeof(std::complex<float>);
-//     }
-
-    CorrelateRectangleKernel::CorrelateRectangleKernel(const Parset &ps, cl::CommandQueue &queue, cl::Program &program, cl::Buffer &devVisibilities, cl::Buffer &devCorrectedData)
-      :
-# if defined USE_2X2
-      Kernel(ps, program, "correlateRectangleKernel")
-# else
-#  error not implemented
-# endif
-    {
-      setArg(0, devVisibilities);
-      setArg(1, devCorrectedData);
-
-      unsigned nrRectanglesPerSide = (ps.settings.antennaFields.size() - 1) / (2 * 16);
-      unsigned nrRectangles = nrRectanglesPerSide * (nrRectanglesPerSide + 1) / 2;
-      LOG_DEBUG_STR("nrRectangles = " << nrRectangles);
-
-      unsigned nrUsableChannels = std::max(ps.nrChannelsPerSubband() - 1, 1U);
-      globalWorkSize = cl::NDRange(16 * 16, nrRectangles, nrUsableChannels);
-      localWorkSize = cl::NDRange(16 * 16, 1, 1);
-
-      nrOperations = (size_t) (32 * 32) * nrRectangles * nrUsableChannels * ps.nrSamplesPerChannel() * 32;
-      nrBytesRead = (size_t) (32 + 32) * nrRectangles * nrUsableChannels * ps.nrSamplesPerChannel() * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      nrBytesWritten = (size_t) (32 * 32) * nrRectangles * nrUsableChannels * NR_POLARIZATIONS * NR_POLARIZATIONS * sizeof(std::complex<float>);
-    }
-
-
-    size_t CorrelatorRectangleKernel::bufferSize(const Parset& ps, BufferType bufferType)
-    {
-      switch (bufferType) {
-      case INPUT_DATA:
-        return
-          ps.nrSamplesPerSubband() * ps.settings.antennaFields.size() * 
-          NR_POLARIZATIONS * sizeof(std::complex<float>);
-      case OUTPUT_DATA:
-        return 
-          ps.nrBaselines() * ps.nrChannelsPerSubband() * 
-          NR_POLARIZATIONS * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      default: 
-        THROW(GPUProcException, "Invalid bufferType (" << bufferType << ")");
-      }
-    }
-
-
-    CorrelateTriangleKernel::CorrelateTriangleKernel(const Parset &ps, cl::CommandQueue &queue, cl::Program &program, cl::Buffer &devVisibilities, cl::Buffer &devCorrectedData)
-      :
-# if defined USE_2X2
-      Kernel(ps, program, "correlateTriangleKernel")
-# else
-#  error not implemented
-# endif
-    {
-      setArg(0, devVisibilities);
-      setArg(1, devCorrectedData);
-
-      unsigned nrTriangles = (ps.settings.antennaFields.size() + 2 * 16 - 1) / (2 * 16);
-      unsigned nrMiniBlocksPerSide = 16;
-      unsigned nrMiniBlocks = nrMiniBlocksPerSide * (nrMiniBlocksPerSide + 1) / 2;
-      size_t preferredMultiple;
-      getWorkGroupInfo(queue.getInfo<CL_QUEUE_DEVICE>(), CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, &preferredMultiple);
-      unsigned nrThreads = align(nrMiniBlocks, preferredMultiple);
-
-      LOG_DEBUG_STR("nrTriangles = " << nrTriangles << ", nrMiniBlocks = " << nrMiniBlocks << ", nrThreads = " << nrThreads);
-
-      unsigned nrUsableChannels = std::max(ps.nrChannelsPerSubband() - 1, 1U);
-      globalWorkSize = cl::NDRange(nrThreads, nrTriangles, nrUsableChannels);
-      localWorkSize = cl::NDRange(nrThreads, 1, 1);
-
-      nrOperations = (size_t) (32 * 32 / 2) * nrTriangles * nrUsableChannels * ps.nrSamplesPerChannel() * 32;
-      nrBytesRead = (size_t) 32 * nrTriangles * nrUsableChannels * ps.nrSamplesPerChannel() * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      nrBytesWritten = (size_t) (32 * 32 / 2) * nrTriangles * nrUsableChannels * NR_POLARIZATIONS * NR_POLARIZATIONS * sizeof(std::complex<float>);
-    }
-
-    size_t CorrelatorTriangleKernel::bufferSize(const Parset& ps, BufferType bufferType)
-    {
-      switch (bufferType) {
-      case INPUT_DATA:
-        return
-          ps.nrSamplesPerSubband() * ps.settings.antennaFields.size() * 
-          NR_POLARIZATIONS * sizeof(std::complex<float>);
-      case OUTPUT_DATA:
-        return 
-          ps.nrBaselines() * ps.nrChannelsPerSubband() * 
-          NR_POLARIZATIONS * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      default: 
-        THROW(GPUProcException, "Invalid bufferType (" << bufferType << ")");
-      }
-    }
-
-#endif
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CorrelatorKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CorrelatorKernel.h
deleted file mode 100644
index 476ecd2555465157a2f89fc78779d74d7ebed877..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/CorrelatorKernel.h
+++ /dev/null
@@ -1,103 +0,0 @@
-//# CorrelatorKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_CORRELATOR_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_CORRELATOR_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/global_defines.h>
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class CorrelatorKernel : public Kernel
-    {
-    public:
-      CorrelatorKernel(const Parset &ps, 
-                       cl::CommandQueue &queue,
-                       cl::Program &program,
-                       cl::Buffer &devVisibilities,
-                       cl::Buffer &devCorrectedData);
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Return required buffer size for \a bufferType
-      static size_t bufferSize(const Parset& ps, BufferType bufferType);
-
-    };
-
-#if defined USE_NEW_CORRELATOR
-
-    class CorrelateRectangleKernel : public Kernel
-    {
-    public:
-      CorrelateRectangleKernel(const Parset &ps, 
-                               cl::CommandQueue &queue,
-                               cl::Program &program,
-                               cl::Buffer &devVisibilities,
-                               cl::Buffer &devCorrectedData);
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Return required buffer size for \a bufferType
-      static size_t bufferSize(const Parset& ps, BufferType bufferType);
-
-    };
-
-    class CorrelateTriangleKernel : public Kernel
-    {
-    public:
-      CorrelateTriangleKernel(const Parset &ps,
-                              cl::CommandQueue &queue,
-                              cl::Program &program,
-                              cl::Buffer &devVisibilities,
-                              cl::Buffer &devCorrectedData);
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Return required buffer size for \a bufferType
-      static size_t bufferSize(const Parset& ps, BufferType bufferType);
-
-    };
-
-#endif
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionBackwardFFTkernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionBackwardFFTkernel.cc
deleted file mode 100644
index 30adf3405ffb6ec504929cef64b0efe2b2b60d58..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionBackwardFFTkernel.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-//# DedispersionBackwardFFTkernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "DedispersionBackwardFFTkernel.h"
-
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/global_defines.h>
-#include "FFT_Kernel.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    DedispersionBackwardFFTkernel::DedispersionBackwardFFTkernel(const Parset &ps, cl::Context &context, cl::Buffer &buffer)
-      :
-      FFT_Kernel(context, ps.dedispersionFFTsize(), ps.nrTABs(0) * NR_POLARIZATIONS * ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() / ps.dedispersionFFTsize(), false, buffer)
-    {
-      ASSERT(ps.nrSamplesPerChannel() % ps.dedispersionFFTsize() == 0);
-    }
-  }
-
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionBackwardFFTkernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionBackwardFFTkernel.h
deleted file mode 100644
index eb9af7638703bbb07179bce0985b102332287c65..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionBackwardFFTkernel.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//# DedispersionBackwardFFTkernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_DEDISPERSION_BACKWARD_FFTKERNEL_H
-#define LOFAR_GPUPROC_OPENCL_DEDISPERSION_BACKWARD_FFTKERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "FFT_Kernel.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class DedispersionBackwardFFTkernel : public FFT_Kernel
-    {
-    public:
-      DedispersionBackwardFFTkernel(const Parset &ps, cl::Context &context, cl::Buffer &buffer);
-
-    };
-  }
-
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionChirpKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionChirpKernel.cc
deleted file mode 100644
index aef67cee619f691d87dc4cfcbb156d185d2ca093..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionChirpKernel.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-//# DedispersionChirpKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "DedispersionChirpKernel.h"
-
-#include <Common/lofar_complex.h>
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    DedispersionChirpKernel::DedispersionChirpKernel(const Parset &ps, cl::Program &program, cl::CommandQueue &queue, cl::Buffer &buffer, cl::Buffer &DMs)
-      :
-      Kernel(ps, program, "applyChirp")
-    {
-      setArg(0, buffer);
-      setArg(1, DMs);
-
-      size_t maxNrThreads;
-      getWorkGroupInfo(queue.getInfo<CL_QUEUE_DEVICE>(), CL_KERNEL_WORK_GROUP_SIZE, &maxNrThreads);
-      unsigned fftSize = ps.dedispersionFFTsize();
-
-      globalWorkSize = cl::NDRange(fftSize, ps.nrSamplesPerChannel() / fftSize, ps.nrChannelsPerSubband());
-      //std::cout << "globalWorkSize = NDRange(" << fftSize << ", " << ps.nrSamplesPerChannel() / fftSize << ", " << ps.nrChannelsPerSubband() << ')' << std::endl;
-
-      if (fftSize <= maxNrThreads) {
-        localWorkSize = cl::NDRange(fftSize, 1, maxNrThreads / fftSize);
-        //std::cout << "localWorkSize = NDRange(" << fftSize << ", 1, " << maxNrThreads / fftSize << ')' << std::endl;
-      } else {
-        unsigned divisor;
-
-        for (divisor = 1; fftSize / divisor > maxNrThreads || fftSize % divisor != 0; divisor++)
-          ;
-
-        localWorkSize = cl::NDRange(fftSize / divisor, 1, 1);
-        //std::cout << "localWorkSize = NDRange(" << fftSize / divisor << ", 1, 1))" << std::endl;
-      }
-
-      nrOperations = (size_t) NR_POLARIZATIONS * ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * (9 * ps.nrTABs(0) + 17),
-      nrBytesRead = nrBytesWritten = sizeof(std::complex<float>) * ps.nrTABs(0) * NR_POLARIZATIONS * ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel();
-    }
-
-    void DedispersionChirpKernel::enqueue(cl::CommandQueue &queue, PerformanceCounter &counter, double subbandFrequency)
-    {
-      setArg(2, (float) subbandFrequency);
-      Kernel::enqueue(queue, counter);
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionChirpKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionChirpKernel.h
deleted file mode 100644
index f5c520a29a422ccab9e3d96cebcf7e0f1e9f476a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionChirpKernel.h
+++ /dev/null
@@ -1,49 +0,0 @@
-//# DedispersionChirpKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_DEDISPERSION_CHIRP_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_DEDISPERSION_CHIRP_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-#include <GPUProc/PerformanceCounter.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class DedispersionChirpKernel : public Kernel
-    {
-    public:
-      DedispersionChirpKernel(const Parset &ps, cl::Program &program,
-                              cl::CommandQueue &queue, cl::Buffer &buffer, cl::Buffer &DMs);
-
-      void enqueue(cl::CommandQueue &queue, PerformanceCounter &counter, double subbandFrequency);
-
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionForwardFFTkernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionForwardFFTkernel.cc
deleted file mode 100644
index 4c71c180fb009567a29fadb56a8df3e5021d8ea4..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionForwardFFTkernel.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-//# DedispersionForwardFFTkernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "DedispersionForwardFFTkernel.h"
-
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/global_defines.h>
-#include "FFT_Kernel.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    DedispersionForwardFFTkernel::DedispersionForwardFFTkernel(const Parset &ps, cl::Context &context, cl::Buffer &buffer)
-      :
-      FFT_Kernel(context, ps.dedispersionFFTsize(), ps.nrTABs(0) * NR_POLARIZATIONS * ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() / ps.dedispersionFFTsize(), true, buffer)
-    {
-      ASSERT(ps.nrSamplesPerChannel() % ps.dedispersionFFTsize() == 0);
-    }
-  }
-
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionForwardFFTkernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionForwardFFTkernel.h
deleted file mode 100644
index d54c43e9b1ed755ec404f7ec58f88320967c446e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DedispersionForwardFFTkernel.h
+++ /dev/null
@@ -1,42 +0,0 @@
-//# DedispersionForwardFFTkernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_DEDISPERSION_FORWARD_FFTKERNEL_H
-#define LOFAR_GPUPROC_OPENCL_DEDISPERSION_FORWARD_FFTKERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "FFT_Kernel.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class DedispersionForwardFFTkernel : public FFT_Kernel
-    {
-    public:
-      DedispersionForwardFFTkernel(const Parset &ps, cl::Context &context, cl::Buffer &buffer);
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DelayAndBandPassKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DelayAndBandPassKernel.cc
deleted file mode 100644
index 18d1fdaa69170c80753f9446b26944f8fc9b2e1e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DelayAndBandPassKernel.cc
+++ /dev/null
@@ -1,99 +0,0 @@
-//# DelayAndBandPassKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "DelayAndBandPassKernel.h"
-
-#include <Common/lofar_complex.h>
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    DelayAndBandPassKernel::DelayAndBandPassKernel(const Parset &ps, cl::Program &program,
-                                                   cl::Buffer &devCorrectedData, cl::Buffer &devFilteredData,
-                                                   cl::Buffer &devDelaysAtBegin, cl::Buffer &devDelaysAfterEnd,
-                                                   cl::Buffer &devPhaseOffsets, cl::Buffer &devBandPassCorrectionWeights)
-      :
-      Kernel(ps, program, "applyDelaysAndCorrectBandPass")
-    {
-      ASSERT(ps.nrChannelsPerSubband() % 16 == 0 || ps.nrChannelsPerSubband() == 1);
-      ASSERT(ps.nrSamplesPerChannel() % 16 == 0);
-
-      setArg(0, devCorrectedData);
-      setArg(1, devFilteredData);
-      setArg(4, devDelaysAtBegin);
-      setArg(5, devDelaysAfterEnd);
-      setArg(6, devPhaseOffsets);
-      setArg(7, devBandPassCorrectionWeights);
-
-      globalWorkSize = cl::NDRange(256, ps.nrChannelsPerSubband() == 1 ? 1 : ps.nrChannelsPerSubband() / 16, ps.settings.antennaFields.size());
-      localWorkSize = cl::NDRange(256, 1, 1);
-
-      size_t nrSamples = ps.settings.antennaFields.size() * ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * NR_POLARIZATIONS;
-      nrOperations = nrSamples * 12;
-      nrBytesRead = nrBytesWritten = nrSamples * sizeof(std::complex<float>);
-    }
-
-    void DelayAndBandPassKernel::enqueue(cl::CommandQueue &queue, PerformanceCounter &counter, unsigned subband)
-    {
-      setArg(2, (float) ps.subbandToFrequencyMapping()[subband]);
-      setArg(3, 0);       // beam
-      Kernel::enqueue(queue, counter);
-    }
-
-    size_t
-    DelayAndBandPassKernel::bufferSize(const Parset& ps, BufferType bufferType)
-    {
-      switch (bufferType) {
-      case INPUT_DATA: 
-        if (ps.nrChannelsPerSubband() == 1)
-          return 
-            ps.settings.antennaFields.size() * NR_POLARIZATIONS * 
-            ps.nrSamplesPerSubband() * ps.nrBytesPerComplexSample();
-        else
-          return 
-            ps.settings.antennaFields.size() * NR_POLARIZATIONS * 
-            ps.nrSamplesPerSubband() * sizeof(std::complex<float>);
-      case OUTPUT_DATA:
-        return
-          ps.settings.antennaFields.size() * NR_POLARIZATIONS * 
-          ps.nrSamplesPerSubband() * sizeof(std::complex<float>);
-      case DELAYS:
-        return 
-          ps.nrBeams() * ps.settings.antennaFields.size() * NR_POLARIZATIONS * sizeof(float);
-      case PHASE_OFFSETS:
-        return
-          ps.settings.antennaFields.size() * NR_POLARIZATIONS * sizeof(float);
-      case BAND_PASS_CORRECTION_WEIGHTS:
-        return
-          ps.nrChannelsPerSubband() * sizeof(float);
-      default:
-        THROW(GPUProcException, "Invalid bufferType (" << bufferType << ")");
-      }
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DelayAndBandPassKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DelayAndBandPassKernel.h
deleted file mode 100644
index a4b8df2d44d7b754b077296391fba89357eba688..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/DelayAndBandPassKernel.h
+++ /dev/null
@@ -1,68 +0,0 @@
-//# DelayAndBandPassKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_DELAY_AND_BAND_PASS_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_DELAY_AND_BAND_PASS_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-#include <GPUProc/PerformanceCounter.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class DelayAndBandPassKernel : public Kernel
-    {
-    public:
-      DelayAndBandPassKernel(const Parset &ps,
-                             cl::Program &program,
-                             cl::Buffer &devCorrectedData,
-                             cl::Buffer &devFilteredData,
-                             cl::Buffer &devDelaysAtBegin,
-                             cl::Buffer &devDelaysAfterEnd,
-                             cl::Buffer &devPhaseOffsets,
-                             cl::Buffer &devBandPassCorrectionWeights);
-
-      void enqueue(cl::CommandQueue &queue, 
-                   PerformanceCounter &counter, 
-                   unsigned subband);
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA,
-        DELAYS,
-        PHASE_OFFSETS,
-        BAND_PASS_CORRECTION_WEIGHTS
-      };
-
-      // Return required buffer size for \a bufferType
-      static size_t bufferSize(const Parset& ps, BufferType bufferType);
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Kernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Kernel.cc
deleted file mode 100644
index 6cdadd3dfb6763be73ee9876528ca3e6bf655e60..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Kernel.cc
+++ /dev/null
@@ -1,88 +0,0 @@
-//# FFT_Kernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include <vector>
-
-#include <Common/LofarLogger.h>
-#include <GPUProc/global_defines.h>
-
-#include "FFT_Kernel.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    FFT_Kernel::FFT_Kernel(cl::Context &context, unsigned fftSize, unsigned nrFFTs, bool forward, cl::Buffer &buffer)
-      :
-      nrFFTs(nrFFTs),
-      fftSize(fftSize)
-#if defined USE_CUSTOM_FFT
-    {
-      ASSERT(fftSize == 256);
-      ASSERT(forward);
-      std::vector<cl::Device> devices = context.getInfo<CL_CONTEXT_DEVICES>();
-      cl::Program program = createProgram(context, devices, "FFT.cl", "");
-      kernel = cl::Kernel(program, "fft0");
-      kernel.setArg(0, buffer);
-    }
-#else
-      , direction(forward ? clFFT_Forward : clFFT_Inverse),
-      plan(context, fftSize),
-      buffer(buffer)
-    {
-    }
-#endif
-
-    void FFT_Kernel::enqueue(cl::CommandQueue &queue, PerformanceCounter &counter)
-    {
-#if defined USE_CUSTOM_FFT
-      queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(nrFFTs * 64 / 4, 4), cl::NDRange(64, 4), 0, &event);
-#else
-      cl_int error = clFFT_ExecuteInterleaved(queue(), plan.plan, nrFFTs, direction, buffer(), buffer(), 0, 0, &event());
-
-      if (error != CL_SUCCESS)
-        throw cl::Error(error, "clFFT_ExecuteInterleaved");
-#endif
-
-      counter.doOperation(event,
-                          (size_t) nrFFTs * 5 * fftSize * log2(fftSize),
-                          (size_t) nrFFTs * fftSize * sizeof(std::complex<float>),
-                          (size_t) nrFFTs * fftSize * sizeof(std::complex<float>));
-    }
-
-    size_t FFT_Kernel::bufferSize(const Parset& ps, BufferType bufferType)
-    {
-      switch (bufferType) {
-      case INPUT_DATA: 
-      case OUTPUT_DATA:
-        return
-          ps.settings.antennaFields.size() * NR_POLARIZATIONS * 
-          ps.nrSamplesPerSubband() * sizeof(std::complex<float>);
-      default:
-        THROW(GPUProcException, "Invalid bufferType (" << bufferType << ")");
-      }
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Kernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Kernel.h
deleted file mode 100644
index 833323ad6ff0fe4b8e25c59be928a71544a9d22b..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Kernel.h
+++ /dev/null
@@ -1,66 +0,0 @@
-//# FFT_Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_FFT_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_FFT_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/gpu_incl.h>
-#include <GPUProc/PerformanceCounter.h>
-#include "FFT_Plan.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class FFT_Kernel
-    {
-    public:
-      FFT_Kernel(cl::Context &context, unsigned fftSize,
-                 unsigned nrFFTs, bool forward, cl::Buffer &buffer);
-
-      void enqueue(cl::CommandQueue &queue, PerformanceCounter &counter);
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA
-      };
-
-      // Return required buffer size for \a bufferType
-      static size_t bufferSize(const Parset& ps, BufferType bufferType);
-
-    private:
-      unsigned nrFFTs, fftSize;
-#if defined USE_CUSTOM_FFT
-      cl::Kernel kernel;
-#else
-      clFFT_Direction direction;
-      FFT_Plan plan;
-      cl::Buffer   &buffer;
-#endif
-      cl::Event event;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Plan.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Plan.cc
deleted file mode 100644
index 796bce3d37c5eb9d638c8d048e66c1e77038a6a5..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Plan.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-//# FFT_Plan.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "FFT_Plan.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    FFT_Plan::FFT_Plan(cl::Context &context, unsigned fftSize)
-    {
-      clFFT_Dim3 dim = { fftSize, 1, 1 };
-      cl_int error;
-      plan = clFFT_CreatePlan(context(), dim, clFFT_1D, clFFT_InterleavedComplexFormat, &error);
-
-      if (error != CL_SUCCESS)
-        throw cl::Error(error, "clFFT_CreatePlan");
-
-      //clFFT_DumpPlan(plan, stdout);
-    }
-
-    FFT_Plan::~FFT_Plan()
-    {
-      clFFT_DestroyPlan(plan);
-    }
-
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Plan.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Plan.h
deleted file mode 100644
index c92990ede004ca89d01fd6077db0963a353c12ef..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FFT_Plan.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//# FFT_Plan.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_FFT_PLAN_H
-#define LOFAR_GPUPROC_OPENCL_FFT_PLAN_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/gpu_incl.h>
-#include <OpenCL_FFT/clFFT.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class FFT_Plan
-    {
-    public:
-      FFT_Plan(cl::Context &context, unsigned fftSize);
-      ~FFT_Plan();
-      clFFT_Plan plan;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FIR_FilterKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FIR_FilterKernel.cc
deleted file mode 100644
index 668cc39b7ecb2cb2360ebc9332a010f55681e800..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FIR_FilterKernel.cc
+++ /dev/null
@@ -1,75 +0,0 @@
-//# FIR_FilterKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "FIR_FilterKernel.h"
-
-#include <Common/lofar_complex.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    FIR_FilterKernel::FIR_FilterKernel(const Parset &ps, cl::CommandQueue &queue, cl::Program &program, cl::Buffer &devFilteredData, cl::Buffer &devInputSamples, cl::Buffer &devFIRweights)
-      :
-      Kernel(ps, program, "FIR_filter")
-    {
-      setArg(0, devFilteredData);
-      setArg(1, devInputSamples);
-      setArg(2, devFIRweights);
-
-      size_t maxNrThreads;
-      getWorkGroupInfo(queue.getInfo<CL_QUEUE_DEVICE>(), CL_KERNEL_WORK_GROUP_SIZE, &maxNrThreads);
-      unsigned totalNrThreads = ps.nrChannelsPerSubband() * NR_POLARIZATIONS * 2;
-      unsigned nrPasses = (totalNrThreads + maxNrThreads - 1) / maxNrThreads;
-      globalWorkSize = cl::NDRange(totalNrThreads, ps.settings.antennaFields.size());
-      localWorkSize = cl::NDRange(totalNrThreads / nrPasses, 1);
-
-      size_t nrSamples = (size_t) ps.settings.antennaFields.size() * ps.nrChannelsPerSubband() * NR_POLARIZATIONS;
-      nrOperations = nrSamples * ps.nrSamplesPerChannel() * NR_TAPS * 2 * 2;
-      nrBytesRead = nrSamples * (NR_TAPS - 1 + ps.nrSamplesPerChannel()) * ps.nrBytesPerComplexSample();
-      nrBytesWritten = nrSamples * ps.nrSamplesPerChannel() * sizeof(std::complex<float>);
-    }
-
-    size_t FIR_FilterKernel::bufferSize(const Parset& ps, BufferType bufferType)
-    {
-      switch (bufferType) {
-      case INPUT_DATA: 
-        return
-          (ps.nrHistorySamples() + ps.nrSamplesPerSubband()) * 
-          ps.settings.antennaFields.size() * NR_POLARIZATIONS * ps.nrBytesPerComplexSample();
-      case OUTPUT_DATA:
-        return
-          ps.nrSamplesPerSubband() * ps.settings.antennaFields.size() * 
-          NR_POLARIZATIONS * sizeof(std::complex<float>);
-      case FILTER_WEIGHTS:
-        return 
-          ps.nrChannelsPerSubband() * NR_TAPS * sizeof(float);
-      default:
-        THROW(GPUProcException, "Invalid bufferType (" << bufferType << ")");
-      }
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FIR_FilterKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FIR_FilterKernel.h
deleted file mode 100644
index aa016ab51a1e1a8d71020842e5126961740152ed..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/FIR_FilterKernel.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//# FIR_FilterKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_FIR_FILTER_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_FIR_FILTER_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class FIR_FilterKernel : public Kernel
-    {
-    public:
-      FIR_FilterKernel(const Parset &ps,
-                       cl::CommandQueue &queue,
-                       cl::Program &program,
-                       cl::Buffer &devFilteredData,
-                       cl::Buffer &devInputSamples,
-                       cl::Buffer &devFIRweights);
-
-      enum BufferType
-      {
-        INPUT_DATA,
-        OUTPUT_DATA,
-        FILTER_WEIGHTS
-      };
-
-      // Return required buffer size for \a bufferType
-      static size_t bufferSize(const Parset& ps, BufferType bufferType);
-
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Filter_FFT_Kernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Filter_FFT_Kernel.cc
deleted file mode 100644
index 37820f4bbe2c84de2f19e2df82c4104d19884c7d..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Filter_FFT_Kernel.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-//# Filter_FFT_Kernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "Filter_FFT_Kernel.h"
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    Filter_FFT_Kernel::Filter_FFT_Kernel(const Parset &ps, cl::Context &context, cl::Buffer &devFilteredData)
-      :
-      FFT_Kernel(context, ps.nrChannelsPerSubband(), ps.settings.antennaFields.size() * NR_POLARIZATIONS * ps.nrSamplesPerChannel(), true, devFilteredData)
-    {
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Filter_FFT_Kernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Filter_FFT_Kernel.h
deleted file mode 100644
index 05b8d1711880c0dc16bd37e716f6f1d2a11e6f8b..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Filter_FFT_Kernel.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//# Filter_FFT_Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_FILTER_FFT_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_FILTER_FFT_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "FFT_Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class Filter_FFT_Kernel : public FFT_Kernel
-    {
-    public:
-      Filter_FFT_Kernel(const Parset &ps, cl::Context &context,
-                        cl::Buffer &devFilteredData);
-
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IncoherentStokesKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IncoherentStokesKernel.cc
deleted file mode 100644
index b997f6343cc7e2725a95fba9b56bf3e39e7aedc0..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IncoherentStokesKernel.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-//# IncoherentStokesKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "IncoherentStokesKernel.h"
-
-#include <Common/lofar_complex.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    IncoherentStokesKernel::IncoherentStokesKernel(const Parset &ps, cl::CommandQueue &queue,
-                                                   cl::Program &program, cl::Buffer &devIncoherentStokes, cl::Buffer &devInputSamples)
-      :
-      Kernel(ps, program, "incoherentStokes")
-    {
-      setArg(0, devIncoherentStokes);
-      setArg(1, devInputSamples);
-
-      unsigned nrTimes = ps.nrSamplesPerChannel() / ps.incoherentStokesTimeIntegrationFactor();
-      size_t maxNrThreads;
-      getWorkGroupInfo(queue.getInfo<CL_QUEUE_DEVICE>(), CL_KERNEL_WORK_GROUP_SIZE, &maxNrThreads);
-      unsigned nrPasses = (nrTimes + maxNrThreads - 1) / maxNrThreads;
-      unsigned nrTimesPerPass = (nrTimes + nrPasses - 1) / nrPasses;
-      globalWorkSize = cl::NDRange(nrTimesPerPass * nrPasses, ps.nrChannelsPerSubband());
-      localWorkSize = cl::NDRange(nrTimesPerPass, 1);
-
-      nrOperations = ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * ps.settings.antennaFields.size() * (ps.nrIncoherentStokes() == 1 ? 8 : 20 + 2.0 / ps.incoherentStokesTimeIntegrationFactor());
-      nrBytesRead = (size_t) ps.settings.antennaFields.size() * ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      nrBytesWritten = (size_t) ps.nrIncoherentStokes() * nrTimes * ps.nrChannelsPerSubband() * sizeof(float);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IncoherentStokesKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IncoherentStokesKernel.h
deleted file mode 100644
index e7317addbc0479e29a051175aa02e62224a5598c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IncoherentStokesKernel.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//# IncoherentStokesKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_INCOHERENT_STOKES_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_INCOHERENT_STOKES_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class IncoherentStokesKernel : public Kernel
-    {
-    public:
-      IncoherentStokesKernel(const Parset &ps, cl::CommandQueue &queue, cl::Program &program,
-                             cl::Buffer &devIncoherentStokes, cl::Buffer &devInputSamples);
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IntToFloatKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IntToFloatKernel.cc
deleted file mode 100644
index 33a33aa7a44e37694916ff04d767c5f49d3564d4..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IntToFloatKernel.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-//# IntToFloatKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "IntToFloatKernel.h"
-
-#include <Common/lofar_complex.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    IntToFloatKernel::IntToFloatKernel(const Parset &ps, cl::CommandQueue &queue, cl::Program &program, cl::Buffer &devFilteredData, cl::Buffer &devInputSamples)
-      :
-      Kernel(ps, program, "intToFloat")
-    {
-      setArg(0, devFilteredData);
-      setArg(1, devInputSamples);
-
-      size_t maxNrThreads;
-      getWorkGroupInfo(queue.getInfo<CL_QUEUE_DEVICE>(), CL_KERNEL_WORK_GROUP_SIZE, &maxNrThreads);
-      globalWorkSize = cl::NDRange(maxNrThreads, ps.settings.antennaFields.size());
-      localWorkSize = cl::NDRange(maxNrThreads, 1);
-
-      size_t nrSamples = ps.settings.antennaFields.size() * ps.nrSamplesPerChannel() * ps.nrChannelsPerSubband() * NR_POLARIZATIONS;
-      nrOperations = nrSamples * 2;
-      nrBytesRead = nrSamples * 2 * ps.nrBitsPerSample() / 8;
-      nrBytesWritten = nrSamples * sizeof(std::complex<float>);
-    }
-
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IntToFloatKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IntToFloatKernel.h
deleted file mode 100644
index d3412ab9209cf9330ca5a0cea671229035cb35de..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/IntToFloatKernel.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//# IntToFloatKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_INT_TO_FLOAT_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_INT_TO_FLOAT_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class IntToFloatKernel : public Kernel
-    {
-    public:
-      IntToFloatKernel(const Parset &ps, cl::CommandQueue &queue, cl::Program &program,
-                       cl::Buffer &devFilteredData, cl::Buffer &devInputSamples);
-    };
-  }
-
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Kernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Kernel.cc
deleted file mode 100644
index decb888c853c8406e5249de52ba27572020aabe5..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Kernel.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-//# Kernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "Kernel.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    Kernel::Kernel(const Parset &ps, cl::Program &program, const char *name)
-      :
-      cl::Kernel(program, name),
-      ps(ps)
-    {
-    }
-
-    void Kernel::enqueue(cl::CommandQueue &queue, PerformanceCounter &counter)
-    {
-      // AMD complains if we submit 0-sized work
-      for (unsigned dim = 0; dim < globalWorkSize.dimensions(); dim++)
-        if (globalWorkSize[dim] == 0)
-          return;
-
-      queue.enqueueNDRangeKernel(*this, 
-                                 cl::NullRange,
-                                 globalWorkSize,
-                                 localWorkSize,
-                                 0, 
-                                 &event);
-      counter.doOperation(event, nrOperations, nrBytesRead, nrBytesWritten);
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Kernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Kernel.h
deleted file mode 100644
index 5cf6b0b50c01354b09f8be16ee74513d2e553107..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/Kernel.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//# Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/gpu_incl.h>
-#include <GPUProc/PerformanceCounter.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class Kernel : public cl::Kernel
-    {
-    public:
-      Kernel(const Parset &ps, cl::Program &program, const char *name);
-
-      void enqueue(cl::CommandQueue &queue, PerformanceCounter &counter);
-
-    protected:
-      cl::Event event;
-      const Parset &ps;
-      cl::NDRange globalWorkSize, localWorkSize;
-      size_t nrOperations, nrBytesRead, nrBytesWritten;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_BeamFormerKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_BeamFormerKernel.cc
deleted file mode 100644
index bd70925c2573c1e688009ec0cf021d648c271929..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_BeamFormerKernel.cc
+++ /dev/null
@@ -1,75 +0,0 @@
-//# UHEP_BeamFormerKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "UHEP_BeamFormerKernel.h"
-
-#include <algorithm>
-
-#include <Common/lofar_complex.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    UHEP_BeamFormerKernel::UHEP_BeamFormerKernel(const Parset &ps, cl::Program &program, cl::Buffer &devComplexVoltages, cl::Buffer &devInputSamples, cl::Buffer &devBeamFormerWeights)
-      :
-      Kernel(ps, program, "complexVoltages")
-    {
-      setArg(0, devComplexVoltages);
-      setArg(1, devInputSamples);
-      setArg(2, devBeamFormerWeights);
-
-#if 1
-      globalWorkSize = cl::NDRange(NR_POLARIZATIONS, ps.nrTABs(0), ps.nrSubbands());
-      localWorkSize = cl::NDRange(NR_POLARIZATIONS, ps.nrTABs(0), 1);
-
-      size_t count = ps.nrSubbands() * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) * NR_POLARIZATIONS;
-      size_t nrWeightsBytes = ps.settings.antennaFields.size() * ps.nrTABs(0) * ps.nrSubbands() * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      size_t nrSampleBytes = count * ps.settings.antennaFields.size() * ps.nrBytesPerComplexSample();
-      size_t nrComplexVoltagesBytesPerPass = count * ps.nrTABs(0) * sizeof(std::complex<float>);
-      unsigned nrPasses = std::max((ps.settings.antennaFields.size() + 6) / 16, 1U);
-      nrOperations = count * ps.settings.antennaFields.size() * ps.nrTABs(0) * 8;
-      nrBytesRead = nrWeightsBytes + nrSampleBytes + (nrPasses - 1) * nrComplexVoltagesBytesPerPass;
-      nrBytesWritten = nrPasses * nrComplexVoltagesBytesPerPass;
-#else
-      ASSERT(ps.nrTABs(0) % 3 == 0);
-      ASSERT(ps.settings.antennaFields.size() % 6 == 0);
-      unsigned nrThreads = NR_POLARIZATIONS * (ps.nrTABs(0) / 3) * (ps.settings.antennaFields.size() / 6);
-      globalWorkSize = cl::NDRange(nrThreads, ps.nrSubbands());
-      localWorkSize = cl::NDRange(nrThreads, 1);
-      //globalWorkSize = cl::NDRange(ps.settings.antennaFields.size() / 6, ps.nrTABs(0) / 3, ps.nrSubbands());
-      //localWorkSize  = cl::NDRange(ps.settings.antennaFields.size() / 6, ps.nrTABs(0) / 3, 1);
-
-      size_t count = ps.nrSubbands() * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) * NR_POLARIZATIONS;
-      size_t nrWeightsBytes = ps.settings.antennaFields.size() * ps.nrTABs(0) * ps.nrSubbands() * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      size_t nrSampleBytes = count * ps.settings.antennaFields.size() * ps.nrBytesPerComplexSample();
-      size_t nrComplexVoltagesBytes = count * ps.nrTABs(0) * sizeof(std::complex<float>);
-      nrOperations = count * ps.settings.antennaFields.size() * ps.nrTABs(0) * 8;
-      nrBytesRead = nrWeightsBytes + nrSampleBytes;
-      nrBytesWritten = nrComplexVoltagesBytes;
-#endif
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_BeamFormerKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_BeamFormerKernel.h
deleted file mode 100644
index 3caffa7aa14a7fc61bfcf49418594fbe6ad45e1f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_BeamFormerKernel.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//# UHEP_BeamFormerKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_UHEP_BEAM_FORMER_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_UHEP_BEAM_FORMER_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_BeamFormerKernel : public Kernel
-    {
-    public:
-      UHEP_BeamFormerKernel(const Parset &ps, cl::Program &program,
-                            cl::Buffer &devComplexVoltages, cl::Buffer &devInputSamples, cl::Buffer &devBeamFormerWeights);
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFFT_Kernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFFT_Kernel.cc
deleted file mode 100644
index 76352a74e9f05d9d58ad75529b42e988f4ff5c57..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFFT_Kernel.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-//# UHEP_InvFFT_Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "UHEP_InvFFT_Kernel.h"
-
-#include <Common/lofar_complex.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    UHEP_InvFFT_Kernel::UHEP_InvFFT_Kernel(const Parset &ps, cl::Program &program, cl::Buffer &devFFTedData)
-      :
-      Kernel(ps, program, "inv_fft")
-    {
-      setArg(0, devFFTedData);
-      setArg(1, devFFTedData);
-
-      globalWorkSize = cl::NDRange(128, ps.nrTABs(0) * NR_POLARIZATIONS * ps.nrSamplesPerChannel());
-      localWorkSize = cl::NDRange(128, 1);
-
-      size_t nrFFTs = (size_t) ps.nrTABs(0) * NR_POLARIZATIONS * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1);
-      nrOperations = nrFFTs * 5 * 1024 * 10;
-      nrBytesRead = nrFFTs * 512 * sizeof(std::complex<float>);
-      nrBytesWritten = nrFFTs * 1024 * sizeof(float);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFFT_Kernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFFT_Kernel.h
deleted file mode 100644
index 247290d851ddea6dca4a1796f4465efc6994b040..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFFT_Kernel.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//# UHEP_InvFFT_Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_UHEP_INV_FFT_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_UHEP_INV_FFT_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_InvFFT_Kernel : public Kernel
-    {
-    public:
-      UHEP_InvFFT_Kernel(const Parset &ps, cl::Program &program, cl::Buffer &devFFTedData);
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFIR_Kernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFIR_Kernel.cc
deleted file mode 100644
index d324b66914bcfb770e56e3c90c4b6321a9d73994..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFIR_Kernel.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-//# UHEP_InvFIR_Kernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "UHEP_InvFIR_Kernel.h"
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    UHEP_InvFIR_Kernel::UHEP_InvFIR_Kernel(const Parset &ps, cl::CommandQueue &queue,
-                                           cl::Program &program, cl::Buffer &devInvFIRfilteredData, cl::Buffer &devFFTedData,
-                                           cl::Buffer &devInvFIRfilterWeights)
-      :
-      Kernel(ps, program, "invFIRfilter")
-    {
-      setArg(0, devInvFIRfilteredData);
-      setArg(1, devFFTedData);
-      setArg(2, devInvFIRfilterWeights);
-
-      size_t maxNrThreads, nrThreads;
-      getWorkGroupInfo(queue.getInfo<CL_QUEUE_DEVICE>(), CL_KERNEL_WORK_GROUP_SIZE, &maxNrThreads);
-      // round down to nearest power of two
-      for (nrThreads = 1024; nrThreads > maxNrThreads; nrThreads /= 2)
-        ;
-
-      globalWorkSize = cl::NDRange(1024, NR_POLARIZATIONS, ps.nrTABs(0));
-      localWorkSize = cl::NDRange(nrThreads, 1, 1);
-
-      size_t count = ps.nrTABs(0) * NR_POLARIZATIONS * 1024;
-      nrOperations = count * ps.nrSamplesPerChannel() * NR_STATION_FILTER_TAPS * 2;
-      nrBytesRead = count * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) * sizeof(float);
-      nrBytesWritten = count * ps.nrSamplesPerChannel() * sizeof(float);
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFIR_Kernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFIR_Kernel.h
deleted file mode 100644
index 327714ade26503b181452942fd50cd7f8b64e0c7..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_InvFIR_Kernel.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//# UHEP_InvFIR_Kernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_UHEP_INV_FIR_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_UHEP_INV_FIR_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_InvFIR_Kernel : public Kernel
-    {
-    public:
-      UHEP_InvFIR_Kernel(const Parset &ps, cl::CommandQueue &queue,
-                         cl::Program &program, cl::Buffer &devInvFIRfilteredData,
-                         cl::Buffer &devFFTedData, cl::Buffer &devInvFIRfilterWeights);
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TransposeKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TransposeKernel.cc
deleted file mode 100644
index cad70527749397b2e3af4ddf42fed769370b7984..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TransposeKernel.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-//# UHEP_TransposeKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "UHEP_TransposeKernel.h"
-
-#include <Common/lofar_complex.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    UHEP_TransposeKernel::UHEP_TransposeKernel(const Parset &ps, cl::Program &program, cl::Buffer &devFFTedData, cl::Buffer &devComplexVoltages, cl::Buffer &devReverseSubbandMapping)
-      :
-      Kernel(ps, program, "UHEP_Transpose")
-    {
-      setArg(0, devFFTedData);
-      setArg(1, devComplexVoltages);
-      setArg(2, devReverseSubbandMapping);
-
-      globalWorkSize = cl::NDRange(256, (ps.nrTABs(0) + 15) / 16, 512 / 16);
-      localWorkSize = cl::NDRange(256, 1, 1);
-
-      nrOperations = 0;
-      nrBytesRead = (size_t) ps.nrSubbands() * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) * ps.nrTABs(0) * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      nrBytesWritten = (size_t) ps.nrTABs(0) * NR_POLARIZATIONS * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) * 512 * sizeof(std::complex<float>);
-    }
-
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TransposeKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TransposeKernel.h
deleted file mode 100644
index 9469184a29ef04250fb76235c19c12cdc60ceec8..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TransposeKernel.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//# UHEP_TransposeKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_UHEP_TRANSPOSE_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_UHEP_TRANSPOSE_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_TransposeKernel : public Kernel
-    {
-    public:
-      UHEP_TransposeKernel(const Parset &ps, cl::Program &program,
-                           cl::Buffer &devFFTedData, cl::Buffer &devComplexVoltages, cl::Buffer &devReverseSubbandMapping);
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TriggerKernel.cc b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TriggerKernel.cc
deleted file mode 100644
index 0305164f9a1f8c9f8c3f75cfcc22b6e02cef67e4..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TriggerKernel.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-//# UHEP_TriggerKernel.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "UHEP_TriggerKernel.h"
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    UHEP_TriggerKernel::UHEP_TriggerKernel(const Parset &ps, cl::Program &program, cl::Buffer &devTriggerInfo, cl::Buffer &devInvFIRfilteredData)
-      :
-      Kernel(ps, program, "trigger")
-    {
-      setArg(0, devTriggerInfo);
-      setArg(1, devInvFIRfilteredData);
-
-      globalWorkSize = cl::NDRange(16, 16, ps.nrTABs(0));
-      localWorkSize = cl::NDRange(16, 16, 1);
-
-      nrOperations = (size_t) ps.nrTABs(0) * ps.nrSamplesPerChannel() * 1024 * (3 /* power */ + 2 /* window */ + 1 /* max */ + 7 /* mean/variance */);
-      nrBytesRead = (size_t) ps.nrTABs(0) * NR_POLARIZATIONS * ps.nrSamplesPerChannel() * 1024 * sizeof(float);
-      nrBytesWritten = (size_t) ps.nrTABs(0) * sizeof(TriggerInfo);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TriggerKernel.h b/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TriggerKernel.h
deleted file mode 100644
index bc7b031c6a0eb9272122ebc2120572543b54e6c7..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Kernels/UHEP_TriggerKernel.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//# UHEP_TriggerKernel.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_UHEP_TRIGGER_KERNEL_H
-#define LOFAR_GPUPROC_OPENCL_UHEP_TRIGGER_KERNEL_H
-
-#include <CoInterface/Parset.h>
-
-#include "Kernel.h"
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-
-    struct TriggerInfo {
-      float mean, variance, bestValue;
-      unsigned bestApproxIndex;
-    };
-
-    class UHEP_TriggerKernel : public Kernel
-    {
-    public:
-      UHEP_TriggerKernel(const Parset &ps, cl::Program &program,
-                         cl::Buffer &devTriggerInfo, cl::Buffer &devInvFIRfilteredData);
-
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/MultiDimArrayHostBuffer.h b/RTCP/Cobalt/GPUProc/src/opencl/MultiDimArrayHostBuffer.h
deleted file mode 100644
index 41d48185c8c925545bc37f86a8588ebb1e39a2a7..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/MultiDimArrayHostBuffer.h
+++ /dev/null
@@ -1,188 +0,0 @@
-//# MultiDimArrayHostBuffer.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_MULTI_DIM_ARRAY_HOST_BUFFER_H
-#define LOFAR_GPUPROC_OPENCL_MULTI_DIM_ARRAY_HOST_BUFFER_H
-
-#include <CoInterface/Allocator.h>
-#include <CoInterface/MultiDimArray.h>
-
-#include "gpu_incl.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    // A buffer on the GPU (device), to which CPU (host) buffers can be attached.
-    class DeviceBuffer
-    {
-    public:
-      DeviceBuffer( cl::CommandQueue &queue, cl_mem_flags flags, size_t size )
-      :
-        size(size),
-        queue(queue),
-        flags(flags),
-        buffer(queue.getInfo<CL_QUEUE_CONTEXT>(), flags | CL_MEM_ALLOC_HOST_PTR, size)
-      {
-      }
-
-      const size_t size;
-      cl::CommandQueue &queue;
-      const cl_mem_flags flags;
-      cl::Buffer buffer;
-
-      // Stores transfer information
-      cl::Event event;
-
-      operator cl::Buffer & ()
-      {
-        return buffer;
-      }
-
-      // Copies data to the GPU
-      void hostToDevice(void *ptr, size_t size, bool synchronous = false)
-      {
-        ASSERT(size <= this->size);
-
-        queue.enqueueWriteBuffer(buffer, synchronous ? CL_TRUE : CL_FALSE, 0, size, ptr, 0, &event);
-      }
-
-      // Copies data from the GPU
-      void deviceToHost(void *ptr, size_t size, bool synchronous = false)
-      {
-        ASSERT(size <= this->size);
-
-        queue.enqueueReadBuffer(buffer, synchronous ? CL_TRUE : CL_FALSE, 0, size, ptr, 0, &event);
-      }
-
-      // Allocates a buffer for transfer with the GPU
-      void *allocateHostBuffer( size_t size, cl_mem_flags hostBufferFlags = CL_MEM_READ_WRITE )
-      {
-        ASSERT(size <= this->size);
-
-        return queue.enqueueMapBuffer(buffer, CL_TRUE, map_flags(hostBufferFlags), 0, size);
-      }
-
-      // Deallocates a buffer for transfer with the GPU
-      void deallocateHostBuffer( void *ptr )
-      {
-        queue.enqueueUnmapMemObject(buffer, ptr);
-      }
-
-    private:
-      // Can't copy cl::Buffer
-      DeviceBuffer(const DeviceBuffer &other);
-
-      // Convert the cl_mem_flags to cl_map_flags
-      static cl_map_flags map_flags(cl_mem_flags flags) {
-        return flags & CL_MEM_READ_WRITE ? CL_MAP_READ | CL_MAP_WRITE
-             : flags & CL_MEM_READ_ONLY  ? CL_MAP_READ
-             : flags & CL_MEM_WRITE_ONLY ? CL_MAP_WRITE
-             : 0;
-      }
-    };
-
-    // A buffer on the CPU (host), attached to a buffer on the GPU (device)
-    class HostBuffer
-    {
-    public:
-      HostBuffer( DeviceBuffer &deviceBuffer, size_t size, cl_mem_flags hostBufferFlags = CL_MEM_READ_WRITE )
-      :
-        deviceBuffer(deviceBuffer),
-        ptr(deviceBuffer.allocateHostBuffer(size, hostBufferFlags)),
-        size(size)
-      {
-      }
-
-      ~HostBuffer()
-      {
-        deviceBuffer.deallocateHostBuffer(ptr);
-      }
-
-      void hostToDevice(bool synchronous = false)
-      {
-        deviceBuffer.hostToDevice(ptr, size, synchronous);
-      }
-
-      void deviceToHost(bool synchronous = false)
-      {
-        deviceBuffer.deviceToHost(ptr, size, synchronous);
-      }
-
-      DeviceBuffer &deviceBuffer;
-
-      operator cl::Buffer& () {
-        return deviceBuffer;
-      }
-
-    protected:
-      void * const ptr;
-      const size_t size;
-
-    private:
-      // Copying is expensive (requires allocation),
-      // so forbid it to prevent accidental copying.
-      HostBuffer(const HostBuffer &other);
-    };
-
-    // A MultiDimArray allocated as a HostBuffer
-    template <typename T, size_t DIM>
-    class MultiArrayHostBuffer : public HostBuffer, public MultiDimArray<T, DIM>
-    {
-    public:
-      template <typename ExtentList>
-      MultiArrayHostBuffer(const ExtentList &extents, cl_mem_flags hostBufferFlags, DeviceBuffer &deviceBuffer)
-      :
-        HostBuffer(deviceBuffer, this->nrElements(extents) * sizeof(T), hostBufferFlags),
-        MultiDimArray<T,DIM>(extents, static_cast<T*>(ptr), true)
-      {
-      }
-
-      size_t bytesize() const
-      {
-        return this->num_elements() * sizeof(T);
-      }
-    };
-
-    // A 1:1 buffer on CPU and GPU
-    template <typename T, size_t DIM>
-    class MultiArraySharedBuffer : public DeviceBuffer, public MultiArrayHostBuffer<T, DIM>
-    {
-    public:
-      template <typename ExtentList>
-      MultiArraySharedBuffer(const ExtentList &extents, cl::CommandQueue &queue, cl_mem_flags hostBufferFlags = CL_MEM_READ_WRITE, cl_mem_flags deviceBufferFlags = CL_MEM_READ_WRITE)
-        :
-        DeviceBuffer(queue, deviceBufferFlags, this->nrElements(extents) * sizeof(T)),
-        MultiArrayHostBuffer<T, DIM>(extents, hostBufferFlags, *this)
-      {
-      }
-
-      // Select the desired interface
-      using HostBuffer::hostToDevice;
-      using HostBuffer::deviceToHost;
-      using DeviceBuffer::operator cl::Buffer&;
-    };
-
-  } // namespace Cobalt
-} // namespace LOFAR
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/NewCorrelator.cl b/RTCP/Cobalt/GPUProc/src/opencl/NewCorrelator.cl
deleted file mode 100644
index 80f490650623d1e96615064f716dfb3c234b1e0a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/NewCorrelator.cl
+++ /dev/null
@@ -1,657 +0,0 @@
-//# NewCorrelator.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include "math.cl"
-
-#define NR_STATIONS_PER_BLOCK   32
-#define NR_TIMES_PER_BLOCK      8
-
-#define NR_BASELINES            (NR_STATIONS * (NR_STATIONS + 1) / 2)
-
-
-typedef __global fcomplex2 (*CorrectedDataType)[NR_STATIONS][NR_CHANNELS][NR_SAMPLES_PER_CHANNEL];
-typedef __global fcomplex4 (*VisibilitiesType)[NR_BASELINES][NR_CHANNELS];
-
-
-/*!
- * Correlate one triangle. Only used in unit test, though similar to sub-routine used below.
- */
-__kernel
-void correlateTriangleKernel(__global void *visibilitiesPtr,
-                             __global const void *correctedDataPtr)
-{
-  VisibilitiesType visibilities = (VisibilitiesType) visibilitiesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-
-  __local fcomplex2 samples[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1];
-  uint channel = get_global_id(2) + 1;
-  uint block = get_global_id(1);
-
-#if NR_STATIONS % NR_STATIONS_PER_BLOCK == 0
-  uint firstStation = block * NR_STATIONS_PER_BLOCK;
-  uint nrStationsThisBlock = NR_STATIONS_PER_BLOCK;
-#else
-  uint lastStation = block * NR_STATIONS_PER_BLOCK + NR_STATIONS % NR_STATIONS_PER_BLOCK;
-  uint firstStation = block == 0 ? 0 : lastStation - NR_STATIONS_PER_BLOCK;
-  uint nrStationsThisBlock = lastStation - firstStation;
-#endif
-
-  uint miniBlock = get_local_id(0);
-  uint statXoffset = convert_uint_rtz(sqrt(convert_float(8 * miniBlock + 1)) - 0.99999f) / 2;
-  uint statYoffset = miniBlock - statXoffset * (statXoffset + 1) / 2;
-
-  statXoffset *= 2, statYoffset *= 2;
-
-  float4 vis_0A_r = 0, vis_0A_i = 0;
-  float4 vis_0B_r = 0, vis_0B_i = 0;
-  float4 vis_1A_r = 0, vis_1A_i = 0;
-  float4 vis_1B_r = 0, vis_1B_i = 0;
-
-  bool doCorrelate = statXoffset < nrStationsThisBlock;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += NR_TIMES_PER_BLOCK) {
-    // load data into local memory
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    for (uint i = get_local_id(0); i < nrStationsThisBlock * NR_TIMES_PER_BLOCK; i += get_local_size(0)) {
-      uint time = i % NR_TIMES_PER_BLOCK;
-      uint stat = i / NR_TIMES_PER_BLOCK;
-
-      samples[stat % 2][time][stat / 2] = (*correctedData)[firstStation + stat][channel][major + time];
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-#pragma unroll 1
-    for (uint time = 0; time < NR_TIMES_PER_BLOCK; time++) {
-      fcomplex2 sample_0, sample_1, sample_A, sample_B;
-
-      if (doCorrelate) {
-        sample_0 = samples[0][time][statYoffset / 2];
-        sample_A = samples[0][time][statXoffset / 2];
-        sample_B = samples[1][time][statXoffset / 2];
-        sample_1 = samples[1][time][statYoffset / 2];
-
-        vis_0A_r += sample_0.xxzz * sample_A.xzxz;
-        vis_0A_i += sample_0.yyww * sample_A.xzxz;
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_1A_r += sample_1.xxzz * sample_A.xzxz;
-        vis_1A_i += sample_1.yyww * sample_A.xzxz;
-        vis_1B_r += sample_1.xxzz * sample_B.xzxz;
-        vis_1B_i += sample_1.yyww * sample_B.xzxz;
-
-        vis_0A_r += sample_0.yyww * sample_A.ywyw;
-        vis_0A_i -= sample_0.xxzz * sample_A.ywyw;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-        vis_1A_r += sample_1.yyww * sample_A.ywyw;
-        vis_1A_i -= sample_1.xxzz * sample_A.ywyw;
-        vis_1B_r += sample_1.yyww * sample_B.ywyw;
-        vis_1B_i -= sample_1.xxzz * sample_B.ywyw;
-      }
-    }
-  }
-
-  int statY = firstStation + statYoffset;
-  uint statX = firstStation + statXoffset;
-  uint baseline = (statX * (statX + 1) / 2) + statY;
-
-  if (statXoffset < nrStationsThisBlock) {
-    (*visibilities)[baseline            ][channel].even = vis_0A_r;
-    (*visibilities)[baseline            ][channel].odd = vis_0A_i;
-  }
-
-  if (statXoffset < nrStationsThisBlock && statXoffset != statYoffset) {
-    (*visibilities)[baseline + 1][channel].even = vis_1A_r;
-    (*visibilities)[baseline + 1][channel].odd = vis_1A_i;
-  }
-
-  if (statXoffset + 1 < nrStationsThisBlock) {
-    (*visibilities)[baseline + statX + 1][channel].even = vis_0B_r;
-    (*visibilities)[baseline + statX + 1][channel].odd = vis_0B_i;
-    (*visibilities)[baseline + statX + 2][channel].even = vis_1B_r;
-    (*visibilities)[baseline + statX + 2][channel].odd = vis_1B_i;
-  }
-}
-
-
-/*!
- * Correlate one rectangle. Only used in unit test, though similar to sub-routine used below.
- */
-__kernel __attribute__((reqd_work_group_size(NR_STATIONS_PER_BLOCK * NR_STATIONS_PER_BLOCK / 4, 1, 1)))
-void correlateRectangleKernel(__global void *visibilitiesPtr,
-                              __global const void *correctedDataPtr)
-{
-  VisibilitiesType visibilities = (VisibilitiesType)  visibilitiesPtr;
-  CorrectedDataType correctedData = (CorrectedDataType) correctedDataPtr;
-
-  __local fcomplex2 samplesX[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1];
-  __local fcomplex2 samplesY[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1];
-
-  uint block = get_global_id(1);
-  uint blockX = convert_uint_rtz(sqrt(convert_float(8 * block + 1)) - 0.99999f) / 2;
-  uint blockY = block - blockX * (blockX + 1) / 2;
-
-#if NR_STATIONS % NR_STATIONS_PER_BLOCK == 0
-  uint firstStationX = (blockX + 1) * NR_STATIONS_PER_BLOCK;
-  uint firstStationY = blockY * NR_STATIONS_PER_BLOCK;
-#else
-  uint firstStationX = blockX * NR_STATIONS_PER_BLOCK + NR_STATIONS % NR_STATIONS_PER_BLOCK;
-  int firstStationY = (blockY - 1) * NR_STATIONS_PER_BLOCK + NR_STATIONS % NR_STATIONS_PER_BLOCK;
-#endif
-
-  uint statXoffset = get_local_id(0) / (NR_STATIONS_PER_BLOCK / 2);
-  uint statYoffset = get_local_id(0) % (NR_STATIONS_PER_BLOCK / 2);
-
-  float4 vis_0A_r = 0, vis_0A_i = 0;
-  float4 vis_0B_r = 0, vis_0B_i = 0;
-  float4 vis_1A_r = 0, vis_1A_i = 0;
-  float4 vis_1B_r = 0, vis_1B_i = 0;
-
-  uint loadTime = get_local_id(0) % NR_TIMES_PER_BLOCK;
-  uint loadStat = get_local_id(0) / NR_TIMES_PER_BLOCK;
-
-  bool doCorrelateLower = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStationY + 2 * statYoffset) >= 0;
-  bool doCorrelateUpper = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStationY + 2 * statYoffset) >= -1;
-  bool doLoadY = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStationY + loadStat) >= 0;
-
-  uint channel = get_global_id(2) + 1;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += NR_TIMES_PER_BLOCK) {
-    // load data into local memory
-    fcomplex2 sampleX = (*correctedData)[firstStationX + loadStat][channel][major + loadTime];
-    fcomplex2 sampleY;
-
-    if (doLoadY)
-      sampleY = (*correctedData)[firstStationY + loadStat][channel][major + loadTime];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    samplesX[loadStat % 2][loadTime][loadStat / 2] = sampleX;
-
-    if (doLoadY)
-      samplesY[loadStat % 2][loadTime][loadStat / 2] = sampleY;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-#pragma unroll 1
-    for (uint time = 0; time < NR_TIMES_PER_BLOCK; time++) {
-      fcomplex2 sample_0, sample_1, sample_A, sample_B;
-
-      if (doCorrelateLower) {
-        sample_0 = samplesY[0][time][statYoffset];
-      }
-
-      if (doCorrelateUpper) {
-        sample_A = samplesX[0][time][statXoffset];
-        sample_B = samplesX[1][time][statXoffset];
-        sample_1 = samplesY[1][time][statYoffset];
-      }
-
-      if (doCorrelateLower) {
-        vis_0A_r += sample_0.xxzz * sample_A.xzxz;
-        vis_0A_i += sample_0.yyww * sample_A.xzxz;
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_0A_r += sample_0.yyww * sample_A.ywyw;
-        vis_0A_i -= sample_0.xxzz * sample_A.ywyw;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-      }
-
-      if (doCorrelateUpper) {
-        vis_1A_r += sample_1.xxzz * sample_A.xzxz;
-        vis_1A_i += sample_1.yyww * sample_A.xzxz;
-        vis_1B_r += sample_1.xxzz * sample_B.xzxz;
-        vis_1B_i += sample_1.yyww * sample_B.xzxz;
-        vis_1A_r += sample_1.yyww * sample_A.ywyw;
-        vis_1A_i -= sample_1.xxzz * sample_A.ywyw;
-        vis_1B_r += sample_1.yyww * sample_B.ywyw;
-        vis_1B_i -= sample_1.xxzz * sample_B.ywyw;
-      }
-    }
-  }
-
-  int statY = firstStationY + 2 * statYoffset;
-  uint statX = firstStationX + 2 * statXoffset;
-  uint baseline = (statX * (statX + 1) / 2) + statY;
-
-  if (doCorrelateLower) {
-    (*visibilities)[baseline            ][channel].even = vis_0A_r;
-    (*visibilities)[baseline            ][channel].odd = vis_0A_i;
-    (*visibilities)[baseline + statX + 1][channel].even = vis_0B_r;
-    (*visibilities)[baseline + statX + 1][channel].odd = vis_0B_i;
-  }
-
-  if (doCorrelateUpper) {
-    (*visibilities)[baseline + 1][channel].even = vis_1A_r;
-    (*visibilities)[baseline + 1][channel].odd = vis_1A_i;
-    (*visibilities)[baseline + statX + 2][channel].even = vis_1B_r;
-    (*visibilities)[baseline + statX + 2][channel].odd = vis_1B_i;
-  }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-/*!
- * unused in favor of correlateTriangle2().
- */
-void correlateTriangle(VisibilitiesType visibilities,
-                       CorrectedDataType correctedData,
-                       __local fcomplex2 samples[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1],
-                       uint block)
-{
-  uint channel = get_global_id(2) + 1;
-
-#if NR_STATIONS % NR_STATIONS_PER_BLOCK == 0
-  uint firstStation = block * NR_STATIONS_PER_BLOCK;
-#else
-  int firstStation = (block - 1) * NR_STATIONS_PER_BLOCK + NR_STATIONS % NR_STATIONS_PER_BLOCK;
-#endif
-
-  bool doCorrelate = false, doAutoCorrelate = false, doNearAutoCorrelate = false;
-  uint statXoffset, statYoffset;
-
-  if (get_local_id(0) < 128) {
-    uint miniBlock = get_local_id(0);
-    uint miniBlockX = convert_uint_rtz(sqrt(convert_float(8 * miniBlock + 1)) - 0.99999f) / 2;
-    uint miniBlockY = miniBlock - miniBlockX * (miniBlockX + 1) / 2;
-
-    statXoffset = 2 * miniBlockX + 2;
-    statYoffset = 2 * miniBlockY;
-    doCorrelate = statXoffset < NR_STATIONS_PER_BLOCK && (NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStation + statYoffset) >= 0);
-  } else if (get_local_id(0) < 128 + NR_STATIONS_PER_BLOCK / 2) {
-    statXoffset = statYoffset = 2 * (get_local_id(0) - 128);
-    // actually, it is the visibility one right of statXoffset
-    doNearAutoCorrelate = (int) (firstStation + statXoffset) >= 0;
-  } else if (get_local_id(0) >= 192 && get_local_id(0) < 192 + NR_STATIONS_PER_BLOCK) {
-    statXoffset = statYoffset = get_local_id(0) - 192;
-    doAutoCorrelate = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStation + statYoffset) >= 0;
-  }
-
-  float4 vis_0A_r = 0, vis_0A_i = 0;
-  float4 vis_0B_r = 0, vis_0B_i = 0;
-  float4 vis_1A_r = 0, vis_1A_i = 0;
-  float4 vis_1B_r = 0, vis_1B_i = 0;
-
-  uint loadTime = get_local_id(0) % NR_TIMES_PER_BLOCK;
-  uint loadStat = get_local_id(0) / NR_TIMES_PER_BLOCK;
-
-  bool doLoad = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStation + loadStat) >= 0;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += NR_TIMES_PER_BLOCK) {
-    // load data into local memory
-    fcomplex2 sample;
-
-    if (doLoad)
-      sample = (*correctedData)[firstStation + loadStat][channel][major + loadTime];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (doLoad)
-      samples[loadStat % 2][loadTime][loadStat / 2] = sample;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-#pragma unroll 1
-    for (uint time = 0; time < NR_TIMES_PER_BLOCK; time++) {
-      if (doCorrelate) {
-        fcomplex2 sample_0 = samples[0][time][statYoffset / 2];
-        fcomplex2 sample_A = samples[0][time][statXoffset / 2];
-        fcomplex2 sample_B = samples[1][time][statXoffset / 2];
-        fcomplex2 sample_1 = samples[1][time][statYoffset / 2];
-
-        vis_0A_r += sample_0.xxzz * sample_A.xzxz;
-        vis_0A_i += sample_0.yyww * sample_A.xzxz;
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_0A_r += sample_0.yyww * sample_A.ywyw;
-        vis_0A_i -= sample_0.xxzz * sample_A.ywyw;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-
-        vis_1A_r += sample_1.xxzz * sample_A.xzxz;
-        vis_1A_i += sample_1.yyww * sample_A.xzxz;
-        vis_1B_r += sample_1.xxzz * sample_B.xzxz;
-        vis_1B_i += sample_1.yyww * sample_B.xzxz;
-        vis_1A_r += sample_1.yyww * sample_A.ywyw;
-        vis_1A_i -= sample_1.xxzz * sample_A.ywyw;
-        vis_1B_r += sample_1.yyww * sample_B.ywyw;
-        vis_1B_i -= sample_1.xxzz * sample_B.ywyw;
-      }
-
-      if (doAutoCorrelate) {
-        fcomplex2 sample_0 = samples[statYoffset % 2][time][statYoffset / 2];
-        vis_0A_r.xyw += sample_0.xxz * sample_0.xzz;
-        vis_0A_i.y += sample_0.y * sample_0.z;
-        vis_0A_r.xyw += sample_0.yyw * sample_0.yww;
-        vis_0A_i.y -= sample_0.x * sample_0.w;
-      }
-
-      if (doNearAutoCorrelate) {
-        fcomplex2 sample_0 = samples[0][time][statYoffset / 2];
-        fcomplex2 sample_B = samples[1][time][statXoffset / 2];
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-      }
-    }
-  }
-
-  if (doAutoCorrelate) {
-    vis_0A_r.z = vis_0A_r.y;
-    vis_0A_i.z = -vis_0A_i.y;
-  }
-
-  int statY = firstStation + statYoffset;
-  uint statX = firstStation + statXoffset;
-  uint baseline = (statX * (statX + 1) / 2) + statY;
-
-  if (doCorrelate || doAutoCorrelate) {
-    (*visibilities)[baseline            ][channel].even = vis_0A_r;
-    (*visibilities)[baseline            ][channel].odd = vis_0A_i;
-  }
-
-  if (doCorrelate || doNearAutoCorrelate) {
-    (*visibilities)[baseline + statX + 1][channel].even = vis_0B_r;
-    (*visibilities)[baseline + statX + 1][channel].odd = vis_0B_i;
-  }
-
-  if (doCorrelate) {
-    (*visibilities)[baseline + 1][channel].even = vis_1A_r;
-    (*visibilities)[baseline + 1][channel].odd = vis_1A_i;
-    (*visibilities)[baseline + statX + 2][channel].even = vis_1B_r;
-    (*visibilities)[baseline + statX + 2][channel].odd = vis_1B_i;
-  }
-}
-
-
-void correlateTriangle2(VisibilitiesType visibilities,
-                        CorrectedDataType correctedData,
-                        __local fcomplex2 samples[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1],
-                        uint block
-                        )
-{
-  uint channel = get_global_id(2) + 1;
-
-#if NR_STATIONS % NR_STATIONS_PER_BLOCK == 0
-  uint firstStation = block * NR_STATIONS_PER_BLOCK;
-  //uint lastStation = firstStation + NR_STATIONS_PER_BLOCK;
-  uint nrStationsThisBlock = NR_STATIONS_PER_BLOCK;
-#else
-  uint lastStation = block * NR_STATIONS_PER_BLOCK + NR_STATIONS % NR_STATIONS_PER_BLOCK;
-  uint firstStation = block == 0 ? 0 : lastStation - NR_STATIONS_PER_BLOCK;
-  uint nrStationsThisBlock = lastStation - firstStation;
-#endif
-
-  uint miniBlock = get_local_id(0);
-  uint statXoffset = convert_uint_rtz(sqrt(convert_float(8 * miniBlock + 1)) - 0.99999f) / 2;
-  uint statYoffset = miniBlock - statXoffset * (statXoffset + 1) / 2;
-
-  statXoffset *= 2, statYoffset *= 2;
-
-  //bool doCorrelate = statXoffset < nrStationsThisBlock;
-
-  float4 vis_0A_r = 0, vis_0A_i = 0;
-  float4 vis_0B_r = 0, vis_0B_i = 0;
-  float4 vis_1A_r = 0, vis_1A_i = 0;
-  float4 vis_1B_r = 0, vis_1B_i = 0;
-
-  uint loadTime = get_local_id(0) % NR_TIMES_PER_BLOCK;
-  uint loadStat = get_local_id(0) / NR_TIMES_PER_BLOCK;
-
-  bool doCorrelateLeft = statXoffset < nrStationsThisBlock;
-  //bool doCorrelateRight = statXoffset + 1 < nrStationsThisBlock;
-  bool doLoad = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || loadStat < nrStationsThisBlock;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += NR_TIMES_PER_BLOCK) {
-    // load data into local memory
-    float4 sample;
-
-    if (doLoad)
-      sample = (*correctedData)[firstStation + loadStat][channel][major + loadTime];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (doLoad)
-      samples[loadStat % 2][loadTime][loadStat / 2] = sample;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-#pragma unroll 1
-    for (uint time = 0; time < NR_TIMES_PER_BLOCK; time++) {
-      float4 sample_0, sample_1, sample_A, sample_B;
-
-      if (doCorrelateLeft) {
-        sample_0 = samples[0][time][statYoffset / 2];
-        sample_A = samples[0][time][statXoffset / 2];
-        sample_B = samples[1][time][statXoffset / 2];
-        sample_1 = samples[1][time][statYoffset / 2];
-
-        vis_0A_r += sample_0.xxzz * sample_A.xzxz;
-        vis_0A_i += sample_0.yyww * sample_A.xzxz;
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_1A_r += sample_1.xxzz * sample_A.xzxz;
-        vis_1A_i += sample_1.yyww * sample_A.xzxz;
-        vis_1B_r += sample_1.xxzz * sample_B.xzxz;
-        vis_1B_i += sample_1.yyww * sample_B.xzxz;
-
-        vis_0A_r += sample_0.yyww * sample_A.ywyw;
-        vis_0A_i -= sample_0.xxzz * sample_A.ywyw;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-        vis_1A_r += sample_1.yyww * sample_A.ywyw;
-        vis_1A_i -= sample_1.xxzz * sample_A.ywyw;
-        vis_1B_r += sample_1.yyww * sample_B.ywyw;
-        vis_1B_i -= sample_1.xxzz * sample_B.ywyw;
-      }
-    }
-  }
-
-  int statY = firstStation + statYoffset;
-  uint statX = firstStation + statXoffset;
-  uint baseline = (statX * (statX + 1) / 2) + statY;
-
-  if (statXoffset < nrStationsThisBlock) {
-    (*visibilities)[baseline            ][channel].even = vis_0A_r;
-    (*visibilities)[baseline            ][channel].odd = vis_0A_i;
-  }
-
-  if (statXoffset < nrStationsThisBlock && statYoffset + 1 < nrStationsThisBlock) {
-    (*visibilities)[baseline + 1][channel].even = vis_1A_r;
-    (*visibilities)[baseline + 1][channel].odd = vis_1A_i;
-  }
-
-  if (statXoffset + 1 < nrStationsThisBlock) {
-    (*visibilities)[baseline + statX + 1][channel].even = vis_0B_r;
-    (*visibilities)[baseline + statX + 1][channel].odd = vis_0B_i;
-    (*visibilities)[baseline + statX + 2][channel].even = vis_1B_r;
-    (*visibilities)[baseline + statX + 2][channel].odd = vis_1B_i;
-  }
-}
-
-
-void correlateRectangle(VisibilitiesType visibilities,
-                        CorrectedDataType correctedData,
-                        __local fcomplex2 samplesX[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1],
-                        __local fcomplex2 samplesY[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1],
-                        uint blockX,
-                        uint blockY
-                        )
-{
-  uint channel = get_global_id(2) + 1;
-
-#if NR_STATIONS % NR_STATIONS_PER_BLOCK == 0
-  uint firstStationX = blockX * NR_STATIONS_PER_BLOCK;
-  uint firstStationY = blockY * NR_STATIONS_PER_BLOCK;
-#else
-  uint firstStationX = (blockX - 1) * NR_STATIONS_PER_BLOCK + NR_STATIONS % NR_STATIONS_PER_BLOCK;
-  int firstStationY = (blockY - 1) * NR_STATIONS_PER_BLOCK + NR_STATIONS % NR_STATIONS_PER_BLOCK;
-#endif
-
-  uint statXoffset = get_local_id(0) / (NR_STATIONS_PER_BLOCK / 2);
-  uint statYoffset = get_local_id(0) % (NR_STATIONS_PER_BLOCK / 2);
-
-  float4 vis_0A_r = 0, vis_0A_i = 0;
-  float4 vis_0B_r = 0, vis_0B_i = 0;
-  float4 vis_1A_r = 0, vis_1A_i = 0;
-  float4 vis_1B_r = 0, vis_1B_i = 0;
-
-  uint loadTime = get_local_id(0) % NR_TIMES_PER_BLOCK;
-  uint loadStat = get_local_id(0) / NR_TIMES_PER_BLOCK;
-
-  bool doCorrelateLower = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStationY + 2 * statYoffset) >= 0;
-  bool doCorrelateUpper = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStationY + 2 * statYoffset) >= -1;
-  bool doLoadY = NR_STATIONS % NR_STATIONS_PER_BLOCK == 0 || (int) (firstStationY + loadStat) >= 0;
-
-  for (uint major = 0; major < NR_SAMPLES_PER_CHANNEL; major += NR_TIMES_PER_BLOCK) {
-    // load data into local memory
-    fcomplex2 sampleX = (*correctedData)[firstStationX + loadStat][channel][major + loadTime];
-    fcomplex2 sampleY;
-
-    if (doLoadY)
-      sampleY = (*correctedData)[firstStationY + loadStat][channel][major + loadTime];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    samplesX[loadStat % 2][loadTime][loadStat / 2] = sampleX;
-
-    if (doLoadY)
-      samplesY[loadStat % 2][loadTime][loadStat / 2] = sampleY;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-#pragma unroll 1
-    for (uint time = 0; time < NR_TIMES_PER_BLOCK; time++) {
-      fcomplex2 sample_0, sample_1, sample_A, sample_B;
-
-      if (doCorrelateLower) {
-        sample_0 = samplesY[0][time][statYoffset];
-      }
-
-      if (doCorrelateUpper) {
-        sample_A = samplesX[0][time][statXoffset];
-        sample_B = samplesX[1][time][statXoffset];
-        sample_1 = samplesY[1][time][statYoffset];
-      }
-
-      if (doCorrelateLower) {
-        vis_0A_r += sample_0.xxzz * sample_A.xzxz;
-        vis_0A_i += sample_0.yyww * sample_A.xzxz;
-        vis_0B_r += sample_0.xxzz * sample_B.xzxz;
-        vis_0B_i += sample_0.yyww * sample_B.xzxz;
-        vis_0A_r += sample_0.yyww * sample_A.ywyw;
-        vis_0A_i -= sample_0.xxzz * sample_A.ywyw;
-        vis_0B_r += sample_0.yyww * sample_B.ywyw;
-        vis_0B_i -= sample_0.xxzz * sample_B.ywyw;
-      }
-
-      if (doCorrelateUpper) {
-        vis_1A_r += sample_1.xxzz * sample_A.xzxz;
-        vis_1A_i += sample_1.yyww * sample_A.xzxz;
-        vis_1B_r += sample_1.xxzz * sample_B.xzxz;
-        vis_1B_i += sample_1.yyww * sample_B.xzxz;
-        vis_1A_r += sample_1.yyww * sample_A.ywyw;
-        vis_1A_i -= sample_1.xxzz * sample_A.ywyw;
-        vis_1B_r += sample_1.yyww * sample_B.ywyw;
-        vis_1B_i -= sample_1.xxzz * sample_B.ywyw;
-      }
-    }
-  }
-
-  int statY = firstStationY + 2 * statYoffset;
-  uint statX = firstStationX + 2 * statXoffset;
-  uint baseline = (statX * (statX + 1) / 2) + statY;
-
-  if (doCorrelateLower) {
-    (*visibilities)[baseline            ][channel].even = vis_0A_r;
-    (*visibilities)[baseline            ][channel].odd = vis_0A_i;
-    (*visibilities)[baseline + statX + 1][channel].even = vis_0B_r;
-    (*visibilities)[baseline + statX + 1][channel].odd = vis_0B_i;
-  }
-
-  if (doCorrelateUpper) {
-    (*visibilities)[baseline + 1][channel].even = vis_1A_r;
-    (*visibilities)[baseline + 1][channel].odd = vis_1A_i;
-    (*visibilities)[baseline + statX + 2][channel].even = vis_1B_r;
-    (*visibilities)[baseline + statX + 2][channel].odd = vis_1B_i;
-  }
-}
-
-
-/*!
- * Computes correlations between all pairs of stations (baselines) and X,Y
- * polarizations. Also computes all station (and pol) auto-correlations.
- *
- * We consider the output space shaped as a triangle of S*(S-1)/2 full
- * correlations, plus S auto-correlations at the hypothenuse (S = NR_STATIONS).
- * With this correlator, the space is divided into blocks of N/2 x N/2 (with
- * N = NR_STATIONS_PER_BLOCK) correlations. Each work group works on a block
- * (may have partial output) and only loads samples from the stations along its
- * two edges.
- *
- * This scheme is favorable when the number of stations exceeds the dozens.
- * For small problem sizes (up to dozens of stations (standard LOFAR, usually))
- * (exact number depends on observation, software and hardware parameters),
- * our kernels in Correlator.cl may be significantly faster than this
- * correlator. This implementation shines especially on LOFAR AARTFAAC's
- * 288 input antenna streams.
- *
- * \param[out] visibilitiesPtr         2D output array of visibilities. Each visibility contains the 4 polarization pairs, XX, XY, YX, YY, each of complex float type.
- * \param[in]  correctedDataPtr        3D input array of samples. Each sample contains the 2 polarizations X, Y, each of complex float type.
- *
- * Pre-processor input symbols (some are tied to the execution configuration)
- * Symbol                  | Valid Values                    | Description
- * ----------------------- | ------------------------------- | -----------
- * NR_STATIONS             | >= 1                            | number of antenna fields
- * NR_SAMPLES_PER_CHANNEL  | multiple of NR_TIMES_PER_BLOCK  | number of input samples per channel
- * NR_CHANNELS             | > 1 (TODO: supp 1 ch)           | number of frequency channels per subband
- * Note that for > 1 channels, NR_CHANNELS-1 channels are actually processed,
- * because the second PPF has "corrupted" channel 0. (An inverse PPF can disambiguate.) \n
- * Note that this kernel assumes (but does not use) NR_POLARIZATIONS == 2.
- *
- * Execution configuration:
- * - Work dim == 3  (can be 1 iff NR_CHANNELS <= 2)
- *     + Inner dim: the baseline the thread processes
- *     + Middle dim: the block number the work group of the thread processes
- *     + Outer dim: the channel the thread processes
- * - Work group size: (N/2 * N/2, 1, 1) with N = NR_STATIONS_PER_BLOCK \n
- * - Global size: (N/2 * N/2, number of blocks (full and partial), number of actually processed channels)
- */
-__kernel __attribute__((reqd_work_group_size(NR_STATIONS_PER_BLOCK * NR_STATIONS_PER_BLOCK / 4, 1, 1)))
-void correlate(__global void *visibilitiesPtr,
-               __global const void *correctedDataPtr)
-{
-  __local fcomplex2 samplesX[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1];
-  __local fcomplex2 samplesY[2][NR_TIMES_PER_BLOCK][NR_STATIONS_PER_BLOCK / 2 | 1];
-
-  uint block = get_global_id(1);
-  uint blockX = convert_uint_rtz(sqrt(convert_float(8 * block + 1)) - 0.99999f) / 2;
-  uint blockY = block - blockX * (blockX + 1) / 2;
-
-  if (blockX == blockY)
-    correlateTriangle2((VisibilitiesType) visibilitiesPtr, (CorrectedDataType) correctedDataPtr, samplesX, blockX);
-  else
-    correlateRectangle((VisibilitiesType) visibilitiesPtr, (CorrectedDataType) correctedDataPtr, samplesX, samplesY, blockX, blockY);
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/PerformanceCounter.cc b/RTCP/Cobalt/GPUProc/src/opencl/PerformanceCounter.cc
deleted file mode 100644
index ee4cd7807035240a87e2920fedd6d7a4e65c87c9..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/PerformanceCounter.cc
+++ /dev/null
@@ -1,170 +0,0 @@
-//# PerformanceCounter.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "PerformanceCounter.h"
-
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-
-#include <Common/LofarLogger.h>
-#include <Common/PrettyUnits.h>
-#include <GPUProc/OpenMP_Lock.h>
-
-using namespace std;
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    PerformanceCounter::PerformanceCounter(const std::string &name, bool profiling, bool logAtDestruction)
-      :
-      name(name),
-      profiling(profiling),
-      logAtDestruction(logAtDestruction),
-      nrActiveEvents(0)
-    {
-    }
-
-
-    PerformanceCounter::~PerformanceCounter()
-    {
-      waitForAllOperations();
-
-      if (logAtDestruction) {
-        LOG_INFO_STR(total.log(name));
-      }
-    }
-
-
-    void PerformanceCounter::waitForAllOperations()
-    {
-      ScopedLock sl(mutex);
-
-      while (nrActiveEvents > 0)
-        activeEventsLowered.wait(mutex);
-    }
-
-
-    struct PerformanceCounter::figures PerformanceCounter::getTotal()
-    {
-      ScopedLock sl(mutex);
-
-      return total;
-    }
-
-
-    std::string PerformanceCounter::figures::log(const std::string &name) const
-    {
-      std::stringstream str;
-
-      // Mimic output of NSTimer::print (in LCS/Common/Timer.cc)
-      str << left << setw(25) << name << ": " << right
-          << "avg = " << PrettyTime(avrRuntime()) << ", "
-          << "total = " << PrettyTime(runtime) << ", "
-          << "count = " << setw(9) << nrEvents << ", "
-
-          << setprecision(3)
-          << "GFLOP/s = " << FLOPs() / 1e9 << ", "
-          << "read = " << readSpeed() / 1e9 << " GB/s, "
-          << "written = " << writeSpeed() / 1e9 << " GB/s, "
-          << "total I/O = " << (readSpeed() + writeSpeed()) / 1e9 << " GB/s";
-
-      return str.str();
-    }
-
-
-    void PerformanceCounter::eventCompleteCallBack(cl_event ev, cl_int /*status*/, void *userdata)
-    {
-      struct callBackArgs *args = static_cast<struct callBackArgs *>(userdata);
-
-      try {
-        // extract performance information
-        cl::Event event(ev);
-
-        size_t queued = event.getProfilingInfo<CL_PROFILING_COMMAND_QUEUED>();
-        size_t submitted = event.getProfilingInfo<CL_PROFILING_COMMAND_SUBMIT>();
-        size_t start = event.getProfilingInfo<CL_PROFILING_COMMAND_START>();
-        size_t stop = event.getProfilingInfo<CL_PROFILING_COMMAND_END>();
-        double seconds = (stop - start) / 1e9;
-
-        // sanity checks
-        ASSERT(seconds >= 0);
-        ASSERTSTR(seconds < 15, "Kernel took " << seconds << " seconds to execute: thread " << omp_get_thread_num() << ": " << queued << ' ' << submitted - queued << ' ' << start - queued << ' ' << stop - queued);
-
-        args->figures.runtime = seconds;
-
-        // add figures to total
-        {
-          ScopedLock sl(args->this_->mutex);
-          args->this_->total += args->figures;
-        }
-
-        // cl::~Event() decreases ref count
-      } catch (cl::Error &error) {
-        // ignore errors in callBack function (OpenCL library not exception safe)
-      }
-
-      // we're done -- release event and possibly signal destructor
-      {
-        ScopedLock sl(args->this_->mutex);
-        args->this_->nrActiveEvents--;
-        args->this_->activeEventsLowered.signal();
-      }
-
-      delete args;
-    }
-
-
-    void PerformanceCounter::doOperation(cl::Event &event, size_t nrOperations, size_t nrBytesRead, size_t nrBytesWritten)
-    {
-      if (!profiling)
-        return;
-
-      // reference count between C and C++ conversions is serously broken in C++ wrapper
-      cl_event ev = event();
-      cl_int error = clRetainEvent(ev);
-
-      if (error != CL_SUCCESS)
-        throw cl::Error(error, "clRetainEvent");
-
-      // obtain run time information
-      struct callBackArgs *args = new callBackArgs;
-      args->this_ = this;
-      args->figures.nrOperations = nrOperations;
-      args->figures.nrBytesRead = nrBytesRead;
-      args->figures.nrBytesWritten = nrBytesWritten;
-      args->figures.runtime = 0.0;
-      args->figures.nrEvents = 1;
-
-      {
-        // allocate event as active
-        ScopedLock sl(mutex);
-        nrActiveEvents++;
-      }
-
-      event.setCallback(CL_COMPLETE, &PerformanceCounter::eventCompleteCallBack, args);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/PerformanceCounter.h b/RTCP/Cobalt/GPUProc/src/opencl/PerformanceCounter.h
deleted file mode 100644
index 3502a29aba8fa5f6b5ecfd93058e607e785183f7..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/PerformanceCounter.h
+++ /dev/null
@@ -1,135 +0,0 @@
-//# PerformanceCounter.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_PERFORMANCECOUNTER_H
-#define LOFAR_GPUPROC_OPENCL_PERFORMANCECOUNTER_H
-
-#include <string>
-
-#include <Common/Thread/Mutex.h>
-#include <Common/Thread/Condition.h>
-
-#include "gpu_incl.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class PerformanceCounter
-    {
-    public:
-      // name of counter, for logging purposes
-      const std::string name;
-
-      // whether we collect profiling information in the first place
-      const bool profiling;
-
-      // Initialise the counter, giving it a name.
-      //
-      // If profiling == false, no actual performance statistics are
-      // gathered.
-      PerformanceCounter(const std::string &name, bool profiling, bool logAtDestruction = false);
-      ~PerformanceCounter();
-
-      // register an operation covered by `event'. runtime will be determined by OpenCL, the
-      // rest of the figures have to be provided.
-      void doOperation(cl::Event &, size_t nrOperations, size_t nrBytesRead, size_t nrBytesWritten);
-
-      // performance figures
-      struct figures {
-        size_t nrOperations;
-        size_t nrBytesRead;
-        size_t nrBytesWritten;
-        double runtime;
-
-        size_t nrEvents;
-
-        figures() : nrOperations(0), nrBytesRead(0), nrBytesWritten(0), runtime(0.0), nrEvents(0)
-        {
-        }
-
-        struct figures &operator+=(const struct figures &other)
-        {
-          nrOperations += other.nrOperations;
-          nrBytesRead += other.nrBytesRead;
-          nrBytesWritten += other.nrBytesWritten;
-          runtime += other.runtime;
-          nrEvents += other.nrEvents;
-
-          return *this;
-        }
-
-        double avrRuntime() const
-        {
-          return runtime / nrEvents;
-        }
-        double FLOPs() const
-        {
-          return nrOperations / runtime;
-        }
-        double readSpeed() const
-        {
-          return nrBytesRead / runtime;
-        }
-        double writeSpeed() const
-        {
-          return nrBytesWritten / runtime;
-        }
-
-        std::string log(const std::string &name = "timer") const;
-      };
-
-      // Return once all scheduled operations have completed
-      void waitForAllOperations();
-
-      // Return current running total figures
-      struct figures getTotal();
-
-      // Log the total figures
-      void logTotal();
-
-    private:
-      // whether to log the performance when ~PerformanceCounter is
-      // called
-      const bool logAtDestruction;
-
-      // performance totals
-      struct figures total;
-
-      // number of events that still have a callback waiting
-      size_t nrActiveEvents;
-      Condition activeEventsLowered;
-
-      // lock for total and nrActiveEvents
-      Mutex mutex;
-
-      // call-back to get runtime information
-      struct callBackArgs {
-        PerformanceCounter *this_;
-        struct figures figures;
-      };
-
-      static void eventCompleteCallBack(cl_event, cl_int /*status*/, void *userdata);
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/BeamFormerPipeline.cc b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/BeamFormerPipeline.cc
deleted file mode 100644
index db2c028277d1ef3bd4a991fa57e24bc63170ce5a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/BeamFormerPipeline.cc
+++ /dev/null
@@ -1,73 +0,0 @@
-//# BeamFormerPipeline.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "BeamFormerPipeline.h"
-
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/OpenMP_Lock.h>
-#include <GPUProc/SubbandProcs/BeamFormerSubbandProc.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    BeamFormerPipeline::BeamFormerPipeline(const Parset &ps)
-      :
-      Pipeline(ps),
-      intToFloatCounter("int-to-float", profiling),
-      fftCounter("FFT", profiling),
-      delayAndBandPassCounter("delay/bp", profiling),
-      beamFormerCounter("beamformer", profiling),
-      transposeCounter("transpose", profiling),
-      dedispersionForwardFFTcounter("ddisp.fw.FFT", profiling),
-      dedispersionChirpCounter("chirp", profiling),
-      dedispersionBackwardFFTcounter("ddisp.bw.FFT", profiling),
-      samplesCounter("samples", profiling)
-    {
-      double startTime = omp_get_wtime();
-
-#pragma omp parallel sections
-      {
-#pragma omp section
-        intToFloatProgram = createProgram("BeamFormer/IntToFloat.cl");
-#pragma omp section
-        delayAndBandPassProgram = createProgram("DelayAndBandPass.cl");
-#pragma omp section
-        beamFormerProgram = createProgram("BeamFormer/BeamFormer.cl");
-#pragma omp section
-        transposeProgram = createProgram("BeamFormer/Transpose.cl");
-#pragma omp section
-        dedispersionChirpProgram = createProgram("BeamFormer/Dedispersion.cl");
-      }
-
-      LOG_DEBUG_STR("compile time = " << omp_get_wtime() - startTime);
-    }
-
-    void BeamFormerPipeline::doWork()
-    {
-#pragma omp parallel num_threads((profiling ? 1 : 2) * nrGPUs)
-      BeamFormerSubbandProc(*this, omp_get_thread_num() % nrGPUs).doWork();
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/BeamFormerPipeline.h b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/BeamFormerPipeline.h
deleted file mode 100644
index faf9f938ce6e330cec898b1345f20cd6448583c3..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/BeamFormerPipeline.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//# BeamFormerPipeline.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_BEAMFORMERPIPELINE_H
-#define LOFAR_GPUPROC_OPENCL_BEAMFORMERPIPELINE_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/gpu_incl.h>
-#include <GPUProc/PerformanceCounter.h>
-#include "Pipeline.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class BeamFormerPipeline : public Pipeline
-    {
-    public:
-      BeamFormerPipeline(const Parset &);
-
-      void                    doWork();
-
-      cl::Program intToFloatProgram, delayAndBandPassProgram, beamFormerProgram, transposeProgram, dedispersionChirpProgram;
-
-      PerformanceCounter intToFloatCounter, fftCounter, delayAndBandPassCounter, beamFormerCounter, transposeCounter, dedispersionForwardFFTcounter, dedispersionChirpCounter, dedispersionBackwardFFTcounter;
-      PerformanceCounter samplesCounter;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipeline.cc b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipeline.cc
deleted file mode 100644
index dca433a4d19e0c130bd0a505e174a6a82c5473c9..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipeline.cc
+++ /dev/null
@@ -1,460 +0,0 @@
-//# CorrelatorPipeline.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "CorrelatorPipeline.h"
-
-#include <iomanip>
-
-#include <Common/LofarLogger.h>
-#include <ApplCommon/PosixTime.h>
-#include <Stream/Stream.h>
-#include <Stream/FileStream.h>
-#include <Stream/NullStream.h>
-#include <Stream/StreamDescriptor.h>
-#include <CoInterface/CorrelatedData.h>
-#include <CoInterface/Stream.h>
-
-#include <InputProc/SampleType.h>
-#include <InputProc/Transpose/MPIReceiveStations.h>
-
-#include <GPUProc/OpenMP_Lock.h>
-#include <GPUProc/SubbandProcs/CorrelatorSubbandProc.h>
-#include <GPUProc/SubbandProcs/SubbandProc.h>
-
-using namespace std;
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    CorrelatorPipeline::CorrelatorPipeline(const Parset &ps)
-      :
-      Pipeline(ps),
-      subbandPool(ps.nrSubbands()),
-      filterBank(true, NR_TAPS, ps.nrChannelsPerSubband(), KAISER)
-    {
-      filterBank.negateWeights();
-      double startTime = omp_get_wtime();
-
-      //#pragma omp parallel sections
-      {
-        programs.firFilterProgram = createProgram("FIR.cl");
-        programs.delayAndBandPassProgram = createProgram("DelayAndBandPass.cl");
-#if defined USE_NEW_CORRELATOR
-        programs.correlatorProgram = createProgram("NewCorrelator.cl");
-#else
-        programs.correlatorProgram = createProgram("Correlator.cl");
-#endif
-      }
-      LOG_DEBUG_STR("compile time = " << omp_get_wtime() - startTime);
-    }
-
-    void CorrelatorPipeline::doWork()
-    {
-      size_t nrSubbandProcs = (profiling ? 1 : 2) * nrGPUs;
-      vector< SmartPtr<CorrelatorSubbandProc> > workQueues(nrSubbandProcs);
-
-      for (size_t i = 0; i < workQueues.size(); ++i) {
-        workQueues[i] = new CorrelatorSubbandProc(ps,               // Configuration
-                                      context,          // Opencl context
-                                      devices[i % nrGPUs], // The GPU this workQueue is connected to
-                                      i % nrGPUs, // The GPU index
-                                      programs,         // The compiled kernels, const
-                                      filterBank);   // The filter set to use. Const
-      }
-
-      for (unsigned sb = 0; sb < ps.nrSubbands(); sb++) {
-        // Allow 10 blocks to be in the best-effort queue.
-        // TODO: make this dynamic based on memory or time
-        subbandPool[sb].bequeue = new BestEffortQueue< SmartPtr<CorrelatedDataHostBuffer> >(3, ps.realTime());
-      }
-
-      double startTime = ps.startTime();
-      double stopTime = ps.stopTime();
-      double blockTime = ps.CNintegrationTime();
-
-      size_t nrBlocks = floor((stopTime - startTime) / blockTime);
-
-      //sections = program segments defined by the following omp section directive
-      //           are distributed for parallel execution among available threads
-      //parallel = directive explicitly instructs the compiler to parallelize the chosen block of code.
-      //  The two sections in this function are done in parallel with a seperate set of threads.
-#     pragma omp parallel sections
-      {
-        /*
-         * BLOCK OF SUBBANDS -> WORKQUEUE INPUTPOOL
-         */
-#       pragma omp section
-        {
-          switch (ps.nrBitsPerSample()) {
-          default:
-          case 16:
-            receiveInput< SampleType<i16complex> >(nrBlocks, workQueues);
-            break;
-          case 8:
-            receiveInput< SampleType<i8complex> >(nrBlocks, workQueues);
-            break;
-          case 4:
-            receiveInput< SampleType<i4complex> >(nrBlocks, workQueues);
-            break;
-          }
-        }
-
-
-        /*
-         * WORKQUEUE INPUTPOOL -> WORKQUEUE OUTPUTPOOL
-         *
-         * Perform GPU processing, one thread per workQueue.
-         */
-#       pragma omp section
-        {
-#         pragma omp parallel for num_threads(workQueues.size())
-          for (size_t i = 0; i < workQueues.size(); ++i) {
-            CorrelatorSubbandProc &queue = *workQueues[i];
-
-            // run the queue
-            queue.timers["CPU - total"]->start();
-            processSubbands(queue);
-            queue.timers["CPU - total"]->stop();
-
-            // Signal end of output
-            queue.outputPool.filled.append(NULL);
-          }
-        }
-
-        /*
-         * WORKQUEUE OUTPUTPOOL -> SUBBANDPOOL
-         *
-         * Perform post-processing, one thread per workQueue.
-         */
-#       pragma omp section
-        {
-#         pragma omp parallel for num_threads(workQueues.size())
-          for (size_t i = 0; i < workQueues.size(); ++i) {
-            CorrelatorSubbandProc &queue = *workQueues[i];
-
-            // run the queue
-            postprocessSubbands(queue);
-          }
-
-          // Signal end of output
-          for (size_t subband = 0; subband < ps.nrSubbands(); ++subband) {
-            subbandPool[subband].bequeue->noMore();
-          }
-        }
-
-        /*
-         * SUBBANDPOOL -> STORAGE STREAMS (best effort)
-         */
-#       pragma omp section
-        {
-#         pragma omp parallel for num_threads(ps.nrSubbands())
-          for (size_t subband = 0; subband < ps.nrSubbands(); ++subband) {
-            // write subband to Storage
-            writeSubband(subband);
-          }
-        }
-      }
-
-      // gather performance figures
-      for (size_t i = 0; i < workQueues.size(); ++i ) {
-        performance.addQueue(*workQueues[i]);
-      }
-
-      // log performance figures
-      performance.log(workQueues.size());
-    }
-
-
-    // Record type needed by receiveInput. Before c++0x, a local type
-    // can't be a template argument, so we'll have to define this type
-    // globally.
-    struct inputData_t {
-      // An InputData object suited for storing one subband from all
-      // stations.
-      SmartPtr<SubbandProcInputData> data;
-
-      // The SubbandProc associated with the data
-      CorrelatorSubbandProc *queue;
-    };
-
-    template<typename SampleT> void CorrelatorPipeline::receiveInput( size_t nrBlocks, const std::vector< SmartPtr<CorrelatorSubbandProc> > &workQueues )
-    {
-      // The length of a block in samples
-      size_t blockSize = ps.nrHistorySamples() + ps.nrSamplesPerSubband();
-
-      // SEND: For now, the n stations are sent by the first n ranks.
-      vector<int> stationRanks(ps.settings.antennaFields.size());
-      for (size_t stat = 0; stat < ps.settings.antennaFields.size(); ++stat) {
-        stationRanks[stat] = stat;
-      }
-
-      // RECEIVE: For now, we receive ALL beamlets.
-      vector<size_t> subbands(ps.nrSubbands());
-      for (size_t subband = 0; subband < ps.nrSubbands(); ++subband) {
-        subbands[subband] = subband;
-      }
-
-      // Set up the MPI environment.
-      MPIReceiveStations receiver(stationRanks, subbands, blockSize);
-
-      // Create a block object to hold all information for receiving one
-      // block.
-      vector<struct MPIReceiveStations::Block<SampleT> > blocks(ps.settings.antennaFields.size());
-
-      for (size_t stat = 0; stat < ps.settings.antennaFields.size(); ++stat) {
-        blocks[stat].beamlets.resize(ps.nrSubbands());
-      }
-
-      size_t workQueueIterator = 0;
-
-      for (size_t block = 0; block < nrBlocks; block++) {
-        // Receive the samples of all subbands from the stations for this
-        // block.
-
-        // The set of InputData objects we're using for this block.
-        vector<struct inputData_t> inputDatas(ps.nrSubbands());
-
-        for (size_t subband = 0; subband < ps.nrSubbands(); ++subband) {
-          // Fetch an input object to store this subband. For now, blindly
-          // round-robin over the work queues.
-          CorrelatorSubbandProc &queue = *workQueues[workQueueIterator++ % workQueues.size()];
-
-          // Fetch an input object to fill from the selected queue.
-          // NOTE: We'll put it in a SmartPtr right away!
-          SmartPtr<SubbandProcInputData> data = queue.inputPool.free.remove();
-
-          // Annotate the block
-          data->block   = block;
-          data->subband = subband;
-
-          // Incorporate it in the receiver's input set.
-          for (size_t stat = 0; stat < ps.settings.antennaFields.size(); ++stat) {
-            blocks[stat].beamlets[subband].samples = reinterpret_cast<SampleT*>(&data->inputSamples[stat][0][0][0]);
-          }
-
-          // Record the block (transfers ownership)
-          inputDatas[subband].data = data;
-          inputDatas[subband].queue = &queue;
-        }
-
-        // Receive all subbands from all stations
-        LOG_INFO_STR("[block " << block << "] Reading input samples");
-        receiver.receiveBlock<SampleT>(blocks);
-
-        // Process and forward the received input to the processing threads
-        for (size_t subband = 0; subband < ps.nrSubbands(); ++subband) {
-          CorrelatorSubbandProc &queue = *inputDatas[subband].queue;
-          SmartPtr<SubbandProcInputData> data = inputDatas[subband].data;
-
-          // Translate the metadata as provided by receiver
-          for (size_t stat = 0; stat < ps.settings.antennaFields.size(); ++stat) {
-            SubbandMetaData &metaData = blocks[stat].beamlets[subband].metaData;
-
-            // extract and apply the flags
-            // TODO: Not in this thread! Add a preprocess thread maybe?
-            data->inputFlags[stat] = metaData.flags;
-
-            data->flagInputSamples(stat, metaData);
-
-            // extract and assign the delays for the station beams
-            for (unsigned pol = 0; pol < NR_POLARIZATIONS; pol++)
-            {
-              unsigned sap = ps.settings.subbands[subband].SAP;
-
-              data->delaysAtBegin[sap][stat][pol] = metaData.stationBeam.delayAtBegin;
-              data->delaysAfterEnd[sap][stat][pol] = metaData.stationBeam.delayAfterEnd;
-              data->phaseOffsets[stat][pol] = 0.0;
-            }
-          }
-
-          queue.inputPool.filled.append(data);
-        }
-
-        LOG_DEBUG_STR("[block " << block << "] Forwarded input to processing");
-      }
-
-      // Signal end of input
-      for (size_t i = 0; i < workQueues.size(); ++i) {
-        workQueues[i]->inputPool.filled.append(NULL);
-      }
-    }
-
-    template void CorrelatorPipeline::receiveInput< SampleType<i16complex> >( size_t nrBlocks, const std::vector< SmartPtr<CorrelatorSubbandProc> > &workQueues );
-    template void CorrelatorPipeline::receiveInput< SampleType<i8complex> >( size_t nrBlocks, const std::vector< SmartPtr<CorrelatorSubbandProc> > &workQueues );
-    template void CorrelatorPipeline::receiveInput< SampleType<i4complex> >( size_t nrBlocks, const std::vector< SmartPtr<CorrelatorSubbandProc> > &workQueues );
-
-
-    void CorrelatorPipeline::processSubbands(CorrelatorSubbandProc &workQueue)
-    {
-      SmartPtr<SubbandProcInputData> input;
-
-      // Keep fetching input objects until end-of-input
-      while ((input = workQueue.inputPool.filled.remove()) != NULL) {
-        size_t block = input->block;
-        unsigned subband = input->subband;
-
-        if (subband == 0 || subband == ps.nrSubbands() - 1) {
-          LOG_INFO_STR("[block " << block << ", subband " << subband << "] Processing start");
-        }
-
-        // Also fetch an output object to store results
-        SmartPtr<CorrelatedDataHostBuffer> output = workQueue.outputPool.free.remove();
-        ASSERT(output != NULL); // Only we signal end-of-data, so we should never receive it
-
-        output->block = block;
-        output->subband = subband;
-
-        // Perform calculations
-        workQueue.timers["CPU - process"]->start();
-        workQueue.processSubband(*input, *output);
-        workQueue.timers["CPU - process"]->stop();
-
-        // Hand off output to post processing
-        workQueue.outputPool.filled.append(output);
-        ASSERT(!output);
-
-        // Give back input data for a refill
-        workQueue.inputPool.free.append(input);
-        ASSERT(!input);
-
-        if (subband == 0 || subband == ps.nrSubbands() - 1) {
-          LOG_DEBUG_STR("[block " << block << ", subband " << subband << "] Forwarded output to post processing");
-        }
-      }
-    }
-
-
-    void CorrelatorPipeline::postprocessSubbands(CorrelatorSubbandProc &workQueue)
-    {
-      SmartPtr<CorrelatedDataHostBuffer> output;
-
-      size_t nrBlocksForwarded = 0;
-      size_t nrBlocksDropped = 0;
-      time_t lastLogTime = 0;
-
-      // Keep fetching output objects until end-of-output
-      while ((output = workQueue.outputPool.filled.remove()) != NULL) {
-        size_t block = output->block;
-        unsigned subband = output->subband;
-
-        if (subband == 0 || subband == ps.nrSubbands() - 1) {
-          LOG_INFO_STR("[block " << block << ", subband " << subband << "] Post processing start");
-        }
-
-        workQueue.timers["CPU - postprocess"]->start();
-        workQueue.postprocessSubband(*output);
-        workQueue.timers["CPU - postprocess"]->stop();
-
-        // Hand off output, force in-order as Storage expects it that way
-        subbandPool[subband].sync.waitFor(block);
-
-        // We do the ordering, so we set the sequence numbers
-        output->setSequenceNumber(block);
-
-        if (!subbandPool[subband].bequeue->append(output)) {
-          nrBlocksDropped++;
-          //LOG_WARN_STR("[block " << block << "] Dropped for subband " << subband);
-
-          // Give back to queue
-          workQueue.outputPool.free.append(output);
-        } else {
-          nrBlocksForwarded++;
-        }
-
-        // Allow next block to be written
-        subbandPool[subband].sync.advanceTo(block + 1);
-
-        ASSERT(!output);
-
-        if (subband == 0 || subband == ps.nrSubbands() - 1) {
-          LOG_DEBUG_STR("[block " << block << ", subband " << subband << "] Forwarded output to writer");
-        }
-
-        if (time(0) != lastLogTime) {
-          lastLogTime = time(0);
-
-          LOG_INFO_STR("Forwarded " << nrBlocksForwarded << " blocks, dropped " << nrBlocksDropped << " blocks");
-        }
-      }
-    }
-
-
-    void CorrelatorPipeline::writeSubband( unsigned subband )
-    {
-      SmartPtr<Stream> outputStream;
-
-      // Connect to output stream
-      try {
-        if (ps.getHostName(CORRELATED_DATA, subband) == "") {
-          // an empty host name means 'write to disk directly', to
-          // make debugging easier for now
-          outputStream = new FileStream(ps.getFileName(CORRELATED_DATA, subband), 0666);
-        } else {
-          // connect to the Storage_main process for this output
-          const std::string desc = getStreamDescriptorBetweenIONandStorage(ps, CORRELATED_DATA, subband);
-
-          outputStream = createStream(desc, false, 0);
-        }
-      } catch(Exception &ex) {
-        LOG_ERROR_STR("Dropping rest of subband " << subband << ": " << ex);
-
-        outputStream = new NullStream;
-      }
-
-      SmartPtr<CorrelatedDataHostBuffer> output;
-
-      // Process pool elements until end-of-output
-      while ((output = subbandPool[subband].bequeue->remove()) != NULL) {
-        size_t block = output->block;
-        unsigned subband = output->subband;
-
-        CorrelatorSubbandProc &queue = output->queue; // cache queue object, because `output' will be destroyed
-
-        if (subband == 0 || subband == ps.nrSubbands() - 1) {
-          LOG_INFO_STR("[block " << block << ", subband " << subband << "] Writing start");
-        }
-
-        // Write block to disk 
-        try {
-          output->write(outputStream.get(), true);
-        } catch(Exception &ex) {
-          LOG_ERROR_STR("Dropping rest of subband " << subband << ": " << ex);
-
-          outputStream = new NullStream;
-        }
-
-        // Hand the object back to the workQueue it originally came from
-        queue.outputPool.free.append(output);
-
-        ASSERT(!output);
-
-        if (subband == 0 || subband == ps.nrSubbands() - 1) {
-          LOG_INFO_STR("[block " << block << ", subband " << subband << "] Done");
-        }
-      }
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipeline.h b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipeline.h
deleted file mode 100644
index 38fb6212d639e40139764a3c0666fa588d021fd4..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipeline.h
+++ /dev/null
@@ -1,84 +0,0 @@
-//# CorrelatorPipeline.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_CORRELATOR_PIPELINE_H
-#define LOFAR_GPUPROC_OPENCL_CORRELATOR_PIPELINE_H
-
-#include <CoInterface/Parset.h>
-#include <CoInterface/SlidingPointer.h>
-
-#include <GPUProc/gpu_incl.h>
-#include <GPUProc/BestEffortQueue.h>
-#include <GPUProc/FilterBank.h>
-#include <GPUProc/SubbandProcs/CorrelatorSubbandProc.h>
-#include "Pipeline.h"
-#include "CorrelatorPipelinePrograms.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    // Correlator pipeline, connect input, correlator SubbandProcs and output in parallel (OpenMP).
-    // Connect all parts of the pipeline together: set up connections with the input stream
-    // each in a seperate thread. Start two SubbandProcs for each GPU in the system.
-    // These process independently, but can overlap each others compute with host/device I/O.
-    // The SubbandProcs are then filled with data from the input stream and started.
-    // After all data is collected the output is written, again in parallel.
-    // This class contains most CPU side parallelism.
-    // It also contains two 'data' members that are shared between queues.
-    class CorrelatorPipeline : public Pipeline
-    {
-    public:
-      CorrelatorPipeline(const Parset &);
-
-      // for each subband get data from input stream, sync, start the kernels to process all data, write output in parallel
-      void        doWork();
-
-      // for each block, read all subbands from all stations, and divide the work over the workQueues
-      template<typename SampleT> void receiveInput( size_t nrBlocks, const std::vector< SmartPtr<CorrelatorSubbandProc> > &workQueues );
-
-      // process subbands on the GPU
-      void        processSubbands(CorrelatorSubbandProc &workQueue);
-
-      // postprocess subbands on the CPU
-      void        postprocessSubbands(CorrelatorSubbandProc &workQueue);
-
-      // send subbands to Storage
-      void        writeSubband(unsigned subband);
-
-    private:
-      struct Output {
-        // synchronisation to write blocks in-order
-        SlidingPointer<size_t> sync;
-
-        // output data queue
-        SmartPtr< BestEffortQueue< SmartPtr<CorrelatedDataHostBuffer> > > bequeue;
-      };
-
-      std::vector<struct Output> subbandPool;  // [subband]
-
-      FilterBank filterBank;
-      CorrelatorPipelinePrograms programs;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipelinePrograms.h b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipelinePrograms.h
deleted file mode 100644
index 3e220aa22772ef42eeb561174d04ce360fdb3e1a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/CorrelatorPipelinePrograms.h
+++ /dev/null
@@ -1,40 +0,0 @@
-//# CorrelatorPipelinePrograms.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_CORRELATOR_PIPELINE_PROGRAMS_H
-#define LOFAR_GPUPROC_OPENCL_CORRELATOR_PIPELINE_PROGRAMS_H
-
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct CorrelatorPipelinePrograms
-    {
-      cl::Program firFilterProgram;
-      cl::Program delayAndBandPassProgram;
-      cl::Program correlatorProgram;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/Pipeline.cc b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/Pipeline.cc
deleted file mode 100644
index 8f1a2b424f14822372acabfcd237bc1c133f091e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/Pipeline.cc
+++ /dev/null
@@ -1,130 +0,0 @@
-//# Pipeline.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "Pipeline.h"
-
-#include <Common/LofarLogger.h>
-#include <Common/lofar_iomanip.h>
-
-#include <GPUProc/opencl/gpu_utils.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-
-    Pipeline::Pipeline(const Parset &ps)
-      :
-      ps(ps)
-    {
-      createContext(context, devices);
-    }
-
-
-    cl::Program Pipeline::createProgram(const char *sources)
-    {
-      return LOFAR::Cobalt::createProgram(ps, context, devices, sources);
-    }
-
-
-    void Pipeline::Performance::addQueue(SubbandProc &queue)
-    {
-      ScopedLock sl(totalsMutex);
-
-      // add performance counters
-      for (map<string, SmartPtr<PerformanceCounter> >::iterator i = queue.counters.begin(); i != queue.counters.end(); ++i) {
-
-        const string &name = i->first;
-        PerformanceCounter *counter = i->second.get();
-
-        counter->waitForAllOperations();
-
-        total_counters[name] += counter->getTotal();
-      }
-
-      // add timers
-      for (map<string, SmartPtr<NSTimer> >::iterator i = queue.timers.begin(); i != queue.timers.end(); ++i) {
-
-        const string &name = i->first;
-        NSTimer *timer = i->second.get();
-
-        if (!total_timers[name])
-          total_timers[name] = new NSTimer(name, false, false);
-
-        *total_timers[name] += *timer;
-      }
-    }
-    
-    void Pipeline::Performance::log(size_t nrSubbandProcs)
-    {
-      // Group figures based on their prefix before " - ", so "compute - FIR"
-      // belongs to group "compute".
-      map<string, PerformanceCounter::figures> counter_groups;
-
-      for (map<string, PerformanceCounter::figures>::const_iterator i = total_counters.begin(); i != total_counters.end(); ++i) {
-        size_t n = i->first.find(" - ");
-
-        // discard counters without group
-        if (n == string::npos)
-          continue;
-
-        // determine group name
-        string group = i->first.substr(0, n);
-
-        // add to group
-        counter_groups[group] += i->second;
-      }
-
-      // Log all performance totals at DEBUG level
-      for (map<string, PerformanceCounter::figures>::const_iterator i = total_counters.begin(); i != total_counters.end(); ++i) {
-        LOG_DEBUG_STR(i->second.log(i->first));
-      }
-
-      for (map<string, SmartPtr<NSTimer> >::const_iterator i = total_timers.begin(); i != total_timers.end(); ++i) {
-        LOG_DEBUG_STR(*(i->second));
-      }
-
-      // Log all group totals at INFO level
-      for (map<string, PerformanceCounter::figures>::const_iterator i = counter_groups.begin(); i != counter_groups.end(); ++i) {
-        LOG_INFO_STR(i->second.log(i->first));
-      }
-
-      // Log specific performance figures for regression tests at INFO level
-      double wall_seconds = total_timers["CPU - total"]->getAverage();
-      double gpu_seconds = counter_groups["compute"].runtime / nrGPUs;
-      double spin_seconds = total_timers["GPU - wait"]->getAverage();
-      double input_seconds = total_timers["CPU - read input"]->getElapsed() / nrSubbandProcs;
-      double cpu_seconds = total_timers["CPU - process"]->getElapsed() / nrSubbandProcs;
-      double postprocess_seconds = total_timers["CPU - postprocess"]->getElapsed() / nrSubbandProcs;
-
-      LOG_INFO_STR("Wall seconds spent processing        : " << fixed << setw(8) << setprecision(3) << wall_seconds);
-      LOG_INFO_STR("GPU  seconds spent computing, per GPU: " << fixed << setw(8) << setprecision(3) << gpu_seconds);
-      LOG_INFO_STR("Spin seconds spent polling, per block: " << fixed << setw(8) << setprecision(3) << spin_seconds);
-      LOG_INFO_STR("CPU  seconds spent on input,   per WQ: " << fixed << setw(8) << setprecision(3) << input_seconds);
-      LOG_INFO_STR("CPU  seconds spent processing, per WQ: " << fixed << setw(8) << setprecision(3) << cpu_seconds);
-      LOG_INFO_STR("CPU  seconds spent postprocessing, per WQ: " << fixed << setw(8) << setprecision(3) << postprocess_seconds);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/Pipeline.h b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/Pipeline.h
deleted file mode 100644
index 759e0a893e48fc90a27e33b6fc899328806fdd84..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/Pipeline.h
+++ /dev/null
@@ -1,74 +0,0 @@
-//# Pipeline.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_PIPELINE_H
-#define LOFAR_GPUPROC_OPENCL_PIPELINE_H
-
-#include <string>
-#include <vector>
-
-#include <Common/LofarTypes.h>
-#include <Common/Thread/Queue.h>
-#include <CoInterface/Parset.h>
-#include <CoInterface/SmartPtr.h>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/OpenMP_Lock.h>
-#include <GPUProc/gpu_incl.h>
-#include <GPUProc/SubbandProcs/SubbandProc.h>
-#include <GPUProc/PerformanceCounter.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class Pipeline
-    {
-    public:
-      Pipeline(const Parset &ps);
-
-      cl::Program             createProgram(const char *sources);
-
-      const Parset            &ps;
-      cl::Context context;
-      std::vector<cl::Device> devices;
-
-#if defined USE_B7015
-      OMP_Lock hostToDeviceLock[4], deviceToHostLock[4];
-#endif
-
-    protected:
-      // combines all functionality needed for getting the total from a set of counters
-      struct Performance {
-        std::map<std::string, PerformanceCounter::figures> total_counters;
-        std::map<std::string, SmartPtr<NSTimer> > total_timers;
-        // lock on the shared data
-        Mutex totalsMutex;
-        // add the counter in this queue
-        void addQueue(SubbandProc &queue);
-        // Print a logline with results
-        void log(size_t nrSubbandProcs);
-      } performance;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/UHEP_Pipeline.cc b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/UHEP_Pipeline.cc
deleted file mode 100644
index cdb5f9a95b88b61515bf8ec931e2d128a91f7058..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/UHEP_Pipeline.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-//# UHEP_Pipeline.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "UHEP_Pipeline.h"
-
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/OpenMP_Lock.h>
-#include <GPUProc/SubbandProcs/UHEP_SubbandProc.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    UHEP_Pipeline::UHEP_Pipeline(const Parset &ps)
-      :
-      Pipeline(ps),
-      beamFormerCounter("beamformer", profiling),
-      transposeCounter("transpose", profiling),
-      invFFTcounter("inv. FFT", profiling),
-      invFIRfilterCounter("inv. FIR", profiling),
-      triggerCounter("trigger", profiling),
-      beamFormerWeightsCounter("BF weights", profiling),
-      samplesCounter("samples", profiling)
-    {
-      double startTime = omp_get_wtime();
-
-#pragma omp parallel sections
-      {
-#pragma omp section
-        beamFormerProgram = createProgram("UHEP/BeamFormer.cl");
-#pragma omp section
-        transposeProgram = createProgram("UHEP/Transpose.cl");
-#pragma omp section
-        invFFTprogram = createProgram("UHEP/InvFFT.cl");
-#pragma omp section
-        invFIRfilterProgram = createProgram("UHEP/InvFIR.cl");
-#pragma omp section
-        triggerProgram = createProgram("UHEP/Trigger.cl");
-      }
-
-      LOG_DEBUG_STR("compile time = " << omp_get_wtime() - startTime);
-    }
-
-    void UHEP_Pipeline::doWork()
-    {
-      float delaysAtBegin[ps.nrBeams()][ps.settings.antennaFields.size()][NR_POLARIZATIONS] __attribute__((aligned(32)));
-      float delaysAfterEnd[ps.nrBeams()][ps.settings.antennaFields.size()][NR_POLARIZATIONS] __attribute__((aligned(32)));
-      float phaseOffsets[ps.settings.antennaFields.size()][NR_POLARIZATIONS] __attribute__((aligned(32)));
-
-      memset(delaysAtBegin, 0, sizeof delaysAtBegin);
-      memset(delaysAfterEnd, 0, sizeof delaysAfterEnd);
-      memset(phaseOffsets, 0, sizeof phaseOffsets);
-      delaysAtBegin[0][2][0] = 1e-6, delaysAfterEnd[0][2][0] = 1.1e-6;
-
-#pragma omp parallel num_threads((profiling ? 1 : 2) * nrGPUs)
-      UHEP_SubbandProc(*this, omp_get_thread_num() % nrGPUs).doWork(&delaysAtBegin[0][0][0], &delaysAfterEnd[0][0][0], &phaseOffsets[0][0]);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/UHEP_Pipeline.h b/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/UHEP_Pipeline.h
deleted file mode 100644
index bdabfd7deb305151d3261e5cfc26bbc87f046fd7..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/Pipelines/UHEP_Pipeline.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//# UHEP_Pipeline.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_UHEP_PIPELINE_H
-#define LOFAR_GPUPROC_OPENCL_UHEP_PIPELINE_H
-
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/gpu_incl.h>
-#include <GPUProc/PerformanceCounter.h>
-#include "Pipeline.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    class UHEP_Pipeline : public Pipeline
-    {
-    public:
-      UHEP_Pipeline(const Parset &);
-
-      void                    doWork();
-
-      cl::Program beamFormerProgram, transposeProgram, invFFTprogram, invFIRfilterProgram, triggerProgram;
-      PerformanceCounter beamFormerCounter, transposeCounter, invFFTcounter, invFIRfilterCounter, triggerCounter;
-      PerformanceCounter beamFormerWeightsCounter, samplesCounter;
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl
deleted file mode 100644
index 78a9526da817a3c7f445c4b2c8a99e43444b5ee8..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl
+++ /dev/null
@@ -1,803 +0,0 @@
-//# BeamFormer.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#define MAX(A,B) ((A)>(B) ? (A) : (B))
-#define NR_PASSES MAX((NR_STATIONS + 6) / 16, 1) // gives best results on GTX 680
-#define NR_STATIONS_PER_PASS ((NR_STATIONS + NR_PASSES - 1) / NR_PASSES)
-
-#if NR_STATIONS_PER_PASS > 48
-#error "need more passes to beam form this number of stations"
-#endif
-
-#if NR_BITS_PER_SAMPLE == 8
-typedef char4 SampleType;
-#else
-typedef short4 SampleType;
-#endif
-
-
-typedef __global float2 (*ComplexVoltagesType)[NR_SUBBANDS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1][NR_TABS][NR_POLARIZATIONS];
-typedef __global SampleType (*SamplesType)[NR_STATIONS][NR_SUBBANDS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_SUBBANDS][NR_TABS];
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *samplesPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  SamplesType samples = (SamplesType) samplesPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint pol = get_local_id(0);
-  uint tab = get_local_id(1);
-  uint subband = get_global_id(2);
-
-  float2 sample;
-  __local union {
-    float2 samples[NR_STATIONS_PER_PASS][16][NR_POLARIZATIONS];
-    float4 samples4[NR_STATIONS_PER_PASS][16];
-  } _local;
-
-#pragma unroll
-  for (uint first_station = 0; first_station < NR_STATIONS; first_station += NR_STATIONS_PER_PASS) {
-#if NR_STATIONS_PER_PASS >= 1
-    float2 weight_00;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 0 < NR_STATIONS)
-      weight_00 = (*weights)[first_station + 0][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 2
-    float2 weight_01;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 1 < NR_STATIONS)
-      weight_01 = (*weights)[first_station + 1][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 3
-    float2 weight_02;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 2 < NR_STATIONS)
-      weight_02 = (*weights)[first_station + 2][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 4
-    float2 weight_03;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 3 < NR_STATIONS)
-      weight_03 = (*weights)[first_station + 3][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 5
-    float2 weight_04;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 4 < NR_STATIONS)
-      weight_04 = (*weights)[first_station + 4][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 6
-    float2 weight_05;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 5 < NR_STATIONS)
-      weight_05 = (*weights)[first_station + 5][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 7
-    float2 weight_06;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 6 < NR_STATIONS)
-      weight_06 = (*weights)[first_station + 6][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 8
-    float2 weight_07;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 7 < NR_STATIONS)
-      weight_07 = (*weights)[first_station + 7][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 9
-    float2 weight_08;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 8 < NR_STATIONS)
-      weight_08 = (*weights)[first_station + 8][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 10
-    float2 weight_09;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 9 < NR_STATIONS)
-      weight_09 = (*weights)[first_station + 9][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 11
-    float2 weight_10;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 10 < NR_STATIONS)
-      weight_10 = (*weights)[first_station + 10][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 12
-    float2 weight_11;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 11 < NR_STATIONS)
-      weight_11 = (*weights)[first_station + 11][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 13
-    float2 weight_12;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 12 < NR_STATIONS)
-      weight_12 = (*weights)[first_station + 12][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 14
-    float2 weight_13;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 13 < NR_STATIONS)
-      weight_13 = (*weights)[first_station + 13][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 15
-    float2 weight_14;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 14 < NR_STATIONS)
-      weight_14 = (*weights)[first_station + 14][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 16
-    float2 weight_15;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 15 < NR_STATIONS)
-      weight_15 = (*weights)[first_station + 15][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 17
-    float2 weight_16;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 16 < NR_STATIONS)
-      weight_16 = (*weights)[first_station + 16][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 18
-    float2 weight_17;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 17 < NR_STATIONS)
-      weight_17 = (*weights)[first_station + 17][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 19
-    float2 weight_18;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 18 < NR_STATIONS)
-      weight_18 = (*weights)[first_station + 18][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 20
-    float2 weight_19;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 19 < NR_STATIONS)
-      weight_19 = (*weights)[first_station + 19][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 21
-    float2 weight_20;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 20 < NR_STATIONS)
-      weight_20 = (*weights)[first_station + 20][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 22
-    float2 weight_21;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 21 < NR_STATIONS)
-      weight_21 = (*weights)[first_station + 21][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 23
-    float2 weight_22;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 22 < NR_STATIONS)
-      weight_22 = (*weights)[first_station + 22][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 24
-    float2 weight_23;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 23 < NR_STATIONS)
-      weight_23 = (*weights)[first_station + 23][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 25
-    float2 weight_24;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 24 < NR_STATIONS)
-      weight_24 = (*weights)[first_station + 24][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 26
-    float2 weight_25;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 25 < NR_STATIONS)
-      weight_25 = (*weights)[first_station + 25][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 27
-    float2 weight_26;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 26 < NR_STATIONS)
-      weight_26 = (*weights)[first_station + 26][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 28
-    float2 weight_27;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 27 < NR_STATIONS)
-      weight_27 = (*weights)[first_station + 27][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 29
-    float2 weight_28;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 28 < NR_STATIONS)
-      weight_28 = (*weights)[first_station + 28][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 30
-    float2 weight_29;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 29 < NR_STATIONS)
-      weight_29 = (*weights)[first_station + 29][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 31
-    float2 weight_30;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 30 < NR_STATIONS)
-      weight_30 = (*weights)[first_station + 30][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 32
-    float2 weight_31;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 31 < NR_STATIONS)
-      weight_31 = (*weights)[first_station + 31][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 33
-    float2 weight_32;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 32 < NR_STATIONS)
-      weight_32 = (*weights)[first_station + 32][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 34
-    float2 weight_33;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 33 < NR_STATIONS)
-      weight_33 = (*weights)[first_station + 33][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 35
-    float2 weight_34;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 34 < NR_STATIONS)
-      weight_34 = (*weights)[first_station + 34][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 36
-    float2 weight_35;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 35 < NR_STATIONS)
-      weight_35 = (*weights)[first_station + 35][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 37
-    float2 weight_36;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 36 < NR_STATIONS)
-      weight_36 = (*weights)[first_station + 36][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 38
-    float2 weight_37;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 37 < NR_STATIONS)
-      weight_37 = (*weights)[first_station + 37][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 39
-    float2 weight_38;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 38 < NR_STATIONS)
-      weight_38 = (*weights)[first_station + 38][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 40
-    float2 weight_39;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 39 < NR_STATIONS)
-      weight_39 = (*weights)[first_station + 39][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 41
-    float2 weight_40;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 40 < NR_STATIONS)
-      weight_40 = (*weights)[first_station + 40][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 42
-    float2 weight_41;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 41 < NR_STATIONS)
-      weight_41 = (*weights)[first_station + 41][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 43
-    float2 weight_42;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 42 < NR_STATIONS)
-      weight_42 = (*weights)[first_station + 42][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 44
-    float2 weight_43;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 43 < NR_STATIONS)
-      weight_43 = (*weights)[first_station + 43][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 45
-    float2 weight_44;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 44 < NR_STATIONS)
-      weight_44 = (*weights)[first_station + 44][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 46
-    float2 weight_45;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 45 < NR_STATIONS)
-      weight_45 = (*weights)[first_station + 45][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 47
-    float2 weight_46;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 46 < NR_STATIONS)
-      weight_46 = (*weights)[first_station + 46][subband][tab];
-#endif
-
-#if NR_STATIONS_PER_PASS >= 48
-    float2 weight_47;
-
-    if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 47 < NR_STATIONS)
-      weight_47 = (*weights)[first_station + 47][subband][tab];
-#endif
-
-    for (uint time = 0; time < NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1; time += 16) {
-      barrier(CLK_LOCAL_MEM_FENCE);
-
-      for (uint i = get_local_id(0) + NR_POLARIZATIONS * get_local_id(1); i < NR_STATIONS_PER_PASS * 16; i += NR_TABS * NR_POLARIZATIONS) {
-        uint t = i % 16;
-        uint s = i / 16;
-
-        if (time + t < NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1)
-          if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + s < NR_STATIONS)
-            _local.samples4[0][i] = convert_float4((*samples)[first_station + s][subband][time + t]);
-      }
-
-      barrier(CLK_LOCAL_MEM_FENCE);
-
-      for (uint t = 0; t < min(16U, (NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1 - time)); t++) {
-        float2 sum = first_station == 0 ? 0 : (*complexVoltages)[subband][time + t][tab][pol];
-
-#if NR_STATIONS_PER_PASS >= 1
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 1 < NR_STATIONS) {
-          sample = _local.samples[ 0][t][pol];
-          sum += weight_00.xx * sample;
-          sum += weight_00.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 2
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 2 < NR_STATIONS) {
-          sample = _local.samples[ 1][t][pol];
-          sum += weight_01.xx * sample;
-          sum += weight_01.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 3
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 3 < NR_STATIONS) {
-          sample = _local.samples[ 2][t][pol];
-          sum += weight_02.xx * sample;
-          sum += weight_02.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 4
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 4 < NR_STATIONS) {
-          sample = _local.samples[ 3][t][pol];
-          sum += weight_03.xx * sample;
-          sum += weight_03.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 5
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 5 < NR_STATIONS) {
-          sample = _local.samples[ 4][t][pol];
-          sum += weight_04.xx * sample;
-          sum += weight_04.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 6
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 6 < NR_STATIONS) {
-          sample = _local.samples[ 5][t][pol];
-          sum += weight_05.xx * sample;
-          sum += weight_05.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 7
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 7 < NR_STATIONS) {
-          sample = _local.samples[ 6][t][pol];
-          sum += weight_06.xx * sample;
-          sum += weight_06.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 8
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 8 < NR_STATIONS) {
-          sample = _local.samples[ 7][t][pol];
-          sum += weight_07.xx * sample;
-          sum += weight_07.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 9
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 9 < NR_STATIONS) {
-          sample = _local.samples[ 8][t][pol];
-          sum += weight_08.xx * sample;
-          sum += weight_08.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 10
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 10 < NR_STATIONS) {
-          sample = _local.samples[ 9][t][pol];
-          sum += weight_09.xx * sample;
-          sum += weight_09.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 11
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 11 < NR_STATIONS) {
-          sample = _local.samples[10][t][pol];
-          sum += weight_10.xx * sample;
-          sum += weight_10.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 12
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 12 < NR_STATIONS) {
-          sample = _local.samples[11][t][pol];
-          sum += weight_11.xx * sample;
-          sum += weight_11.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 13
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 13 < NR_STATIONS) {
-          sample = _local.samples[12][t][pol];
-          sum += weight_12.xx * sample;
-          sum += weight_12.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 14
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 14 < NR_STATIONS) {
-          sample = _local.samples[13][t][pol];
-          sum += weight_13.xx * sample;
-          sum += weight_13.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 15
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 15 < NR_STATIONS) {
-          sample = _local.samples[14][t][pol];
-          sum += weight_14.xx * sample;
-          sum += weight_14.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 16
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 15 < NR_STATIONS) {
-          sample = _local.samples[15][t][pol];
-          sum += weight_15.xx * sample;
-          sum += weight_15.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 17
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 16 < NR_STATIONS) {
-          sample = _local.samples[16][t][pol];
-          sum += weight_16.xx * sample;
-          sum += weight_16.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 18
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 17 < NR_STATIONS) {
-          sample = _local.samples[17][t][pol];
-          sum += weight_17.xx * sample;
-          sum += weight_17.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 19
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 18 < NR_STATIONS) {
-          sample = _local.samples[18][t][pol];
-          sum += weight_18.xx * sample;
-          sum += weight_18.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 20
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 19 < NR_STATIONS) {
-          sample = _local.samples[19][t][pol];
-          sum += weight_19.xx * sample;
-          sum += weight_19.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 21
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 20 < NR_STATIONS) {
-          sample = _local.samples[20][t][pol];
-          sum += weight_20.xx * sample;
-          sum += weight_20.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 22
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 21 < NR_STATIONS) {
-          sample = _local.samples[21][t][pol];
-          sum += weight_21.xx * sample;
-          sum += weight_21.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 23
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 22 < NR_STATIONS) {
-          sample = _local.samples[22][t][pol];
-          sum += weight_22.xx * sample;
-          sum += weight_22.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 24
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 23 < NR_STATIONS) {
-          sample = _local.samples[23][t][pol];
-          sum += weight_23.xx * sample;
-          sum += weight_23.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 25
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 25 < NR_STATIONS) {
-          sample = _local.samples[24][t][pol];
-          sum += weight_24.xx * sample;
-          sum += weight_24.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 26
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 25 < NR_STATIONS) {
-          sample = _local.samples[25][t][pol];
-          sum += weight_25.xx * sample;
-          sum += weight_25.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 27
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 26 < NR_STATIONS) {
-          sample = _local.samples[26][t][pol];
-          sum += weight_26.xx * sample;
-          sum += weight_26.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 28
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 27 < NR_STATIONS) {
-          sample = _local.samples[27][t][pol];
-          sum += weight_27.xx * sample;
-          sum += weight_27.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 29
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 28 < NR_STATIONS) {
-          sample = _local.samples[28][t][pol];
-          sum += weight_28.xx * sample;
-          sum += weight_28.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 30
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 29 < NR_STATIONS) {
-          sample = _local.samples[29][t][pol];
-          sum += weight_29.xx * sample;
-          sum += weight_29.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 31
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 30 < NR_STATIONS) {
-          sample = _local.samples[30][t][pol];
-          sum += weight_30.xx * sample;
-          sum += weight_30.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 32
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 31 < NR_STATIONS) {
-          sample = _local.samples[31][t][pol];
-          sum += weight_31.xx * sample;
-          sum += weight_31.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 33
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 32 < NR_STATIONS) {
-          sample = _local.samples[32][t][pol];
-          sum += weight_32.xx * sample;
-          sum += weight_32.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 34
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 33 < NR_STATIONS) {
-          sample = _local.samples[33][t][pol];
-          sum += weight_33.xx * sample;
-          sum += weight_33.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 35
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 34 < NR_STATIONS) {
-          sample = _local.samples[34][t][pol];
-          sum += weight_34.xx * sample;
-          sum += weight_34.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 36
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 35 < NR_STATIONS) {
-          sample = _local.samples[35][t][pol];
-          sum += weight_35.xx * sample;
-          sum += weight_35.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 37
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 36 < NR_STATIONS) {
-          sample = _local.samples[36][t][pol];
-          sum += weight_36.xx * sample;
-          sum += weight_36.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 38
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 37 < NR_STATIONS) {
-          sample = _local.samples[37][t][pol];
-          sum += weight_37.xx * sample;
-          sum += weight_37.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 39
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 38 < NR_STATIONS) {
-          sample = _local.samples[38][t][pol];
-          sum += weight_38.xx * sample;
-          sum += weight_38.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 40
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 39 < NR_STATIONS) {
-          sample = _local.samples[39][t][pol];
-          sum += weight_39.xx * sample;
-          sum += weight_39.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 41
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 40 < NR_STATIONS) {
-          sample = _local.samples[40][t][pol];
-          sum += weight_40.xx * sample;
-          sum += weight_40.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 42
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 41 < NR_STATIONS) {
-          sample = _local.samples[41][t][pol];
-          sum += weight_41.xx * sample;
-          sum += weight_41.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 43
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 42 < NR_STATIONS) {
-          sample = _local.samples[42][t][pol];
-          sum += weight_42.xx * sample;
-          sum += weight_42.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 44
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 43 < NR_STATIONS) {
-          sample = _local.samples[43][t][pol];
-          sum += weight_43.xx * sample;
-          sum += weight_43.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 45
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 44 < NR_STATIONS) {
-          sample = _local.samples[44][t][pol];
-          sum += weight_44.xx * sample;
-          sum += weight_44.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 46
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 45 < NR_STATIONS) {
-          sample = _local.samples[45][t][pol];
-          sum += weight_45.xx * sample;
-          sum += weight_45.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 47
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 46 < NR_STATIONS) {
-          sample = _local.samples[46][t][pol];
-          sum += weight_46.xx * sample;
-          sum += weight_46.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-#if NR_STATIONS_PER_PASS >= 48
-        if (NR_STATIONS % NR_STATIONS_PER_PASS == 0 || first_station + 47 < NR_STATIONS) {
-          sample = _local.samples[47][t][pol];
-          sum += weight_47.xx * sample;
-          sum += weight_47.yy * (float2) (-sample.y, sample.x);
-        }
-#endif
-
-        (*complexVoltages)[subband][time + t][tab][pol] = sum;
-      }
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.4groups b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.4groups
deleted file mode 100644
index 7e7b84c9c3f2edb6662d89debec49d04bacdb9c7..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.4groups
+++ /dev/null
@@ -1,225 +0,0 @@
-#define NR_THREADS_PER_GROUP    4
-#define NR_STATIONS_PER_GROUP ((NR_STATIONS + NR_THREADS_PER_GROUP - 1) / NR_THREADS_PER_GROUP)
-
-#if NR_BITS_PER_SAMPLE == 8
-typedef char2 SampleType;
-#else
-typedef short2 SampleType;
-#endif
-
-#if NR_STATIONS > 48
-#error unsupported number of stations (max = 48)
-#endif
-
-
-typedef __global float2 (*ComplexVoltagesType)[NR_SUBBANDS][NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1][NR_TABS][NR_POLARIZATIONS];
-typedef __global SampleType (*SamplesType)[NR_STATIONS][NR_SUBBANDS][NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1][NR_POLARIZATIONS];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_SUBBANDS][NR_TABS];
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *samplesPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  SamplesType samples = (SamplesType) samplesPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint pol = get_local_id(0) & 1;
-  uint group = get_local_id(0) >> 1;
-  uint tab = get_local_id(1);
-  uint subband = get_global_id(2);
-  uint first_station = group * NR_STATIONS_PER_GROUP;
-
-  float2 sample;
-  __local float2 local_samples[16][NR_STATIONS + 1][NR_POLARIZATIONS];
-  __local float2 local_sum[NR_TABS][NR_THREADS_PER_GROUP / 2][NR_POLARIZATIONS];
-
-#if NR_STATIONS_PER_GROUP >= 1
-  float2 weight_00 = (*weights)[first_station + 0][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 2
-  float2 weight_01 = (*weights)[first_station + 1][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 3
-  float2 weight_02 = (*weights)[first_station + 2][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 4
-  float2 weight_03 = (*weights)[first_station + 3][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 5
-  float2 weight_04 = (*weights)[first_station + 4][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 6
-  float2 weight_05 = (*weights)[first_station + 5][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 7
-  float2 weight_06 = (*weights)[first_station + 6][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 8
-  float2 weight_07 = (*weights)[first_station + 7][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 9
-  float2 weight_08 = (*weights)[first_station + 8][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 10
-  float2 weight_09 = (*weights)[first_station + 9][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 11
-  float2 weight_10 = (*weights)[first_station + 10][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 12
-  float2 weight_11 = (*weights)[first_station + 11][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 13
-  float2 weight_12 = (*weights)[first_station + 12][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 14
-  float2 weight_13 = (*weights)[first_station + 13][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 15
-  float2 weight_14 = (*weights)[first_station + 14][subband][tab];
-#endif
-#if NR_STATIONS_PER_GROUP >= 16
-  float2 weight_15 = (*weights)[first_station + 15][subband][tab];
-#endif
-
-  for (uint time = 0; time < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1; time += 16) {
-    for (uint i = get_local_id(0) + NR_THREADS_PER_GROUP * NR_POLARIZATIONS * get_local_id(1); i < NR_STATIONS * 16 * NR_POLARIZATIONS; i += NR_TABS * NR_THREADS_PER_GROUP * NR_POLARIZATIONS) {
-      uint p = i % NR_POLARIZATIONS;
-      uint t = (i / NR_POLARIZATIONS) % 16;
-      uint s = i / NR_POLARIZATIONS / 16;
-
-      if (time + t < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1)
-        local_samples[t][s][p] = convert_float2((*samples)[s][subband][time + t][p]);
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    for (uint t = 0; t < min(16U, (NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1 - time)); t++) {
-      float2 sum;
-
-#if NR_STATIONS_PER_GROUP >= 1
-      sample = local_samples[t][first_station + 0][pol];
-      sum = weight_00.xx * sample;
-      sum += weight_00.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 2
-      sample = local_samples[t][first_station + 1][pol];
-      sum += weight_01.xx * sample;
-      sum += weight_01.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 3
-      sample = local_samples[t][first_station + 2][pol];
-      sum += weight_02.xx * sample;
-      sum += weight_02.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 4
-      sample = local_samples[t][first_station + 3][pol];
-      sum += weight_03.xx * sample;
-      sum += weight_03.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 5
-      sample = local_samples[t][first_station + 4][pol];
-      sum += weight_04.xx * sample;
-      sum += weight_04.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 6
-      sample = local_samples[t][first_station + 5][pol];
-      sum += weight_05.xx * sample;
-      sum += weight_05.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 7
-      sample = local_samples[t][first_station + 6][pol];
-      sum += weight_06.xx * sample;
-      sum += weight_06.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 8
-      sample = local_samples[t][first_station + 7][pol];
-      sum += weight_07.xx * sample;
-      sum += weight_07.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 9
-      sample = local_samples[t][first_station + 8][pol];
-      sum += weight_08.xx * sample;
-      sum += weight_08.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 10
-      sample = local_samples[t][first_station + 9][pol];
-      sum += weight_09.xx * sample;
-      sum += weight_09.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 11
-      sample = local_samples[t][first_station + 10][pol];
-      sum += weight_10.xx * sample;
-      sum += weight_10.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 12
-      sample = local_samples[t][first_station + 11][pol];
-      sum += weight_11.xx * sample;
-      sum += weight_11.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 13
-      sample = local_samples[t][first_station + 12][pol];
-      sum += weight_12.xx * sample;
-      sum += weight_12.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 14
-      sample = local_samples[t][first_station + 13][pol];
-      sum += weight_13.xx * sample;
-      sum += weight_13.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 15
-      sample = local_samples[t][first_station + 14][pol];
-      sum += weight_14.xx * sample;
-      sum += weight_14.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS_PER_GROUP >= 16
-      sample = local_samples[t][first_station + 15][pol];
-      sum += weight_15.xx * sample;
-      sum += weight_15.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if 1
-      if ((group & 1) != 0)
-        local_sum[tab][group >> 1][pol] = sum;
-
-      if ((group & 1) == 0)
-        sum += local_sum[tab][group >> 1][pol];
-
-      if (group == 2)
-        local_sum[tab][0][pol] = sum;
-
-      if (group == 0)
-        (*complexVoltages)[subband][time + t][tab][pol] = sum + local_sum[tab][0][pol];
-#else
-      float2 other_sum;
-      asm ("shfl.down.b32 %0, %1, 1, 0x1F;" : "=r" (other_sum.x) : "r" (sum.x));
-      asm ("shfl.down.b32 %0, %1, 1, 0x1F;" : "=r" (other_sum.y) : "r" (sum.y));
-      sum += other_sum;
-      asm ("shfl.down.b32 %0, %1, 2, 0x1F;" : "=r" (other_sum.x) : "r" (sum.x));
-      asm ("shfl.down.b32 %0, %1, 2, 0x1F;" : "=r" (other_sum.y) : "r" (sum.y));
-
-      if (first_station == 0)
-        (*complexVoltages)[subband][time + t][tab][pol] = sum + other_sum;
-#endif
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.hop b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.hop
deleted file mode 100644
index 65f87cb7a2bd1e5d9ef60713c6a23057c5125731..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.hop
+++ /dev/null
@@ -1,180 +0,0 @@
-#undef USE_WARP_SHUFFLE_INSN // FIXME: Broken
-
-#if NR_BITS_PER_SAMPLE == 8
-typedef char2 SampleType;
-#else
-typedef short2 SampleType;
-#endif
-
-
-typedef __global float2 (*ComplexVoltagesType)[NR_SUBBANDS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1][NR_TABS][NR_POLARIZATIONS];
-typedef __global SampleType (*SamplesType)[NR_STATIONS][NR_SUBBANDS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1][NR_POLARIZATIONS];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_SUBBANDS][NR_TABS];
-
-float2 cmul(float2 a, float2 b)
-{
-  return (float2) { a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x };
-}
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *samplesPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  SamplesType samples = (SamplesType) samplesPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-#if defined USE_WARP_SHUFFLE_INSN
-  uint first_tab = 3 * get_local_id(1);
-  uint first_station = 6 * get_local_id(0);
-#else
-  uint pol = get_local_id(0) & 1;
-  uint tab_group = (get_local_id(0) >> 1) % (NR_TABS / 3);
-  uint station_group = (get_local_id(0) >> 1) / (NR_TABS / 3);
-  uint first_tab = 3 * tab_group;
-  uint first_station = 6 * station_group;
-#endif
-  uint subband = get_global_id(1);
-
-  bool lastGroupOfStations = first_station + 6 == NR_STATIONS;
-
-  float2 weight_0_0 = (*weights)[first_station + 0][subband][first_tab + 0];
-  float2 weight_0_1 = (*weights)[first_station + 0][subband][first_tab + 1];
-  float2 weight_0_2 = (*weights)[first_station + 0][subband][first_tab + 2];
-  float2 weight_1_0 = (*weights)[first_station + 1][subband][first_tab + 0];
-  float2 weight_1_1 = (*weights)[first_station + 1][subband][first_tab + 1];
-  float2 weight_1_2 = (*weights)[first_station + 1][subband][first_tab + 2];
-  float2 weight_2_0 = (*weights)[first_station + 2][subband][first_tab + 0];
-  float2 weight_2_1 = (*weights)[first_station + 2][subband][first_tab + 1];
-  float2 weight_2_2 = (*weights)[first_station + 2][subband][first_tab + 2];
-  float2 weight_3_0 = (*weights)[first_station + 3][subband][first_tab + 0];
-  float2 weight_3_1 = (*weights)[first_station + 3][subband][first_tab + 1];
-  float2 weight_3_2 = (*weights)[first_station + 3][subband][first_tab + 2];
-  float2 weight_4_0 = (*weights)[first_station + 4][subband][first_tab + 0];
-  float2 weight_4_1 = (*weights)[first_station + 4][subband][first_tab + 1];
-  float2 weight_4_2 = (*weights)[first_station + 4][subband][first_tab + 2];
-  float2 weight_5_0 = (*weights)[first_station + 5][subband][first_tab + 0];
-  float2 weight_5_1 = (*weights)[first_station + 5][subband][first_tab + 1];
-  float2 weight_5_2 = (*weights)[first_station + 5][subband][first_tab + 2];
-
-#if !defined USE_WARP_SHUFFLE_INSN
-  __local float2 local_sums[3][NR_STATIONS / 6][NR_TABS / 3][NR_POLARIZATIONS];
-#endif
-
-  float2 sample_0, sample_1, sample_2, sample_3, sample_4, sample_5;
-  float2 sum_0, sum_1, sum_2;
-
-#if !defined USE_WARP_SHUFFLE_INSN
-  if (first_station == 0) {
-    local_sums[0][0][tab_group][pol] = 0;
-    local_sums[1][0][tab_group][pol] = 0;
-    local_sums[2][0][tab_group][pol] = 0;
-  }
-#endif
-
-  for (int time = 0 - station_group; time < (int) (NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1 + NR_STATIONS / 6 - 1 - station_group); time++) {
-    bool validTime = time >= 0 && time < NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1;
-
-    if (validTime) {
-      sample_0 = convert_float2((*samples)[first_station + 0][subband][time][pol]);
-      sample_1 = convert_float2((*samples)[first_station + 1][subband][time][pol]);
-      sample_2 = convert_float2((*samples)[first_station + 2][subband][time][pol]);
-      sample_3 = convert_float2((*samples)[first_station + 3][subband][time][pol]);
-      sample_4 = convert_float2((*samples)[first_station + 4][subband][time][pol]);
-      sample_5 = convert_float2((*samples)[first_station + 5][subband][time][pol]);
-    }
-
-
-#if !defined USE_WARP_SHUFFLE_INSN
-    barrier(CLK_LOCAL_MEM_FENCE);
-#endif
-
-    if (validTime) {
-#if !defined USE_WARP_SHUFFLE_INSN
-      sum_0 = local_sums[0][station_group][tab_group][pol];
-      sum_1 = local_sums[1][station_group][tab_group][pol];
-      sum_2 = local_sums[2][station_group][tab_group][pol];
-#else
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_0.x) : "0" (sum_0.x));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_0.y) : "0" (sum_0.y));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_0.z) : "0" (sum_0.z));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_0.w) : "0" (sum_0.w));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_1.x) : "0" (sum_1.x));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_1.y) : "0" (sum_1.y));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_1.z) : "0" (sum_1.z));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_1.w) : "0" (sum_1.w));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_2.x) : "0" (sum_2.x));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_2.y) : "0" (sum_2.y));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_2.z) : "0" (sum_2.z));
-      asm ("shfl.up.b32 %0, %0, 1, 0x00;" : "=r" (sum_2.w) : "0" (sum_2.w));
-#endif
-
-      sum_0 += weight_0_0.xx * sample_0;
-      sum_1 += weight_0_1.xx * sample_0;
-      sum_2 += weight_0_2.xx * sample_0;
-      float2 sample_0_tr = (float2) (-sample_0.y, sample_0.x);
-      sum_0 += weight_0_0.yy * sample_0_tr;
-      sum_1 += weight_0_1.yy * sample_0_tr;
-      sum_2 += weight_0_2.yy * sample_0_tr;
-
-      sum_0 += weight_1_0.xx * sample_1;
-      sum_1 += weight_1_1.xx * sample_1;
-      sum_2 += weight_1_2.xx * sample_1;
-      float2 sample_1_tr = (float2) (-sample_1.y, sample_1.x);
-      sum_0 += weight_1_0.yy * sample_1_tr;
-      sum_1 += weight_1_1.yy * sample_1_tr;
-      sum_2 += weight_1_2.yy * sample_1_tr;
-
-      sum_0 += weight_2_0.xx * sample_2;
-      sum_1 += weight_2_1.xx * sample_2;
-      sum_2 += weight_2_2.xx * sample_2;
-      float2 sample_2_tr = (float2) (-sample_2.y, sample_2.x);
-      sum_0 += weight_2_0.yy * sample_2_tr;
-      sum_1 += weight_2_1.yy * sample_2_tr;
-      sum_2 += weight_2_2.yy * sample_2_tr;
-
-      sum_0 += weight_3_0.xx * sample_3;
-      sum_1 += weight_3_1.xx * sample_3;
-      sum_2 += weight_3_2.xx * sample_3;
-      float2 sample_3_tr = (float2) (-sample_3.y, sample_3.x);
-      sum_0 += weight_3_0.yy * sample_3_tr;
-      sum_1 += weight_3_1.yy * sample_3_tr;
-      sum_2 += weight_3_2.yy * sample_3_tr;
-
-      sum_0 += weight_4_0.xx * sample_4;
-      sum_1 += weight_4_1.xx * sample_4;
-      sum_2 += weight_4_2.xx * sample_4;
-      float2 sample_4_tr = (float2) (-sample_4.y, sample_4.x);
-      sum_0 += weight_4_0.yy * sample_4_tr;
-      sum_1 += weight_4_1.yy * sample_4_tr;
-      sum_2 += weight_4_2.yy * sample_4_tr;
-
-      sum_0 += weight_5_0.xx * sample_5;
-      sum_1 += weight_5_1.xx * sample_5;
-      sum_2 += weight_5_2.xx * sample_5;
-      float2 sample_5_tr = (float2) (-sample_5.y, sample_5.x);
-      sum_0 += weight_5_0.yy * sample_5_tr;
-      sum_1 += weight_5_1.yy * sample_5_tr;
-      sum_2 += weight_5_2.yy * sample_5_tr;
-#if !defined USE_WARP_SHUFFLE_INSN
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (validTime) {
-#endif
-      if (lastGroupOfStations) {
-        (*complexVoltages)[subband][time][first_tab + 0][pol] = sum_0;
-        (*complexVoltages)[subband][time][first_tab + 1][pol] = sum_1;
-        (*complexVoltages)[subband][time][first_tab + 2][pol] = sum_2;
-#if !defined USE_WARP_SHUFFLE_INSN
-      } else {
-        local_sums[0][station_group + 1][tab_group][pol] = sum_0;
-        local_sums[1][station_group + 1][tab_group][pol] = sum_1;
-        local_sums[2][station_group + 1][tab_group][pol] = sum_2;
-#endif
-      }
-    }
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.not b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.not
deleted file mode 100644
index 30fe130f42810ba63b0a7da8fe605d8a9f921d3d..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.not
+++ /dev/null
@@ -1,451 +0,0 @@
-#if NR_BITS_PER_SAMPLE == 8
-typedef char2 SampleType;
-#else
-typedef short2 SampleType;
-#endif
-
-#if NR_STATIONS > 48
-#error unsupported number of stations (max = 48)
-#endif
-
-
-typedef __global float2 (*ComplexVoltagesType)[NR_SUBBANDS][NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1][NR_TABS][NR_POLARIZATIONS];
-typedef __global SampleType (*SamplesType)[NR_STATIONS][NR_SUBBANDS][NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1][NR_POLARIZATIONS];
-typedef __global float (*WeightsType)[NR_STATIONS][NR_SUBBANDS][NR_TABS][2];
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *samplesPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  SamplesType samples = (SamplesType) samplesPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint ri = get_local_id(0) & 1;
-  uint pol = get_local_id(0) >> 1;
-  uint tab = get_local_id(1);
-  uint subband = get_global_id(2);
-
-  float2 sample;
-  __local float2 local_samples[NR_STATIONS][8][NR_POLARIZATIONS];
-#if 0
-  __local float2 local_tmp[NR_TABS][NR_POLARIZATIONS];
-#endif
-
-#if NR_STATIONS >= 1
-  float weight_00 = (*weights)[ 0][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 2
-  float weight_01 = (*weights)[ 1][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 3
-  float weight_02 = (*weights)[ 2][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 4
-  float weight_03 = (*weights)[ 3][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 5
-  float weight_04 = (*weights)[ 4][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 6
-  float weight_05 = (*weights)[ 5][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 7
-  float weight_06 = (*weights)[ 6][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 8
-  float weight_07 = (*weights)[ 7][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 9
-  float weight_08 = (*weights)[ 8][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 10
-  float weight_09 = (*weights)[ 9][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 11
-  float weight_10 = (*weights)[10][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 12
-  float weight_11 = (*weights)[11][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 13
-  float weight_12 = (*weights)[12][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 14
-  float weight_13 = (*weights)[13][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 15
-  float weight_14 = (*weights)[14][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 16
-  float weight_15 = (*weights)[15][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 17
-  float weight_16 = (*weights)[16][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 18
-  float weight_17 = (*weights)[17][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 19
-  float weight_18 = (*weights)[18][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 20
-  float weight_19 = (*weights)[19][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 21
-  float weight_20 = (*weights)[20][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 22
-  float weight_21 = (*weights)[21][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 23
-  float weight_22 = (*weights)[22][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 24
-  float weight_23 = (*weights)[23][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 25
-  float weight_24 = (*weights)[24][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 26
-  float weight_25 = (*weights)[25][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 27
-  float weight_26 = (*weights)[26][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 28
-  float weight_27 = (*weights)[27][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 29
-  float weight_28 = (*weights)[28][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 30
-  float weight_29 = (*weights)[29][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 31
-  float weight_30 = (*weights)[30][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 32
-  float weight_31 = (*weights)[31][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 33
-  float weight_32 = (*weights)[32][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 34
-  float weight_33 = (*weights)[33][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 35
-  float weight_34 = (*weights)[34][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 36
-  float weight_35 = (*weights)[35][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 37
-  float weight_36 = (*weights)[36][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 38
-  float weight_37 = (*weights)[37][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 39
-  float weight_38 = (*weights)[38][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 40
-  float weight_39 = (*weights)[39][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 41
-  float weight_40 = (*weights)[40][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 42
-  float weight_41 = (*weights)[41][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 43
-  float weight_42 = (*weights)[42][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 44
-  float weight_43 = (*weights)[43][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 45
-  float weight_44 = (*weights)[44][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 46
-  float weight_45 = (*weights)[45][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 47
-  float weight_46 = (*weights)[46][subband][tab][ri];
-#endif
-#if NR_STATIONS >= 48
-  float weight_47 = (*weights)[47][subband][tab][ri];
-#endif
-
-  for (uint time = 0; time < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1; time += 8) {
-    for (uint i = get_local_id(0) + NR_POLARIZATIONS * 2 * get_local_id(1); i < NR_STATIONS * 8 * NR_POLARIZATIONS; i += NR_TABS * NR_POLARIZATIONS * 2) {
-      uint p = i % NR_POLARIZATIONS;
-      uint t = (i / NR_POLARIZATIONS) % 8;
-      uint s = i / NR_POLARIZATIONS / 8;
-
-      if (time + t < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1)
-        local_samples[0][0][i] = convert_float2((*samples)[s][subband][time + t][p]);
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    for (uint t = 0; t < min(8U, (NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1 - time)); t++) {
-      float2 sum = 0;
-
-#if NR_STATIONS >= 1
-      sample = local_samples[ 0][t][pol];
-      sum += weight_00 * sample;
-#endif
-
-#if NR_STATIONS >= 2
-      sample = local_samples[ 1][t][pol];
-      sum += weight_01 * sample;
-#endif
-
-#if NR_STATIONS >= 3
-      sample = local_samples[ 2][t][pol];
-      sum += weight_02 * sample;
-#endif
-
-#if NR_STATIONS >= 4
-      sample = local_samples[ 3][t][pol];
-      sum += weight_03 * sample;
-#endif
-
-#if NR_STATIONS >= 5
-      sample = local_samples[ 4][t][pol];
-      sum += weight_04 * sample;
-#endif
-
-#if NR_STATIONS >= 6
-      sample = local_samples[ 5][t][pol];
-      sum += weight_05 * sample;
-#endif
-
-#if NR_STATIONS >= 7
-      sample = local_samples[ 6][t][pol];
-      sum += weight_06 * sample;
-#endif
-
-#if NR_STATIONS >= 8
-      sample = local_samples[ 7][t][pol];
-      sum += weight_07 * sample;
-#endif
-
-#if NR_STATIONS >= 9
-      sample = local_samples[ 8][t][pol];
-      sum += weight_08 * sample;
-#endif
-
-#if NR_STATIONS >= 10
-      sample = local_samples[ 9][t][pol];
-      sum += weight_09 * sample;
-#endif
-
-#if NR_STATIONS >= 11
-      sample = local_samples[10][t][pol];
-      sum += weight_10 * sample;
-#endif
-
-#if NR_STATIONS >= 12
-      sample = local_samples[11][t][pol];
-      sum += weight_11 * sample;
-#endif
-
-#if NR_STATIONS >= 13
-      sample = local_samples[12][t][pol];
-      sum += weight_12 * sample;
-#endif
-
-#if NR_STATIONS >= 14
-      sample = local_samples[13][t][pol];
-      sum += weight_13 * sample;
-#endif
-
-#if NR_STATIONS >= 15
-      sample = local_samples[14][t][pol];
-      sum += weight_14 * sample;
-#endif
-
-#if NR_STATIONS >= 16
-      sample = local_samples[15][t][pol];
-      sum += weight_15 * sample;
-#endif
-
-#if NR_STATIONS >= 17
-      sample = local_samples[16][t][pol];
-      sum += weight_16 * sample;
-#endif
-
-#if NR_STATIONS >= 18
-      sample = local_samples[17][t][pol];
-      sum += weight_17 * sample;
-#endif
-
-#if NR_STATIONS >= 19
-      sample = local_samples[18][t][pol];
-      sum += weight_18 * sample;
-#endif
-
-#if NR_STATIONS >= 20
-      sample = local_samples[19][t][pol];
-      sum += weight_19 * sample;
-#endif
-
-#if NR_STATIONS >= 21
-      sample = local_samples[20][t][pol];
-      sum += weight_20 * sample;
-#endif
-
-#if NR_STATIONS >= 22
-      sample = local_samples[21][t][pol];
-      sum += weight_21 * sample;
-#endif
-
-#if NR_STATIONS >= 23
-      sample = local_samples[22][t][pol];
-      sum += weight_22 * sample;
-#endif
-
-#if NR_STATIONS >= 24
-      sample = local_samples[23][t][pol];
-      sum += weight_23 * sample;
-#endif
-
-#if NR_STATIONS >= 25
-      sample = local_samples[24][t][pol];
-      sum += weight_24 * sample;
-#endif
-
-#if NR_STATIONS >= 26
-      sample = local_samples[25][t][pol];
-      sum += weight_25 * sample;
-#endif
-
-#if NR_STATIONS >= 27
-      sample = local_samples[26][t][pol];
-      sum += weight_26 * sample;
-#endif
-
-#if NR_STATIONS >= 28
-      sample = local_samples[27][t][pol];
-      sum += weight_27 * sample;
-#endif
-
-#if NR_STATIONS >= 29
-      sample = local_samples[28][t][pol];
-      sum += weight_28 * sample;
-#endif
-
-#if NR_STATIONS >= 30
-      sample = local_samples[29][t][pol];
-      sum += weight_29 * sample;
-#endif
-
-#if NR_STATIONS >= 31
-      sample = local_samples[30][t][pol];
-      sum += weight_30 * sample;
-#endif
-
-#if NR_STATIONS >= 32
-      sample = local_samples[31][t][pol];
-      sum += weight_31 * sample;
-#endif
-
-#if NR_STATIONS >= 33
-      sample = local_samples[32][t][pol];
-      sum += weight_32 * sample;
-#endif
-
-#if NR_STATIONS >= 34
-      sample = local_samples[33][t][pol];
-      sum += weight_33 * sample;
-#endif
-
-#if NR_STATIONS >= 35
-      sample = local_samples[34][t][pol];
-      sum += weight_34 * sample;
-#endif
-
-#if NR_STATIONS >= 36
-      sample = local_samples[35][t][pol];
-      sum += weight_35 * sample;
-#endif
-
-#if NR_STATIONS >= 37
-      sample = local_samples[36][t][pol];
-      sum += weight_36 * sample;
-#endif
-
-#if NR_STATIONS >= 38
-      sample = local_samples[37][t][pol];
-      sum += weight_37 * sample;
-#endif
-
-#if NR_STATIONS >= 39
-      sample = local_samples[38][t][pol];
-      sum += weight_38 * sample;
-#endif
-
-#if NR_STATIONS >= 40
-      sample = local_samples[39][t][pol];
-      sum += weight_39 * sample;
-#endif
-
-#if NR_STATIONS >= 41
-      sample = local_samples[40][t][pol];
-      sum += weight_40 * sample;
-#endif
-
-#if NR_STATIONS >= 42
-      sample = local_samples[41][t][pol];
-      sum += weight_41 * sample;
-#endif
-
-#if NR_STATIONS >= 43
-      sample = local_samples[42][t][pol];
-      sum += weight_42 * sample;
-#endif
-
-#if NR_STATIONS >= 44
-      sample = local_samples[43][t][pol];
-      sum += weight_43 * sample;
-#endif
-
-#if NR_STATIONS >= 45
-      sample = local_samples[44][t][pol];
-      sum += weight_44 * sample;
-#endif
-
-#if NR_STATIONS >= 46
-      sample = local_samples[45][t][pol];
-      sum += weight_45 * sample;
-#endif
-
-#if NR_STATIONS >= 47
-      sum += weight_46 * local_samples[46][t][pol];
-#endif
-
-#if NR_STATIONS >= 48
-      sum += weight_47 * local_samples[47][t][pol];
-#endif
-
-#if 0
-      if (ri != 0)
-        local_tmp[tab][pol] = (float2) (-sum.y, sum.x);
-
-      if (ri == 0)
-        (*complexVoltages)[subband][time + t][tab][pol] = sum + local_tmp[tab][pol];
-#else
-      float2 other_sum;
-      asm ("shfl.down.b32 %0, %1, 1, 0x1F;" : "=r" (other_sum.x) : "r" (sum.x));
-      asm ("shfl.down.b32 %0, %1, 1, 0x1F;" : "=r" (other_sum.y) : "r" (sum.y));
-      if (ri == 0)
-        (*complexVoltages)[subband][time + t][tab][pol] = sum + (float2) (-other_sum.y, other_sum.x);
-#endif
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.ok b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.ok
deleted file mode 100644
index 74e67c0abc55c053ac68fa1b574d61d8d6d6ebc6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/BeamFormer.cl.ok
+++ /dev/null
@@ -1,509 +0,0 @@
-#if NR_BITS_PER_SAMPLE == 8
-typedef char2 SampleType;
-#else
-typedef short2 SampleType;
-#endif
-
-#if NR_STATIONS > 48
-#error unsupported number of stations (max = 48)
-#endif
-
-
-typedef __global float2 (*ComplexVoltagesType)[NR_SUBBANDS][NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1][NR_TABS][NR_POLARIZATIONS];
-typedef __global SampleType (*SamplesType)[NR_STATIONS][NR_SUBBANDS][NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1][NR_POLARIZATIONS];
-typedef __global float2 (*WeightsType)[NR_STATIONS][NR_SUBBANDS][NR_TABS];
-
-
-__kernel void complexVoltages(__global void *complexVoltagesPtr,
-                              __global const void *samplesPtr,
-                              __global const void *weightsPtr)
-{
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-  SamplesType samples = (SamplesType) samplesPtr;
-  WeightsType weights = (WeightsType) weightsPtr;
-
-  uint pol = get_local_id(0);
-  uint tab = get_local_id(1);
-  uint subband = get_global_id(2);
-
-  float2 sample;
-  __local float2 local_samples[NR_STATIONS >= 24 ? 24 : NR_STATIONS][16][NR_POLARIZATIONS];
-
-#if NR_STATIONS >= 1
-  float2 weight_00 = (*weights)[ 0][subband][tab];
-#endif
-#if NR_STATIONS >= 2
-  float2 weight_01 = (*weights)[ 1][subband][tab];
-#endif
-#if NR_STATIONS >= 3
-  float2 weight_02 = (*weights)[ 2][subband][tab];
-#endif
-#if NR_STATIONS >= 4
-  float2 weight_03 = (*weights)[ 3][subband][tab];
-#endif
-#if NR_STATIONS >= 5
-  float2 weight_04 = (*weights)[ 4][subband][tab];
-#endif
-#if NR_STATIONS >= 6
-  float2 weight_05 = (*weights)[ 5][subband][tab];
-#endif
-#if NR_STATIONS >= 7
-  float2 weight_06 = (*weights)[ 6][subband][tab];
-#endif
-#if NR_STATIONS >= 8
-  float2 weight_07 = (*weights)[ 7][subband][tab];
-#endif
-#if NR_STATIONS >= 9
-  float2 weight_08 = (*weights)[ 8][subband][tab];
-#endif
-#if NR_STATIONS >= 10
-  float2 weight_09 = (*weights)[ 9][subband][tab];
-#endif
-#if NR_STATIONS >= 11
-  float2 weight_10 = (*weights)[10][subband][tab];
-#endif
-#if NR_STATIONS >= 12
-  float2 weight_11 = (*weights)[11][subband][tab];
-#endif
-#if NR_STATIONS >= 13
-  float2 weight_12 = (*weights)[12][subband][tab];
-#endif
-#if NR_STATIONS >= 14
-  float2 weight_13 = (*weights)[13][subband][tab];
-#endif
-#if NR_STATIONS >= 15
-  float2 weight_14 = (*weights)[14][subband][tab];
-#endif
-#if NR_STATIONS >= 16
-  float2 weight_15 = (*weights)[15][subband][tab];
-#endif
-#if NR_STATIONS >= 17
-  float2 weight_16 = (*weights)[16][subband][tab];
-#endif
-#if NR_STATIONS >= 18
-  float2 weight_17 = (*weights)[17][subband][tab];
-#endif
-#if NR_STATIONS >= 19
-  float2 weight_18 = (*weights)[18][subband][tab];
-#endif
-#if NR_STATIONS >= 20
-  float2 weight_19 = (*weights)[19][subband][tab];
-#endif
-#if NR_STATIONS >= 21
-  float2 weight_20 = (*weights)[20][subband][tab];
-#endif
-#if NR_STATIONS >= 22
-  float2 weight_21 = (*weights)[21][subband][tab];
-#endif
-#if NR_STATIONS >= 23
-  float2 weight_22 = (*weights)[22][subband][tab];
-#endif
-#if NR_STATIONS >= 24
-  float2 weight_23 = (*weights)[23][subband][tab];
-#endif
-
-  for (uint time = 0; time < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1; time += 16) {
-    for (uint i = get_local_id(0) + NR_POLARIZATIONS * get_local_id(1); i < (NR_STATIONS >= 24 ? 24 : NR_STATIONS) * 16 * NR_POLARIZATIONS; i += NR_TABS * NR_POLARIZATIONS) {
-      uint p = i % NR_POLARIZATIONS;
-      uint t = (i / NR_POLARIZATIONS) % 16;
-      uint s = i / NR_POLARIZATIONS / 16;
-
-      if (time + t < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1)
-        local_samples[0][0][i] = convert_float2((*samples)[s][subband][time + t][p]);
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    for (uint t = 0; t < min(16U, (NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1 - time)); t++) {
-      float2 sum = 0;
-
-#if NR_STATIONS >= 1
-      sample = local_samples[ 0][t][pol];
-      sum += weight_00.xx * sample;
-      sum += weight_00.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 2
-      sample = local_samples[ 1][t][pol];
-      sum += weight_01.xx * sample;
-      sum += weight_01.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 3
-      sample = local_samples[ 2][t][pol];
-      sum += weight_02.xx * sample;
-      sum += weight_02.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 4
-      sample = local_samples[ 3][t][pol];
-      sum += weight_03.xx * sample;
-      sum += weight_03.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 5
-      sample = local_samples[ 4][t][pol];
-      sum += weight_04.xx * sample;
-      sum += weight_04.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 6
-      sample = local_samples[ 5][t][pol];
-      sum += weight_05.xx * sample;
-      sum += weight_05.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 7
-      sample = local_samples[ 6][t][pol];
-      sum += weight_06.xx * sample;
-      sum += weight_06.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 8
-      sample = local_samples[ 7][t][pol];
-      sum += weight_07.xx * sample;
-      sum += weight_07.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 9
-      sample = local_samples[ 8][t][pol];
-      sum += weight_08.xx * sample;
-      sum += weight_08.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 10
-      sample = local_samples[ 9][t][pol];
-      sum += weight_09.xx * sample;
-      sum += weight_09.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 11
-      sample = local_samples[10][t][pol];
-      sum += weight_10.xx * sample;
-      sum += weight_10.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 12
-      sample = local_samples[11][t][pol];
-      sum += weight_11.xx * sample;
-      sum += weight_11.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 13
-      sample = local_samples[12][t][pol];
-      sum += weight_12.xx * sample;
-      sum += weight_12.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 14
-      sample = local_samples[13][t][pol];
-      sum += weight_13.xx * sample;
-      sum += weight_13.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 15
-      sample = local_samples[14][t][pol];
-      sum += weight_14.xx * sample;
-      sum += weight_14.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 16
-      sample = local_samples[15][t][pol];
-      sum += weight_15.xx * sample;
-      sum += weight_15.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 17
-      sample = local_samples[16][t][pol];
-      sum += weight_16.xx * sample;
-      sum += weight_16.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 18
-      sample = local_samples[17][t][pol];
-      sum += weight_17.xx * sample;
-      sum += weight_17.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 19
-      sample = local_samples[18][t][pol];
-      sum += weight_18.xx * sample;
-      sum += weight_18.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 20
-      sample = local_samples[19][t][pol];
-      sum += weight_19.xx * sample;
-      sum += weight_19.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 21
-      sample = local_samples[20][t][pol];
-      sum += weight_20.xx * sample;
-      sum += weight_20.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 22
-      sample = local_samples[21][t][pol];
-      sum += weight_21.xx * sample;
-      sum += weight_21.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 23
-      sample = local_samples[22][t][pol];
-      sum += weight_22.xx * sample;
-      sum += weight_22.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 24
-      sample = local_samples[23][t][pol];
-      sum += weight_23.xx * sample;
-      sum += weight_23.yy * (float2) (-sample.y, sample.x);
-#endif
-
-      (*complexVoltages)[subband][time + t][tab][pol] = sum;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-#if NR_STATIONS > 24
-#if NR_STATIONS >= 25
-  float2 weight_24 = (*weights)[24][subband][tab];
-#endif
-#if NR_STATIONS >= 26
-  float2 weight_25 = (*weights)[25][subband][tab];
-#endif
-#if NR_STATIONS >= 27
-  float2 weight_26 = (*weights)[26][subband][tab];
-#endif
-#if NR_STATIONS >= 28
-  float2 weight_27 = (*weights)[27][subband][tab];
-#endif
-#if NR_STATIONS >= 29
-  float2 weight_28 = (*weights)[28][subband][tab];
-#endif
-#if NR_STATIONS >= 30
-  float2 weight_29 = (*weights)[29][subband][tab];
-#endif
-#if NR_STATIONS >= 31
-  float2 weight_30 = (*weights)[30][subband][tab];
-#endif
-#if NR_STATIONS >= 32
-  float2 weight_31 = (*weights)[31][subband][tab];
-#endif
-#if NR_STATIONS >= 33
-  float2 weight_32 = (*weights)[32][subband][tab];
-#endif
-#if NR_STATIONS >= 34
-  float2 weight_33 = (*weights)[33][subband][tab];
-#endif
-#if NR_STATIONS >= 35
-  float2 weight_34 = (*weights)[34][subband][tab];
-#endif
-#if NR_STATIONS >= 36
-  float2 weight_35 = (*weights)[35][subband][tab];
-#endif
-#if NR_STATIONS >= 37
-  float2 weight_36 = (*weights)[36][subband][tab];
-#endif
-#if NR_STATIONS >= 38
-  float2 weight_37 = (*weights)[37][subband][tab];
-#endif
-#if NR_STATIONS >= 39
-  float2 weight_38 = (*weights)[38][subband][tab];
-#endif
-#if NR_STATIONS >= 40
-  float2 weight_39 = (*weights)[39][subband][tab];
-#endif
-#if NR_STATIONS >= 41
-  float2 weight_40 = (*weights)[40][subband][tab];
-#endif
-#if NR_STATIONS >= 42
-  float2 weight_41 = (*weights)[41][subband][tab];
-#endif
-#if NR_STATIONS >= 43
-  float2 weight_42 = (*weights)[42][subband][tab];
-#endif
-#if NR_STATIONS >= 44
-  float2 weight_43 = (*weights)[43][subband][tab];
-#endif
-#if NR_STATIONS >= 45
-  float2 weight_44 = (*weights)[44][subband][tab];
-#endif
-#if NR_STATIONS >= 46
-  float2 weight_45 = (*weights)[45][subband][tab];
-#endif
-#if NR_STATIONS >= 47
-  float2 weight_46 = (*weights)[46][subband][tab];
-#endif
-#if NR_STATIONS >= 48
-  float2 weight_47 = (*weights)[47][subband][tab];
-#endif
-
-  for (uint time = 0; time < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1; time += 16) {
-    for (uint i = get_local_id(0) + NR_POLARIZATIONS * get_local_id(1); i < (NR_STATIONS - 24) * 16 * NR_POLARIZATIONS; i += NR_TABS * NR_POLARIZATIONS) {
-      uint p = i % NR_POLARIZATIONS;
-      uint t = (i / NR_POLARIZATIONS) % 16;
-      uint s = i / NR_POLARIZATIONS / 16;
-
-      if (time + t < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1)
-        local_samples[0][0][i] = convert_float2((*samples)[24 + s][subband][time + t][p]);
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    for (uint t = 0; t < min(16U, (NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1 - time)); t++) {
-      float2 sum = (*complexVoltages)[subband][time + t][tab][pol];
-
-#if NR_STATIONS >= 25
-      sample = local_samples[ 0][t][pol];
-      sum += weight_24.xx * sample;
-      sum += weight_24.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 26
-      sample = local_samples[ 1][t][pol];
-      sum += weight_25.xx * sample;
-      sum += weight_25.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 27
-      sample = local_samples[ 2][t][pol];
-      sum += weight_26.xx * sample;
-      sum += weight_26.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 28
-      sample = local_samples[ 3][t][pol];
-      sum += weight_27.xx * sample;
-      sum += weight_27.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 29
-      sample = local_samples[ 4][t][pol];
-      sum += weight_28.xx * sample;
-      sum += weight_28.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 30
-      sample = local_samples[ 5][t][pol];
-      sum += weight_29.xx * sample;
-      sum += weight_29.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 31
-      sample = local_samples[ 6][t][pol];
-      sum += weight_30.xx * sample;
-      sum += weight_30.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 32
-      sample = local_samples[ 7][t][pol];
-      sum += weight_31.xx * sample;
-      sum += weight_31.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 33
-      sample = local_samples[ 8][t][pol];
-      sum += weight_32.xx * sample;
-      sum += weight_32.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 34
-      sample = local_samples[ 9][t][pol];
-      sum += weight_33.xx * sample;
-      sum += weight_33.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 35
-      sample = local_samples[10][t][pol];
-      sum += weight_34.xx * sample;
-      sum += weight_34.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 36
-      sample = local_samples[11][t][pol];
-      sum += weight_35.xx * sample;
-      sum += weight_35.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 37
-      sample = local_samples[12][t][pol];
-      sum += weight_36.xx * sample;
-      sum += weight_36.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 38
-      sample = local_samples[13][t][pol];
-      sum += weight_37.xx * sample;
-      sum += weight_37.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 39
-      sample = local_samples[14][t][pol];
-      sum += weight_38.xx * sample;
-      sum += weight_38.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 40
-      sample = local_samples[15][t][pol];
-      sum += weight_39.xx * sample;
-      sum += weight_39.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 41
-      sample = local_samples[16][t][pol];
-      sum += weight_40.xx * sample;
-      sum += weight_40.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 42
-      sample = local_samples[17][t][pol];
-      sum += weight_41.xx * sample;
-      sum += weight_41.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 43
-      sample = local_samples[18][t][pol];
-      sum += weight_42.xx * sample;
-      sum += weight_42.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 44
-      sample = local_samples[19][t][pol];
-      sum += weight_43.xx * sample;
-      sum += weight_19.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 45
-      sample = local_samples[20][t][pol];
-      sum += weight_44.xx * sample;
-      sum += weight_44.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 46
-      sample = local_samples[21][t][pol];
-      sum += weight_45.xx * sample;
-      sum += weight_45.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 47
-      sample = local_samples[22][t][pol];
-      sum += weight_46.xx * sample;
-      sum += weight_46.yy * (float2) (-sample.y, sample.x);
-#endif
-
-#if NR_STATIONS >= 48
-      sample = local_samples[23][t][pol];
-      sum += weight_47.xx * sample;
-      sum += weight_47.yy * (float2) (-sample.y, sample.x);
-#endif
-
-      (*complexVoltages)[subband][time + t][tab][pol] = sum;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-#endif
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvFFT.cl b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvFFT.cl
deleted file mode 100644
index ec9554deb1ef351acafbad9618524655ace91204..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvFFT.cl
+++ /dev/null
@@ -1,314 +0,0 @@
-//# InvFFT.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include "math.cl"
-
-
-typedef __global float (*InvFFTedDataType)[NR_TABS][NR_POLARIZATIONS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1][1024];
-typedef __global float2 (*TransposedDataType)[NR_TABS][NR_POLARIZATIONS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1][512];
-
-
-float2 inv(float2 a)
-{
-  return (float2) (-a.y, a.x);
-}
-
-
-void inv4(float2 *R0, float2 *R1, float2 *R2, float2 *R3)
-{
-  float2 T0, T1, T2, T3;
-
-  T1 = (*R1);
-  (*R1) = (*R2);
-  (*R2) = T1;
-
-  T0 = (*R0), T1 = (*R1), (*R0) = T0 + T1, (*R1) = T0 - T1;
-  T2 = (*R2), T3 = (*R3), (*R2) = T2 + T3, (*R3) = T2 - T3;
-
-  T0 = (*R0), T2 = (*R2), (*R0) = T0 + T2, (*R2) = T0 - T2;
-  T1 = (*R1), T3 = inv(*R3), (*R1) = T1 + T3, (*R3) = T1 - T3;
-}
-
-
-void inv8(float2 *R0, float2 *R1, float2 *R2, float2 *R3, float2 *R4, float2 *R5, float2 *R6, float2 *R7)
-{
-  const float HSQR2 = .70710678118654752440f;
-  float2 T0, T1, T2, T3, T4, T5, T6, T7;
-
-  T1 = (*R1);
-  (*R1) = (*R4);
-  (*R4) = T1;
-  T3 = (*R3);
-  (*R3) = (*R6);
-  (*R6) = T3;
-
-  T0 = (*R0), T1 = (*R1), (*R0) = T0 + T1, (*R1) = T0 - T1;
-  T2 = (*R2), T3 = (*R3), (*R2) = T2 + T3, (*R3) = T2 - T3;
-  T4 = (*R4), T5 = (*R5), (*R4) = T4 + T5, (*R5) = T4 - T5;
-  T6 = (*R6), T7 = (*R7), (*R6) = T6 + T7, (*R7) = T6 - T7;
-
-  T0 = (*R0), T2 = (*R2), (*R0) = T0 + T2, (*R2) = T0 - T2;
-  T1 = (*R1), T3 = inv(*R3), (*R1) = T1 + T3, (*R3) = T1 - T3;
-  T4 = (*R4), T6 = (*R6), (*R4) = T4 + T6, (*R6) = T4 - T6;
-  T5 = (*R5), T7 = inv(*R7), (*R5) = T5 + T7, (*R7) = T5 - T7;
-
-  T0 = (*R0), T4 = (*R4), (*R0) = T0 + T4, (*R4) = T0 - T4;
-  T1 = (*R1), T5 = HSQR2 * (inv(*R5) + (*R5)), (*R1) = T1 + T5, (*R5) = T1 - T5;
-  T2 = (*R2), T6 = inv(*R6), (*R2) = T2 + T6, (*R6) = T2 - T6;
-  T3 = (*R3), T7 = HSQR2 * (inv(*R7) - (*R7)), (*R3) = T3 + T7, (*R7) = T3 - T7;
-}
-
-
-__kernel __attribute__((reqd_work_group_size(128, 1, 1)))
-void inv_fft(__global float2 *outputPtr, __global const float *inputPtr)
-{
-  InvFFTedDataType invFFTedData = (InvFFTedDataType) outputPtr;
-  TransposedDataType transposedData = (TransposedDataType) inputPtr;
-
-  const float PI = 3.14159265358979323844f;
-
-  __local union {
-    float f1[1024];
-    float2 f2[512];
-    float4 f4[256];
-    float8 f8[128];
-  } lds;
-
-  uint windex;
-  float ang;
-  float2 R0, R1, R2, R3, R4, R5, R6, R7;
-  float2 W0, W1, W2, W3;
-
-#if 0
-  __global float2 *bufIn = inputPtr + get_global_id(1) * 512;
-  __global float *bufOut = outputPtr + get_global_id(1) * 1024;
-
-  R0 = bufIn[get_local_id(0) + 0];
-  R1 = bufIn[get_local_id(0) + 128];
-  R2 = bufIn[get_local_id(0) + 256];
-  R3 = bufIn[get_local_id(0) + 384];
-#else
-  R0 = (*transposedData)[0][0][get_global_id(1)][get_local_id(0) + 0];
-  R1 = (*transposedData)[0][0][get_global_id(1)][get_local_id(0) + 128];
-  R2 = (*transposedData)[0][0][get_global_id(1)][get_local_id(0) + 256];
-  R3 = (*transposedData)[0][0][get_global_id(1)][get_local_id(0) + 384];
-#endif
-
-  lds.f2[get_local_id(0) + 0] = R0;
-  lds.f2[get_local_id(0) + 128] = R1;
-  lds.f2[get_local_id(0) + 256] = R2;
-  lds.f2[get_local_id(0) + 384] = R3;
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  if (get_local_id(0) == 0) {
-    R4 = (float2) (R0.y, 0);
-    R0 = (float2) (R0.x, 0);
-    //R4 = (float2) (bufIn[512].x, 0);
-  } else {
-    R4 = lds.f2[512 - get_local_id(0)];
-  }
-
-  R5 = lds.f2[384 - get_local_id(0)];
-  R6 = lds.f2[256 - get_local_id(0)];
-  R7 = lds.f2[128 - get_local_id(0)];
-  R4.y = -R4.y;
-  R5.y = -R5.y;
-  R6.y = -R6.y;
-  R7.y = -R7.y;
-
-  inv8(&R0, &R1, &R2, &R3, &R4, &R5, &R6, &R7);
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  lds.f8[get_local_id(0)] = (float8) (R0.x, R1.x, R2.x, R3.x, R4.x, R5.x, R6.x, R7.x);
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  R0.x = lds.f1[get_local_id(0) + 0];
-  R1.x = lds.f1[get_local_id(0) + 128];
-  R2.x = lds.f1[get_local_id(0) + 256];
-  R3.x = lds.f1[get_local_id(0) + 384];
-  R4.x = lds.f1[get_local_id(0) + 512];
-  R5.x = lds.f1[get_local_id(0) + 640];
-  R6.x = lds.f1[get_local_id(0) + 768];
-  R7.x = lds.f1[get_local_id(0) + 896];
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  lds.f8[get_local_id(0)] = (float8) (R0.y, R1.y, R2.y, R3.y, R4.y, R5.y, R6.y, R7.y);
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  R0.y = lds.f1[get_local_id(0) + 0];
-  R1.y = lds.f1[get_local_id(0) + 128];
-  R2.y = lds.f1[get_local_id(0) + 256];
-  R3.y = lds.f1[get_local_id(0) + 384];
-  R4.y = lds.f1[get_local_id(0) + 512];
-  R5.y = lds.f1[get_local_id(0) + 640];
-  R6.y = lds.f1[get_local_id(0) + 768];
-  R7.y = lds.f1[get_local_id(0) + 896];
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  ang = 2.0f * PI / 64.0f * (float) (get_local_id(0) % 8);
-  R1 = cmul(cexp(       ang), R1);
-  R2 = cmul(cexp(2.0f * ang), R2);
-  R3 = cmul(cexp(3.0f * ang), R3);
-  R4 = cmul(cexp(4.0f * ang), R4);
-  R5 = cmul(cexp(5.0f * ang), R5);
-  R6 = cmul(cexp(6.0f * ang), R6);
-  R7 = cmul(cexp(7.0f * ang), R7);
-
-  inv8(&R0, &R1, &R2, &R3, &R4, &R5, &R6, &R7);
-
-  windex = 64 * (get_local_id(0) / 8) + get_local_id(0) % 8;
-  lds.f1[windex + 0] = R0.x;
-  lds.f1[windex + 8] = R1.x;
-  lds.f1[windex + 16] = R2.x;
-  lds.f1[windex + 24] = R3.x;
-  lds.f1[windex + 32] = R4.x;
-  lds.f1[windex + 40] = R5.x;
-  lds.f1[windex + 48] = R6.x;
-  lds.f1[windex + 56] = R7.x;
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  W0 = lds.f2[get_local_id(0) + 0];
-  W1 = lds.f2[get_local_id(0) + 128];
-  W2 = lds.f2[get_local_id(0) + 256];
-  W3 = lds.f2[get_local_id(0) + 384];
-  R0.x = W0.x;
-  R1.x = W1.x;
-  R2.x = W2.x;
-  R3.x = W3.x;
-  R4.x = W0.y;
-  R5.x = W1.y;
-  R6.x = W2.y;
-  R7.x = W3.y;
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  lds.f1[windex + 0] = R0.y;
-  lds.f1[windex + 8] = R1.y;
-  lds.f1[windex + 16] = R2.y;
-  lds.f1[windex + 24] = R3.y;
-  lds.f1[windex + 32] = R4.y;
-  lds.f1[windex + 40] = R5.y;
-  lds.f1[windex + 48] = R6.y;
-  lds.f1[windex + 56] = R7.y;
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  W0 = lds.f2[get_local_id(0) + 0];
-  W1 = lds.f2[get_local_id(0) + 128];
-  W2 = lds.f2[get_local_id(0) + 256];
-  W3 = lds.f2[get_local_id(0) + 384];
-  R0.y = W0.x;
-  R1.y = W1.x;
-  R2.y = W2.x;
-  R3.y = W3.x;
-  R4.y = W0.y;
-  R5.y = W1.y;
-  R6.y = W2.y;
-  R7.y = W3.y;
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  ang = 2.0f * PI / 256.0f * (2 * (get_local_id(0) % 32));
-  R1 = cmul(cexp(       ang), R1);
-  R2 = cmul(cexp(2.0f * ang), R2);
-  R3 = cmul(cexp(3.0f * ang), R3);
-  ang += 2.0f * PI / 256.0f;
-  R5 = cmul(cexp(       ang), R5);
-  R6 = cmul(cexp(2.0f * ang), R6);
-  R7 = cmul(cexp(3.0f * ang), R7);
-
-  inv4(&R0, &R1, &R2, &R3);
-  inv4(&R4, &R5, &R6, &R7);
-
-  windex = 128 * (get_local_id(0) / 32) + get_local_id(0) % 32;
-  lds.f2[windex + 0] = (float2) (R0.x, R4.x);
-  lds.f2[windex + 32] = (float2) (R1.x, R5.x);
-  lds.f2[windex + 64] = (float2) (R2.x, R6.x);
-  lds.f2[windex + 96] = (float2) (R3.x, R7.x);
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  W0 = lds.f2[get_local_id(0) + 0];
-  W1 = lds.f2[get_local_id(0) + 128];
-  W2 = lds.f2[get_local_id(0) + 256];
-  W3 = lds.f2[get_local_id(0) + 384];
-  R0.x = W0.x;
-  R1.x = W1.x;
-  R2.x = W2.x;
-  R3.x = W3.x;
-  R4.x = W0.y;
-  R5.x = W1.y;
-  R6.x = W2.y;
-  R7.x = W3.y;
-
-  lds.f2[get_local_id(0) + 0] = (float2) (R0.y, R4.y);
-  lds.f2[get_local_id(0) + 128] = (float2) (R1.y, R5.y);
-  lds.f2[get_local_id(0) + 256] = (float2) (R2.y, R6.y);
-  lds.f2[get_local_id(0) + 384] = (float2) (R3.y, R7.y);
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  W0 = lds.f2[windex + 0];
-  W1 = lds.f2[windex + 32];
-  W2 = lds.f2[windex + 64];
-  W3 = lds.f2[windex + 96];
-  R0.y = W0.x;
-  R1.y = W1.x;
-  R2.y = W2.x;
-  R3.y = W3.x;
-  R4.y = W0.y;
-  R5.y = W1.y;
-  R6.y = W2.y;
-  R7.y = W3.y;
-
-  ang = 2.0f * PI / 1024.0f * (2 * get_local_id(0));
-  R1 = cmul(cexp(       ang), R1);
-  R2 = cmul(cexp(2.0f * ang), R2);
-  R3 = cmul(cexp(3.0f * ang), R3);
-  ang += 2.0f * PI / 1024.0f;
-  R5 = cmul(cexp(       ang), R5);
-  R6 = cmul(cexp(2.0f * ang), R6);
-  R7 = cmul(cexp(3.0f * ang), R7);
-
-  inv4(&R0, &R1, &R2, &R3);
-  inv4(&R4, &R5, &R6, &R7);
-
-#if 0
-  __global float2 *out = (__global float2 *) bufOut;
-  out[get_local_id(0) + 0] = 9.765625e-04f * (float2) (R0.x, R4.x);
-  out[get_local_id(0) + 128] = 9.765625e-04f * (float2) (R1.x, R5.x);
-  out[get_local_id(0) + 256] = 9.765625e-04f * (float2) (R2.x, R6.x);
-  out[get_local_id(0) + 384] = 9.765625e-04f * (float2) (R3.x, R7.x);
-#else
-  __global float2 *out = (__global float2 *) &(*invFFTedData)[0][0][get_global_id(1)][0] + get_local_id(0);
-  //out[  0] = 9.765625e-04f * (float2) (R0.x, R4.x);
-  //out[128] = 9.765625e-04f * (float2) (R1.x, R5.x);
-  //out[256] = 9.765625e-04f * (float2) (R2.x, R6.x);
-  //out[384] = 9.765625e-04f * (float2) (R3.x, R7.x);
-#endif
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvFIR.cl b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvFIR.cl
deleted file mode 100644
index a1333052860d3198ba5ce9b3d1f3d11094610a5a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvFIR.cl
+++ /dev/null
@@ -1,366 +0,0 @@
-//# InvFir.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-typedef __global float (*InvFIRredDataType)[NR_TABS][NR_POLARIZATIONS][NR_SAMPLES_PER_SUBBAND][1024];
-typedef __global float (*InvFFTedDataType)[NR_TABS][NR_POLARIZATIONS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1][1024];
-typedef __global const float16 (*WeightsType)[1024];
-
-
-__kernel void invFIRfilter(__global void *invFIRredDataPtr,
-                           __global const void *invFFTedDataPtr,
-                           __global const void *weightsPtr)
-{
-  InvFIRredDataType invFIRredData = (InvFIRredDataType) invFIRredDataPtr;
-  InvFFTedDataType invFFTedData = (InvFFTedDataType) invFFTedDataPtr;
-  WeightsType weightsData = (WeightsType) weightsPtr;
-
-  uint sub_time = get_global_id(0);
-  uint pol = get_global_id(1);
-  uint tab = get_global_id(2);
-
-  //#pragma OPENCL EXTENSION cl_amd_printf : enable
-
-  const float16 weights = (*weightsData)[sub_time];
-  float16 delayLine;
-  float16 sum;
-
-  delayLine.s0 = (*invFFTedData)[tab][pol][ 0][sub_time];
-  delayLine.s1 = (*invFFTedData)[tab][pol][ 1][sub_time];
-  delayLine.s2 = (*invFFTedData)[tab][pol][ 2][sub_time];
-  delayLine.s3 = (*invFFTedData)[tab][pol][ 3][sub_time];
-  delayLine.s4 = (*invFFTedData)[tab][pol][ 4][sub_time];
-  delayLine.s5 = (*invFFTedData)[tab][pol][ 5][sub_time];
-  delayLine.s6 = (*invFFTedData)[tab][pol][ 6][sub_time];
-  delayLine.s7 = (*invFFTedData)[tab][pol][ 7][sub_time];
-  delayLine.s8 = (*invFFTedData)[tab][pol][ 8][sub_time];
-  delayLine.s9 = (*invFFTedData)[tab][pol][ 9][sub_time];
-  delayLine.sA = (*invFFTedData)[tab][pol][10][sub_time];
-  delayLine.sB = (*invFFTedData)[tab][pol][11][sub_time];
-  delayLine.sC = (*invFFTedData)[tab][pol][12][sub_time];
-  delayLine.sD = (*invFFTedData)[tab][pol][13][sub_time];
-  delayLine.sE = (*invFFTedData)[tab][pol][14][sub_time];
-
-  for (uint time = 0; time < NR_SAMPLES_PER_SUBBAND; time += NR_STATION_FILTER_TAPS) {
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 0][sub_time];
-    sum.s0 = weights.sF * delayLine.s0;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 1][sub_time];
-    sum.s0 += weights.sE * delayLine.s1;
-    sum.s0 += weights.sD * delayLine.s2;
-    sum.s0 += weights.sC * delayLine.s3;
-    sum.s0 += weights.sB * delayLine.s4;
-    sum.s0 += weights.sA * delayLine.s5;
-    sum.s0 += weights.s9 * delayLine.s6;
-    sum.s0 += weights.s8 * delayLine.s7;
-    sum.s0 += weights.s7 * delayLine.s8;
-    sum.s0 += weights.s6 * delayLine.s9;
-    sum.s0 += weights.s5 * delayLine.sA;
-    sum.s0 += weights.s4 * delayLine.sB;
-    sum.s0 += weights.s3 * delayLine.sC;
-    sum.s0 += weights.s2 * delayLine.sD;
-    sum.s0 += weights.s1 * delayLine.sE;
-    sum.s0 += weights.s0 * delayLine.sF;
-    (*invFIRredData)[tab][pol][time + 0][sub_time] = sum.s0;
-
-    sum.s1 = weights.sF * delayLine.s1;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 2][sub_time];
-    sum.s1 += weights.sE * delayLine.s2;
-    sum.s1 += weights.sD * delayLine.s3;
-    sum.s1 += weights.sC * delayLine.s4;
-    sum.s1 += weights.sB * delayLine.s5;
-    sum.s1 += weights.sA * delayLine.s6;
-    sum.s1 += weights.s9 * delayLine.s7;
-    sum.s1 += weights.s8 * delayLine.s8;
-    sum.s1 += weights.s7 * delayLine.s9;
-    sum.s1 += weights.s6 * delayLine.sA;
-    sum.s1 += weights.s5 * delayLine.sB;
-    sum.s1 += weights.s4 * delayLine.sC;
-    sum.s1 += weights.s3 * delayLine.sD;
-    sum.s1 += weights.s2 * delayLine.sE;
-    sum.s1 += weights.s1 * delayLine.sF;
-    sum.s1 += weights.s0 * delayLine.s0;
-    (*invFIRredData)[tab][pol][time + 1][sub_time] = sum.s1;
-
-    sum.s2 = weights.sF * delayLine.s2;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 3][sub_time];
-    sum.s2 += weights.sE * delayLine.s3;
-    sum.s2 += weights.sD * delayLine.s4;
-    sum.s2 += weights.sC * delayLine.s5;
-    sum.s2 += weights.sB * delayLine.s6;
-    sum.s2 += weights.sA * delayLine.s7;
-    sum.s2 += weights.s9 * delayLine.s8;
-    sum.s2 += weights.s8 * delayLine.s9;
-    sum.s2 += weights.s7 * delayLine.sA;
-    sum.s2 += weights.s6 * delayLine.sB;
-    sum.s2 += weights.s5 * delayLine.sC;
-    sum.s2 += weights.s4 * delayLine.sD;
-    sum.s2 += weights.s3 * delayLine.sE;
-    sum.s2 += weights.s2 * delayLine.sF;
-    sum.s2 += weights.s1 * delayLine.s0;
-    sum.s2 += weights.s0 * delayLine.s1;
-    (*invFIRredData)[tab][pol][time + 2][sub_time] = sum.s2;
-
-    sum.s3 = weights.sF * delayLine.s3;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 4][sub_time];
-    sum.s3 += weights.sE * delayLine.s4;
-    sum.s3 += weights.sD * delayLine.s5;
-    sum.s3 += weights.sC * delayLine.s6;
-    sum.s3 += weights.sB * delayLine.s7;
-    sum.s3 += weights.sA * delayLine.s8;
-    sum.s3 += weights.s9 * delayLine.s9;
-    sum.s3 += weights.s8 * delayLine.sA;
-    sum.s3 += weights.s7 * delayLine.sB;
-    sum.s3 += weights.s6 * delayLine.sC;
-    sum.s3 += weights.s5 * delayLine.sD;
-    sum.s3 += weights.s4 * delayLine.sE;
-    sum.s3 += weights.s3 * delayLine.sF;
-    sum.s3 += weights.s2 * delayLine.s0;
-    sum.s3 += weights.s1 * delayLine.s1;
-    sum.s3 += weights.s0 * delayLine.s2;
-    (*invFIRredData)[tab][pol][time + 3][sub_time] = sum.s3;
-
-    sum.s4 = weights.sF * delayLine.s4;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 5][sub_time];
-    sum.s4 += weights.sE * delayLine.s5;
-    sum.s4 += weights.sD * delayLine.s6;
-    sum.s4 += weights.sC * delayLine.s7;
-    sum.s4 += weights.sB * delayLine.s8;
-    sum.s4 += weights.sA * delayLine.s9;
-    sum.s4 += weights.s9 * delayLine.sA;
-    sum.s4 += weights.s8 * delayLine.sB;
-    sum.s4 += weights.s7 * delayLine.sC;
-    sum.s4 += weights.s6 * delayLine.sD;
-    sum.s4 += weights.s5 * delayLine.sE;
-    sum.s4 += weights.s4 * delayLine.sF;
-    sum.s4 += weights.s3 * delayLine.s0;
-    sum.s4 += weights.s2 * delayLine.s1;
-    sum.s4 += weights.s1 * delayLine.s2;
-    sum.s4 += weights.s0 * delayLine.s3;
-    (*invFIRredData)[tab][pol][time + 4][sub_time] = sum.s4;
-
-    sum.s5 = weights.sF * delayLine.s5;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 6][sub_time];
-    sum.s5 += weights.sE * delayLine.s6;
-    sum.s5 += weights.sD * delayLine.s7;
-    sum.s5 += weights.sC * delayLine.s8;
-    sum.s5 += weights.sB * delayLine.s9;
-    sum.s5 += weights.sA * delayLine.sA;
-    sum.s5 += weights.s9 * delayLine.sB;
-    sum.s5 += weights.s8 * delayLine.sC;
-    sum.s5 += weights.s7 * delayLine.sD;
-    sum.s5 += weights.s6 * delayLine.sE;
-    sum.s5 += weights.s5 * delayLine.sF;
-    sum.s5 += weights.s4 * delayLine.s0;
-    sum.s5 += weights.s3 * delayLine.s1;
-    sum.s5 += weights.s2 * delayLine.s2;
-    sum.s5 += weights.s1 * delayLine.s3;
-    sum.s5 += weights.s0 * delayLine.s4;
-    (*invFIRredData)[tab][pol][time + 5][sub_time] = sum.s5;
-
-    sum.s6 = weights.sF * delayLine.s6;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 7][sub_time];
-    sum.s6 += weights.sE * delayLine.s7;
-    sum.s6 += weights.sD * delayLine.s8;
-    sum.s6 += weights.sC * delayLine.s9;
-    sum.s6 += weights.sB * delayLine.sA;
-    sum.s6 += weights.sA * delayLine.sB;
-    sum.s6 += weights.s9 * delayLine.sC;
-    sum.s6 += weights.s8 * delayLine.sD;
-    sum.s6 += weights.s7 * delayLine.sE;
-    sum.s6 += weights.s6 * delayLine.sF;
-    sum.s6 += weights.s5 * delayLine.s0;
-    sum.s6 += weights.s4 * delayLine.s1;
-    sum.s6 += weights.s3 * delayLine.s2;
-    sum.s6 += weights.s2 * delayLine.s3;
-    sum.s6 += weights.s1 * delayLine.s4;
-    sum.s6 += weights.s0 * delayLine.s5;
-    (*invFIRredData)[tab][pol][time + 6][sub_time] = sum.s6;
-
-    sum.s7 = weights.sF * delayLine.s7;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 8][sub_time];
-    sum.s7 += weights.sE * delayLine.s8;
-    sum.s7 += weights.sD * delayLine.s9;
-    sum.s7 += weights.sC * delayLine.sA;
-    sum.s7 += weights.sB * delayLine.sB;
-    sum.s7 += weights.sA * delayLine.sC;
-    sum.s7 += weights.s9 * delayLine.sD;
-    sum.s7 += weights.s8 * delayLine.sE;
-    sum.s7 += weights.s7 * delayLine.sF;
-    sum.s7 += weights.s6 * delayLine.s0;
-    sum.s7 += weights.s5 * delayLine.s1;
-    sum.s7 += weights.s4 * delayLine.s2;
-    sum.s7 += weights.s3 * delayLine.s3;
-    sum.s7 += weights.s2 * delayLine.s4;
-    sum.s7 += weights.s1 * delayLine.s5;
-    sum.s7 += weights.s0 * delayLine.s6;
-    (*invFIRredData)[tab][pol][time + 7][sub_time] = sum.s7;
-
-    sum.s8 = weights.sF * delayLine.s8;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 9][sub_time];
-    sum.s8 += weights.sE * delayLine.s9;
-    sum.s8 += weights.sD * delayLine.sA;
-    sum.s8 += weights.sC * delayLine.sB;
-    sum.s8 += weights.sB * delayLine.sC;
-    sum.s8 += weights.sA * delayLine.sD;
-    sum.s8 += weights.s9 * delayLine.sE;
-    sum.s8 += weights.s8 * delayLine.sF;
-    sum.s8 += weights.s7 * delayLine.s0;
-    sum.s8 += weights.s6 * delayLine.s1;
-    sum.s8 += weights.s5 * delayLine.s2;
-    sum.s8 += weights.s4 * delayLine.s3;
-    sum.s8 += weights.s3 * delayLine.s4;
-    sum.s8 += weights.s2 * delayLine.s5;
-    sum.s8 += weights.s1 * delayLine.s6;
-    sum.s8 += weights.s0 * delayLine.s7;
-    (*invFIRredData)[tab][pol][time + 8][sub_time] = sum.s8;
-
-    sum.s9 = weights.sF * delayLine.s9;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 10][sub_time];
-    sum.s9 += weights.sE * delayLine.sA;
-    sum.s9 += weights.sD * delayLine.sB;
-    sum.s9 += weights.sC * delayLine.sC;
-    sum.s9 += weights.sB * delayLine.sD;
-    sum.s9 += weights.sA * delayLine.sE;
-    sum.s9 += weights.s9 * delayLine.sF;
-    sum.s9 += weights.s8 * delayLine.s0;
-    sum.s9 += weights.s7 * delayLine.s1;
-    sum.s9 += weights.s6 * delayLine.s2;
-    sum.s9 += weights.s5 * delayLine.s3;
-    sum.s9 += weights.s4 * delayLine.s4;
-    sum.s9 += weights.s3 * delayLine.s5;
-    sum.s9 += weights.s2 * delayLine.s6;
-    sum.s9 += weights.s1 * delayLine.s7;
-    sum.s9 += weights.s0 * delayLine.s8;
-    (*invFIRredData)[tab][pol][time + 9][sub_time] = sum.s9;
-
-    sum.sA = weights.sF * delayLine.sA;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 11][sub_time];
-    sum.sA += weights.sE * delayLine.sB;
-    sum.sA += weights.sD * delayLine.sC;
-    sum.sA += weights.sC * delayLine.sD;
-    sum.sA += weights.sB * delayLine.sE;
-    sum.sA += weights.sA * delayLine.sF;
-    sum.sA += weights.s9 * delayLine.s0;
-    sum.sA += weights.s8 * delayLine.s1;
-    sum.sA += weights.s7 * delayLine.s2;
-    sum.sA += weights.s6 * delayLine.s3;
-    sum.sA += weights.s5 * delayLine.s4;
-    sum.sA += weights.s4 * delayLine.s5;
-    sum.sA += weights.s3 * delayLine.s6;
-    sum.sA += weights.s2 * delayLine.s7;
-    sum.sA += weights.s1 * delayLine.s8;
-    sum.sA += weights.s0 * delayLine.s9;
-    (*invFIRredData)[tab][pol][time + 10][sub_time] = sum.sA;
-
-    sum.sB = weights.sF * delayLine.sB;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 12][sub_time];
-    sum.sB += weights.sE * delayLine.sC;
-    sum.sB += weights.sD * delayLine.sD;
-    sum.sB += weights.sC * delayLine.sE;
-    sum.sB += weights.sB * delayLine.sF;
-    sum.sB += weights.sA * delayLine.s0;
-    sum.sB += weights.s9 * delayLine.s1;
-    sum.sB += weights.s8 * delayLine.s2;
-    sum.sB += weights.s7 * delayLine.s3;
-    sum.sB += weights.s6 * delayLine.s4;
-    sum.sB += weights.s5 * delayLine.s5;
-    sum.sB += weights.s4 * delayLine.s6;
-    sum.sB += weights.s3 * delayLine.s7;
-    sum.sB += weights.s2 * delayLine.s8;
-    sum.sB += weights.s1 * delayLine.s9;
-    sum.sB += weights.s0 * delayLine.sA;
-    (*invFIRredData)[tab][pol][time + 11][sub_time] = sum.sB;
-
-    sum.sC = weights.sF * delayLine.sC;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 13][sub_time];
-    sum.sC += weights.sE * delayLine.sD;
-    sum.sC += weights.sD * delayLine.sE;
-    sum.sC += weights.sC * delayLine.sF;
-    sum.sC += weights.sB * delayLine.s0;
-    sum.sC += weights.sA * delayLine.s1;
-    sum.sC += weights.s9 * delayLine.s2;
-    sum.sC += weights.s8 * delayLine.s3;
-    sum.sC += weights.s7 * delayLine.s4;
-    sum.sC += weights.s6 * delayLine.s5;
-    sum.sC += weights.s5 * delayLine.s6;
-    sum.sC += weights.s4 * delayLine.s7;
-    sum.sC += weights.s3 * delayLine.s8;
-    sum.sC += weights.s2 * delayLine.s9;
-    sum.sC += weights.s1 * delayLine.sA;
-    sum.sC += weights.s0 * delayLine.sB;
-    (*invFIRredData)[tab][pol][time + 12][sub_time] = sum.sC;
-
-    sum.sD = weights.sF * delayLine.sD;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 14][sub_time];
-    sum.sD += weights.sE * delayLine.sE;
-    sum.sD += weights.sD * delayLine.sF;
-    sum.sD += weights.sC * delayLine.s0;
-    sum.sD += weights.sB * delayLine.s1;
-    sum.sD += weights.sA * delayLine.s2;
-    sum.sD += weights.s9 * delayLine.s3;
-    sum.sD += weights.s8 * delayLine.s4;
-    sum.sD += weights.s7 * delayLine.s5;
-    sum.sD += weights.s6 * delayLine.s6;
-    sum.sD += weights.s5 * delayLine.s7;
-    sum.sD += weights.s4 * delayLine.s8;
-    sum.sD += weights.s3 * delayLine.s9;
-    sum.sD += weights.s2 * delayLine.sA;
-    sum.sD += weights.s1 * delayLine.sB;
-    sum.sD += weights.s0 * delayLine.sC;
-    (*invFIRredData)[tab][pol][time + 13][sub_time] = sum.sD;
-
-    sum.sE = weights.sF * delayLine.sE;
-    delayLine.sF = (*invFFTedData)[tab][pol][time + NR_STATION_FILTER_TAPS - 1 + 15][sub_time];
-    sum.sE += weights.sE * delayLine.sF;
-    sum.sE += weights.sD * delayLine.s0;
-    sum.sE += weights.sC * delayLine.s1;
-    sum.sE += weights.sB * delayLine.s2;
-    sum.sE += weights.sA * delayLine.s3;
-    sum.sE += weights.s9 * delayLine.s4;
-    sum.sE += weights.s8 * delayLine.s5;
-    sum.sE += weights.s7 * delayLine.s6;
-    sum.sE += weights.s6 * delayLine.s7;
-    sum.sE += weights.s5 * delayLine.s8;
-    sum.sE += weights.s4 * delayLine.s9;
-    sum.sE += weights.s3 * delayLine.sA;
-    sum.sE += weights.s2 * delayLine.sB;
-    sum.sE += weights.s1 * delayLine.sC;
-    sum.sE += weights.s0 * delayLine.sD;
-    (*invFIRredData)[tab][pol][time + 14][sub_time] = sum.sE;
-
-    sum.sF = weights.sF * delayLine.sF;
-    sum.sF += weights.sE * delayLine.s0;
-    sum.sF += weights.sD * delayLine.s1;
-    sum.sF += weights.sC * delayLine.s2;
-    sum.sF += weights.sB * delayLine.s3;
-    sum.sF += weights.sA * delayLine.s4;
-    sum.sF += weights.s9 * delayLine.s5;
-    sum.sF += weights.s8 * delayLine.s6;
-    sum.sF += weights.s7 * delayLine.s7;
-    sum.sF += weights.s6 * delayLine.s8;
-    sum.sF += weights.s5 * delayLine.s9;
-    sum.sF += weights.s4 * delayLine.sA;
-    sum.sF += weights.s3 * delayLine.sB;
-    sum.sF += weights.s2 * delayLine.sC;
-    sum.sF += weights.s1 * delayLine.sD;
-    sum.sF += weights.s0 * delayLine.sE;
-    (*invFIRredData)[tab][pol][time + 15][sub_time] = sum.sF;
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvertedStationPPFWeights.cc b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvertedStationPPFWeights.cc
deleted file mode 100644
index 76031f41aca8db844e9409e54a8d4b3580b3f285..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvertedStationPPFWeights.cc
+++ /dev/null
@@ -1,4191 +0,0 @@
-//# InvertedStationPPFWeights.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "InvertedStationPPFWeights.h"
-
-int reverseSubbandMapping[512] = {
-  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-  -1,  -1,  -1,  -1,   0,   1,   2,   3,
-  4,   5,   6,   7,   8,   9,  10,  11,
-  12,  13,  14,  15,  16,  17,  18,  19,
-  20,  21,  22,  23,  24,  25,  26,  27,
-  28,  29,  30,  31,  32,  33,  34,  35,
-  36,  37,  38,  39,  40,  41,  42,  43,
-  44,  45,  46,  47,  48,  49,  50,  51,
-  52,  53,  54,  55,  56,  57,  58,  59,
-  60,  61,  62,  63,  64,  65,  66,  67,
-  68,  69,  70,  71,  72,  73,  74,  75,
-  76,  77,  78,  79,  80,  81,  82,  83,
-  84,  85,  86,  87,  88,  89,  90,  91,
-  92,  93,  94,  95,  96,  97,  98,  99,
-  100, 101, 102, 103, 104, 105, 106, 107,
-  108, 109, 110, 111, 112, 113, 114, 115,
-  116, 117, 118, 119, 120, 121, 122, 123,
-  124, 125, 126, 127, 128, 129, 130, 131,
-  132, 133, 134, 135, 136, 137, 138, 139,
-  140, 141, 142, 143, 144, 145, 146, 147,
-  148, 149, 150, 151, 152, 153, 154, 155,
-  156, 157, 158, 159, 160, 161, 162, 163,
-  164, 165, 166, 167, 168, 169, 170, 171,
-  172, 173, 174, 175, 176, 177, 178, 179,
-  180, 181, 182, 183, 184, 185, 186, 187,
-  188, 189, 190, 191, 192, 193, 194, 195,
-  196, 197, 198, 199, 200, 201, 202, 203,
-  204, 205, 206, 207, 208, 209, 210, 211,
-  212, 213, 214, 215, 216, 217, 218, 219,
-  220, 221, 222, 223, 224, 225, 226, 227,
-  228, 229, 230, 231, 232, 233, 234, 235,
-  236, 237, 238, 239, 240, 241, 242, 243,
-  244, 245, 246, 247, 248, 249, 250, 251,
-  252, 253, 254, 255, 256, 257, 258, 259,
-  260, 261, 262, 263, 264, 265, 266, 267,
-  268, 269, 270, 271, 272, 273, 274, 275,
-  276, 277, 278, 279, 280, 281, 282, 283,
-  284, 285, 286, 287, 288, 289, 290, 291,
-  292, 293, 294, 295, 296, 297, 298, 299,
-  300, 301, 302, 303, 304, 305, 306, 307,
-  308, 309, 310, 311, 312, 313, 314, 315,
-  316, 317, 318, 319, 320, 321, 322, 323,
-  324, 325, 326, 327, 328, 329, 330, 331,
-  332, 333, 334, 335, 336, 337, 338, 339,
-  340, 341, 342, 343, 344, 345, 346, 347,
-  348, 349, 350, 351, 352, 353, 354, 355,
-  356, 357, 358, 359, 360, 361, 362, 363,
-  364, 365, 366, 367, 368, 369, 370, 371,
-  372, 373, 374, 375, 376, 377, 378, 379,
-  380, 381, 382, 383, 384, 385, 386, 387,
-  388, 389, 390, 391, 392, 393, 394, 395,
-  396, 397, 398, 399, 400, 401, 402, 403,
-  404, 405, 406, 407, 408, 409, 410, 411,
-  412, 413, 414, 415, 416, 417, 418, 419,
-  420, 421, 422, 423, 424, 425, 426, 427,
-  428, 429, 430, 431, 432, 433, 434, 435,
-  436, 437, 438, 439, 440, 441, 442, 443,
-  444, 445, 446, 447, 448, 449, 450, 451,
-  452, 453, 454, 455, 456, 457, 458, 459,
-  460, 461, 462, 463, 464, 465, 466, 467,
-  468, 469, 470, 471,  -1,  -1,  -1,  -1,
-  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-};
-
-
-extern const float invertedStationPPFWeights[1024][16] __attribute__ ((aligned(32))) = {
-  { -0.000179151700, -0.003308169600,  0.003168136400, -0.001402398400,
-    -0.000353662500,  0.001927602200, -0.003163333400,  0.004012019600,
-    0.305533321300,  0.003717851500, -0.003038205600,  0.001856478200,
-    -0.000314280200, -0.001413956600,  0.003176999800, -0.003309959200},
-  { -0.000188174200, -0.003292642400,  0.003165263500, -0.001388720100,
-    -0.000384077600,  0.001988112900, -0.003285234700,  0.004303401100,
-    0.305532062500,  0.003427783000, -0.002906671400,  0.001795892300,
-    -0.000283721000, -0.001437413900,  0.003189613400, -0.003326162500},
-  { -0.000196877000, -0.003287185700,  0.003153111900, -0.001365477700,
-    -0.000414183100,  0.002048118400, -0.003406922200,  0.004585797400,
-    0.305529242100,  0.003148416400, -0.002784621900,  0.001725095700,
-    -0.000252375300, -0.001452058900,  0.003202823300, -0.003332926300},
-  { -0.000205837900, -0.003272003200,  0.003141260600, -0.001352471400,
-    -0.000443644700,  0.002116848800, -0.003537488300,  0.004878336100,
-    0.305525209100,  0.002859642300, -0.002662171400,  0.001663994200,
-    -0.000211731900, -0.001466550800,  0.003206380900, -0.003349458000},
-  { -0.000214552200, -0.003266806700,  0.003129659400, -0.001339690600,
-    -0.000482746700,  0.002176562700, -0.003658974500,  0.005162307100,
-    0.305528831700,  0.002572382100, -0.002530584900,  0.001602837600,
-    -0.000180271600, -0.001491017200,  0.003220032300, -0.003356689400},
-  { -0.000223661700, -0.003260822600,  0.003127233900, -0.001326570100,
-    -0.000512158000,  0.002235803700, -0.003780111100,  0.005456280000,
-    0.305521935800,  0.002275511400, -0.002407952000,  0.001531547700,
-    -0.000148571000, -0.001505753800,  0.003233233200, -0.003373394500},
-  { -0.000231910300, -0.003246569900,  0.003116275100, -0.001304684500,
-    -0.000541061900,  0.002304368000, -0.003901387700,  0.005741703600,
-    0.305522735200,  0.001989240500, -0.002285243100,  0.001469413800,
-    -0.000116373400, -0.001521319900,  0.003247258700, -0.003380795000},
-  { -0.000240501100, -0.003241453500,  0.003104789400, -0.001292085400,
-    -0.000569919800,  0.002362991000, -0.004022334800,  0.006027997600,
-    0.305521780500,  0.001704243000, -0.002153295800,  0.001397822300,
-    -0.000074381800, -0.001537100900,  0.003251864100, -0.003388377600},
-  { -0.000248796500, -0.003226864100,  0.003093528500, -0.001279946600,
-    -0.000607985400,  0.002421344900, -0.004142487600,  0.006323528600,
-    0.305510887600,  0.001418764600, -0.002029953100,  0.001335330400,
-    -0.000042083300, -0.001561789400,  0.003265175300, -0.003404731400},
-  { -0.000257636700, -0.003221504300,  0.003091948000, -0.001267872500,
-    -0.000636159800,  0.002489119800, -0.004263249000,  0.006610834100,
-    0.305507531700,  0.001124928200, -0.001906951100,  0.001263167800,
-    -0.000009313800, -0.001577770500,  0.003279564200, -0.003412490900},
-  { -0.000265507200, -0.003207541700,  0.003081283900, -0.001246591800,
-    -0.000664350300,  0.002546976200, -0.004383683600,  0.006898956800,
-    0.305502674600,  0.000841583200, -0.001774239400,  0.001200242700,
-    0.000033135500, -0.001593584100,  0.003293434500, -0.003429250800},
-  { -0.000273917600, -0.003202910800,  0.003070451600, -0.001234554400,
-    -0.000692451500,  0.002604895500, -0.004503987800,  0.007187871700,
-    0.305505931400,  0.000558741700, -0.001650952000,  0.001127390700,
-    0.000066556300, -0.001619778200,  0.003298773100, -0.003437037600},
-  { -0.000281862900, -0.003188993500,  0.003060168000, -0.001223831900,
-    -0.000729004800,  0.002671831100, -0.004624290900,  0.007477414500,
-    0.305498083700,  0.000267125500, -0.001517720800,  0.001063982400,
-    0.000099881700, -0.001636003800,  0.003313035200, -0.003454137100},
-  { -0.000289997500, -0.003184579100,  0.003050026400, -0.001202902100,
-    -0.000756520300,  0.002728774500, -0.004744017700,  0.007767318900,
-    0.305488765700, -0.000023525100, -0.001394377600,  0.000990953800,
-    0.000143244500, -0.001652648300,  0.003327682700, -0.003461774600},
-  { -0.000297868500, -0.003170531700,  0.003048908400, -0.001191632000,
-    -0.000784087900,  0.002786310700, -0.004864404400,  0.008048797600,
-    0.305487970600, -0.000304469600, -0.001260861000,  0.000926754800,
-    0.000177135000, -0.001679160000,  0.003343036000, -0.003469765900},
-  { -0.000306075200, -0.003165955700,  0.003038511100, -0.001180375200,
-    -0.000811096700,  0.002842935600, -0.004983911700,  0.008340196300,
-    0.305476029500, -0.000594272800, -0.001136564500,  0.000852586500,
-    0.000211810600, -0.001696380900,  0.003348178400, -0.003486840300},
-  { -0.000313813200, -0.003152349500,  0.003028499400, -0.001169925400,
-    -0.000837361100,  0.002908698000, -0.005103588900,  0.008632676200,
-    0.305471690900, -0.000882964600, -0.001002806300,  0.000788301700,
-    0.000255669300, -0.001713789300,  0.003363569600, -0.003495167000},
-  { -0.000321551300, -0.003148759600,  0.003019394800, -0.001150412500,
-    -0.000873315500,  0.002965177700, -0.005223260400,  0.008916237200,
-    0.305466205000, -0.001170623500, -0.000869571200,  0.000714234800,
-    0.000290089600, -0.001740435500,  0.003378711000, -0.003512573100},
-  { -0.000329970400, -0.003144017200,  0.003018842400, -0.001139831400,
-    -0.000899901500,  0.003021134300, -0.005342285700,  0.009209557400,
-    0.305459744400, -0.001458744900, -0.000744677800,  0.000649268300,
-    0.000334721100, -0.001758288700,  0.003394346200, -0.003520921500},
-  { -0.000337260000, -0.003130746200,  0.003009011500, -0.001129494000,
-    -0.000925937200,  0.003077019500, -0.005461903400,  0.009494961400,
-    0.305451127000, -0.001745336100, -0.000610465300,  0.000573925900,
-    0.000370535700, -0.001776549100,  0.003400302700, -0.003538373300},
-  { -0.000345274700, -0.003126683700,  0.002999325200, -0.001119130300,
-    -0.000951776200,  0.003132334500, -0.005580569300,  0.009789706100,
-    0.305441562500, -0.002031776000, -0.000485477300,  0.000498512700,
-    0.000406472900, -0.001794658100,  0.003416172000, -0.003546870600},
-  { -0.000352248700, -0.003113898000,  0.002990283900, -0.001099777400,
-    -0.000977716300,  0.003187647900, -0.005699440100,  0.010075840400,
-    0.305430485400, -0.002316996000, -0.000351097200,  0.000433003700,
-    0.000451135800, -0.001822254600,  0.003431922800, -0.003564774200},
-  { -0.000360263700, -0.003109808600,  0.002990478200, -0.001090243800,
-    -0.001002860000,  0.003252789700, -0.005809448800,  0.010362986600,
-    0.305427509700, -0.002601772700, -0.000216601600,  0.000357013800,
-    0.000487681400, -0.001841238600,  0.003448505600, -0.003573744000},
-  { -0.000367260100, -0.003096989400,  0.002981370000, -0.001081004600,
-    -0.001037636700,  0.003307938500, -0.005928189500,  0.010650492300,
-    0.305413750100, -0.002886387300, -0.000090648300,  0.000290078700,
-    0.000524745900, -0.001860858600,  0.003455849400, -0.003582656500},
-  { -0.000375146000, -0.003093318200,  0.002972423700, -0.001071720100,
-    -0.001062345400,  0.003362096800, -0.006046137200,  0.010948594500,
-    0.305407159000, -0.003178921900,  0.000043993500,  0.000214496100,
-    0.000570197700, -0.001888981300,  0.003472094500, -0.003601269100},
-  { -0.000381874300, -0.003080805300,  0.002963790800, -0.001053001800,
-    -0.001087365200,  0.003416433800, -0.006164483000,  0.011237344100,
-    0.305390383500, -0.003461481100,  0.000179544400,  0.000146785300,
-    0.000607413700, -0.001908316200,  0.003489057800, -0.003610639600},
-  { -0.000389669200, -0.003076842200,  0.002964194700, -0.001043813600,
-    -0.001112218000,  0.003470974700, -0.006273264800,  0.011526826700,
-    0.305382025700, -0.003743576500,  0.000314498600,  0.000070163400,
-    0.000654411200, -0.001927947000,  0.003505495000, -0.003629223000},
-  { -0.000396332400, -0.003064410600,  0.002955492900, -0.001034693000,
-    -0.001136761300,  0.003525266500, -0.006392102100,  0.011808326800,
-    0.305371538600, -0.004034754500,  0.000440667500, -0.000007068200,
-    0.000692151600, -0.001958085100,  0.003514164000, -0.003638938800},
-  { -0.000403882200, -0.003061151700,  0.002947019900, -0.001026023300,
-    -0.001160855500,  0.003578931400, -0.006510233800,  0.012099735200,
-    0.305359759100, -0.004325205000,  0.000577290600, -0.000075620500,
-    0.000729983100, -0.001977775600,  0.003531138400, -0.003658356000},
-  { -0.000410416700, -0.003048768800,  0.002938122000, -0.001017024400,
-    -0.001185043200,  0.003632680800, -0.006618462800,  0.012391231100,
-    0.305346710600, -0.004604878800,  0.000712646300, -0.000153154100,
-    0.000778065700, -0.001998535200,  0.003548917800, -0.003668399300},
-  { -0.000418160500, -0.003045285600,  0.002940099300, -0.000999989700,
-    -0.001207958100,  0.003694939000, -0.006736106600,  0.012683638900,
-    0.305331925800, -0.004893293600,  0.000848238100, -0.000231056700,
-    0.000815922500, -0.002028355600,  0.003567216600, -0.003678810800},
-  { -0.000424402600, -0.003033543100,  0.002932209100, -0.000992319500,
-    -0.001241358200,  0.003749292200, -0.006845375400,  0.012968326800,
-    0.305325129100, -0.005181636100,  0.000984943000, -0.000299850300,
-    0.000864607400, -0.002050276300,  0.003575779100, -0.003698495600},
-  { -0.000431795400, -0.003030515100,  0.002924143600, -0.000984066100,
-    -0.001264499500,  0.003801673700, -0.006962423800,  0.013261923500,
-    0.305307792800, -0.005469551400,  0.001112105700, -0.000378641900,
-    0.000903979800, -0.002071214100,  0.003594054000, -0.003708956400},
-  { -0.000438154800, -0.003018644300,  0.002915881100, -0.000975892700,
-    -0.001287607700,  0.003854346300, -0.007080269600,  0.013547492500,
-    0.305299153300, -0.005747166800,  0.001248307000, -0.000457538900,
-    0.000942775500, -0.002101520100,  0.003612350900, -0.003729050600},
-  { -0.000445068000, -0.003016231600,  0.002908760100, -0.000958623000,
-    -0.001311089600,  0.003906976500, -0.007187486600,  0.013842019100,
-    0.305278786000, -0.006032900700,  0.001385321000, -0.000527217900,
-    0.000991980200, -0.002123501700,  0.003631277700, -0.003740453600},
-  { -0.000451769900, -0.003003554800,  0.002910117000, -0.000951286800,
-    -0.001333568200,  0.003959036100, -0.007305163600,  0.014129397200,
-    0.305266353700, -0.006318495400,  0.001522406400, -0.000607494800,
-    0.001032856600, -0.002146282400,  0.003641224700, -0.003751272400},
-  { -0.000458704700, -0.003001127800,  0.002902744400, -0.000943766600,
-    -0.001356286200,  0.004011606300, -0.007413160700,  0.014416934300,
-    0.305252141100, -0.006612456400,  0.001659411900, -0.000686657100,
-    0.001082013300, -0.002177942800,  0.003660354300, -0.003772222700},
-  { -0.000464860200, -0.002989337500,  0.002894831400, -0.000936224300,
-    -0.001378788100,  0.004063782200, -0.007520350800,  0.014714266400,
-    0.305236860000, -0.006896906600,  0.001797689700, -0.000758115600,
-    0.001122795500, -0.002200335400,  0.003679910900, -0.003784248300},
-  { -0.000471906600, -0.002986971300,  0.002887514500, -0.000929037200,
-    -0.001400660100,  0.004114765900, -0.007637074700,  0.015003290600,
-    0.305220409100, -0.007180134300,  0.001934852000, -0.000838292300,
-    0.001173609200, -0.002223798900,  0.003689540000, -0.003804721500},
-  { -0.000478005400, -0.002974973900,  0.002890024200, -0.000912804200,
-    -0.001423103300,  0.004166752200, -0.007744430700,  0.015292286200,
-    0.305202709200, -0.007462776200,  0.002072061100, -0.000919168800,
-    0.001214479000, -0.002256106400,  0.003709864100, -0.003816509300},
-  { -0.000485004200, -0.002972661400,  0.002883075100, -0.000906121000,
-    -0.001444400500,  0.004217388300, -0.007861128300,  0.015582827100,
-    0.305182829200, -0.007754203600,  0.002210354400, -0.001000782800,
-    0.001256255000, -0.002278849600,  0.003729366300, -0.003838542900},
-  { -0.000491739700, -0.002970642300,  0.002875940200, -0.000898797900,
-    -0.001467267200,  0.004259593600, -0.007967928800,  0.015873669900,
-    0.305171969300, -0.008036267100,  0.002349092100, -0.001072739500,
-    0.001307766700, -0.002302777900,  0.003749888800, -0.003850712800},
-  { -0.000497291200, -0.002959470700,  0.002868512700, -0.000891753800,
-    -0.001488975800,  0.004311149200, -0.008075516000,  0.016155288200,
-    0.305150388000, -0.008316860100,  0.002487086200, -0.001154788900,
-    0.001350046400, -0.002336945300,  0.003761723500, -0.003862439200},
-  { -0.000504731900, -0.002956450800,  0.002871262500, -0.000886061100,
-    -0.001509538700,  0.004360886000, -0.008191697200,  0.016448378400,
-    0.305135746300, -0.008606633700,  0.002625496200, -0.001236297400,
-    0.001401956000, -0.002360832800,  0.003781771800, -0.003884434400},
-  { -0.000510187200, -0.002945799600,  0.002865288500, -0.000870352000,
-    -0.001531072000,  0.004411842900, -0.008298811000,  0.016741989300,
-    0.305119193600, -0.008895401800,  0.002764325800, -0.001319345500,
-    0.001445432500, -0.002385302500,  0.003803145000, -0.003898001300},
-  { -0.000516831700, -0.002943863500,  0.002858545300, -0.000863995200,
-    -0.001552015500,  0.004462029400, -0.008404468200,  0.017034066400,
-    0.305093771700, -0.009174192300,  0.002903186600, -0.001391517800,
-    0.001496396500, -0.002418783000,  0.003823612700, -0.003919897700},
-  { -0.000522254800, -0.002933011700,  0.002851744600, -0.000857749800,
-    -0.001572829300,  0.004512760300, -0.008512038500,  0.017319625600,
-    0.305074913300, -0.009461842200,  0.003042687600, -0.001475450400,
-    0.001541005000, -0.002444849800,  0.003836006300, -0.003932401200},
-  { -0.000529601300, -0.002930099600,  0.002854820400, -0.000852704600,
-    -0.001592429500,  0.004561274000, -0.008627194900,  0.017615006900,
-    0.305054496900, -0.009748599800,  0.003181615900, -0.001558137300,
-    0.001594324200, -0.002470181000,  0.003857769000, -0.003945651400},
-  { -0.000534931600, -0.002919339300,  0.002848150100, -0.000846731600,
-    -0.001612810100,  0.004611510300, -0.008734196000,  0.017901410200,
-    0.305033298300, -0.010034991200,  0.003321126400, -0.001641796500,
-    0.001637657900, -0.002504378200,  0.003879253900, -0.003968435100},
-  { -0.000541059600, -0.002918541200,  0.002843043800, -0.000831250300,
-    -0.001634950600,  0.004652450700, -0.008840558000,  0.018188790800,
-    0.305021093200, -0.010312015500,  0.003461182700, -0.001716342200,
-    0.001692059700, -0.002531656000,  0.003892381100, -0.003981307700},
-  { -0.000546470300, -0.002907704700,  0.002836444100, -0.000825608000,
-    -0.001654657700,  0.004701589700, -0.008946113900,  0.018485752400,
-    0.304996474100, -0.010596860500,  0.003601134500, -0.001801009400,
-    0.001736945200, -0.002556816600,  0.003913332400, -0.004004119100},
-  { -0.000553421000, -0.002905324000,  0.002840026900, -0.000820954500,
-    -0.001674129700,  0.004751033800, -0.009052649800,  0.018774565100,
-    0.304980747200, -0.010881885600,  0.003741264500, -0.001885730400,
-    0.001781462400, -0.002592340800,  0.003936717300, -0.004018305800},
-  { -0.000558583500, -0.002894695900,  0.002833775600, -0.000815677100,
-    -0.001693616200,  0.004800033700, -0.009158923400,  0.019063780300,
-    0.304952581400, -0.011174339100,  0.003881652600, -0.001970197900,
-    0.001836677600, -0.002619434800,  0.003959785900, -0.004032488300},
-  { -0.000564955500, -0.002893561300,  0.002828266400, -0.000810671500,
-    -0.001712856100,  0.004849033400, -0.009265048200,  0.019354083600,
-    0.304933847400, -0.011457786400,  0.004022181900, -0.002055659400,
-    0.001882018300, -0.002656075600,  0.003973130000, -0.004055549600},
-  { -0.000569990700, -0.002883172300,  0.002821862700, -0.000805210900,
-    -0.001733255400,  0.004888539700, -0.009370571700,  0.019645015200,
-    0.304913195700, -0.011739650400,  0.004173020900, -0.002132234200,
-    0.001937624600, -0.002683625100,  0.003996648800, -0.004070086100},
-  { -0.000576816700, -0.002880712200,  0.002825556300, -0.000801110200,
-    -0.001751710900,  0.004936537800, -0.009475750900,  0.019935070200,
-    0.304882818800, -0.012021363400,  0.004313763100, -0.002218448800,
-    0.001984116400, -0.002710135300,  0.004018650800, -0.004093587400},
-  { -0.000581575700, -0.002871029700,  0.002820817600, -0.000787003500,
-    -0.001771208200,  0.004984922000, -0.009581223300,  0.020227247700,
-    0.304859324200, -0.012301966200,  0.004453794800, -0.002303557800,
-    0.002039760600, -0.002748740500,  0.004034016500, -0.004107894100},
-  { -0.000587752000, -0.002870343700,  0.002816043200, -0.000782738000,
-    -0.001789823800,  0.005033655500, -0.009688643500,  0.020512328500,
-    0.304843748500, -0.012592772900,  0.004596104100, -0.002391051400,
-    0.002087605700, -0.002776914700,  0.004058501200, -0.004123192100},
-  { -0.000592610900, -0.002860138800,  0.002809924700, -0.000777559700,
-    -0.001809457700,  0.005071968700, -0.009792977800,  0.020805308800,
-    0.304818061900, -0.012872591200,  0.004737013500, -0.002477149500,
-    0.002144535400, -0.002805006000,  0.004081504200, -0.004147500100},
-  { -0.000598855700, -0.002859183800,  0.002804989100, -0.000773711900,
-    -0.001827130700,  0.005119292900, -0.009897966800,  0.021099553600,
-    0.304789228200, -0.013159535100,  0.004888119300, -0.002565148700,
-    0.002191690700, -0.002842615100,  0.004106712900, -0.004163246800},
-  { -0.000604129100, -0.002847973400,  0.002808540700, -0.000770115000,
-    -0.001845151700,  0.005166831300, -0.010003738700,  0.021384603000,
-    0.304761759800, -0.013438827400,  0.005030699900, -0.002642744000,
-    0.002248900100, -0.002872462400,  0.004120956700, -0.004186959300},
-  { -0.000610304100, -0.002847187000,  0.002803718400, -0.000765887200,
-    -0.001863954900,  0.005204656900, -0.010108070800,  0.021680873600,
-    0.304740017400, -0.013726605300,  0.005173599700, -0.002731549500,
-    0.002298070200, -0.002901375100,  0.004145912600, -0.004202808100},
-  { -0.000614775300, -0.002837812200,  0.002799287100, -0.000751378700,
-    -0.001873340800,  0.005251545400, -0.010213985000,  0.021968758500,
-    0.304717226400, -0.014013384600,  0.005315723700, -0.002818772700,
-    0.002355245100, -0.002940735300,  0.004172433300, -0.004219310800},
-  { -0.000620567900, -0.002837320300,  0.002794490100, -0.000747532900,
-    -0.001891056000,  0.005299546400, -0.010309931700,  0.022254934400,
-    0.304685251500, -0.014288738100,  0.005467214000, -0.002908733500,
-    0.002405494900, -0.002971287100,  0.004187192800, -0.004243542100},
-  { -0.000625856800, -0.002826051900,  0.002798242800, -0.000744164300,
-    -0.001909172200,  0.005336339900, -0.010413292700,  0.022552838800,
-    0.304659243200, -0.014574287100,  0.005609909000, -0.002997005100,
-    0.002464760300, -0.003001761400,  0.004213047800, -0.004260008200},
-  { -0.000631862500, -0.002825655200,  0.002794055000, -0.000740960500,
-    -0.001926054500,  0.005382887800, -0.010518612100,  0.022842239000,
-    0.304632697600, -0.014859275700,  0.005753037200, -0.003086221600,
-    0.002513598800, -0.003041041300,  0.004239878600, -0.004276818000},
-  { -0.000636395600, -0.002816103900,  0.002789011800, -0.000737686400,
-    -0.001942767200,  0.005429023200, -0.010623938900,  0.023132882500,
-    0.304603952900, -0.015142040300,  0.005905217400, -0.003175720900,
-    0.002573489500, -0.003072014700,  0.004265540900, -0.004304236600},
-  { -0.000642092900, -0.002815797600,  0.002784613800, -0.000733852000,
-    -0.001961254600,  0.005467201200, -0.010718772800,  0.023422456600,
-    0.304574941900, -0.015425894300,  0.006049293000, -0.003266869300,
-    0.002625535200, -0.003104379700,  0.004282770700, -0.004320158000},
-  { -0.000647228100, -0.002805014900,  0.002789105500, -0.000731700400,
-    -0.001977598200,  0.005513183700, -0.010823907600,  0.023714956500,
-    0.304553789700, -0.015710304400,  0.006194068900, -0.003346361400,
-    0.002683321200, -0.003144467600,  0.004309182300, -0.004346993300},
-  { -0.000653083600, -0.002804663400,  0.002784856700, -0.000728568200,
-    -0.001994892300,  0.005549280000, -0.010927513200,  0.024006627800,
-    0.304521224900, -0.015991075000,  0.006347319100, -0.003438518800,
-    0.002735447600, -0.003175763900,  0.004336078200, -0.004364270700},
-  { -0.000657344200, -0.002795073400,  0.002779372400, -0.000723818600,
-    -0.002002390300,  0.005594924600, -0.011022085400,  0.024298095100,
-    0.304487711300, -0.016272419800,  0.006491186300, -0.003529018000,
-    0.002797300300, -0.003209814400,  0.004354269100, -0.004380801100},
-  { -0.000662778500, -0.002795722300,  0.002777270600, -0.000711766400,
-    -0.002020750200,  0.005631997300, -0.011127576100,  0.024583535100,
-    0.304461685600, -0.016563520800,  0.006636493100, -0.003620768300,
-    0.002848323700, -0.003250508600,  0.004381556100, -0.004408351500},
-  { -0.000667608000, -0.002785075900,  0.002781813700, -0.000709968500,
-    -0.002036501400,  0.005678048700, -0.011222628000,  0.024877740200,
-    0.304434316000, -0.016843034600,  0.006789868500, -0.003712463600,
-    0.002910777700, -0.003284178700,  0.004410227500, -0.004427971200},
-  { -0.000673385900, -0.002784864800,  0.002777897100, -0.000707171500,
-    -0.002053187900,  0.005713078000, -0.011324954000,  0.025171340700,
-    0.304396703900, -0.017122233300,  0.006934475400, -0.003805137400,
-    0.002964408100, -0.003317850200,  0.004428620600, -0.004444717000},
-  { -0.000677353300, -0.002775967700,  0.002773610300, -0.000704737500,
-    -0.002069178100,  0.005759636500, -0.011421394400,  0.025458149700,
-    0.304365892000, -0.017409498600,  0.007088896400, -0.003897094200,
-    0.003025836900, -0.003360743400,  0.004457105300, -0.004473209500},
-  { -0.000683225000, -0.002775689300,  0.002769352400, -0.000700635700,
-    -0.002076469800,  0.005793241800, -0.011523237400,  0.025753901000,
-    0.304334966200, -0.017688142300,  0.007233613500, -0.003988893700,
-    0.003088733700, -0.003394540900,  0.004485759300, -0.004491807700},
-  { -0.000687773900, -0.002765299300,  0.002774214900, -0.000699143000,
-    -0.002091778900,  0.005839096700, -0.011618952200,  0.026040879100,
-    0.304303942000, -0.017967050900,  0.007379100700, -0.004082281200,
-    0.003142614000, -0.003427404600,  0.004512855100, -0.004519537900},
-  { -0.000693472400, -0.002765610600,  0.002771073600, -0.000697223600,
-    -0.002107933500,  0.005874142700, -0.011723107400,  0.026331338900,
-    0.304277893000, -0.018252857000,  0.007534408900, -0.004175833600,
-    0.003206136100, -0.003473370900,  0.004534730300, -0.004538643100},
-  { -0.000697463600, -0.002756676800,  0.002766964300, -0.000695192900,
-    -0.002122896500,  0.005919133800, -0.011817129000,  0.026629304300,
-    0.304240989200, -0.018538518600,  0.007680828300, -0.004270140400,
-    0.003260984500, -0.003507314200,  0.004563753700, -0.004557731900},
-  { -0.000703804500, -0.002754968200,  0.002772071700, -0.000692658900,
-    -0.002129046300,  0.005951839900, -0.011919323000,  0.026918136600,
-    0.304205403100, -0.018813366000,  0.007835360000, -0.004364128800,
-    0.003325426100, -0.003542025400,  0.004592039500, -0.004586402700},
-  { -0.000707548200, -0.002746360600,  0.002768039100, -0.000690246800,
-    -0.002145830400,  0.005988351400, -0.012013907400,  0.027209072700,
-    0.304176499000, -0.019099860600,  0.007984496700, -0.004450296100,
-    0.003379587100, -0.003587618200,  0.004614320900, -0.004606892100},
-  { -0.000713093800, -0.002746934500,  0.002765358600, -0.000689188800,
-    -0.002160148400,  0.006033055000, -0.012109150300,  0.027501099300,
-    0.304145203000, -0.019382840700,  0.008140437800, -0.004545293600,
-    0.003445318600, -0.003624168800,  0.004645205500, -0.004627325000},
-  { -0.000716707400, -0.002738242600,  0.002761221600, -0.000686846600,
-    -0.002176335900,  0.006068547500, -0.012202678300,  0.027791528800,
-    0.304104283300, -0.019666250900,  0.008287779500, -0.004641076300,
-    0.003501561200, -0.003658751600,  0.004673640000, -0.004656297500},
-  { -0.000722876700, -0.002737400900,  0.002768917300, -0.000676615300,
-    -0.002181080700,  0.006110074200, -0.012305860200,  0.028085420100,
-    0.304069875300, -0.019947475400,  0.008443532900, -0.004736314300,
-    0.003566616300, -0.003706438500,  0.004696952300, -0.004676431900},
-  { -0.000726338700, -0.002729093500,  0.002765145400, -0.000674502100,
-    -0.002197280000,  0.006146021300, -0.012401276400,  0.028369440400,
-    0.304036328200, -0.020230886000,  0.008591834800, -0.004833255700,
-    0.003624215600, -0.003742729000,  0.004728140600, -0.004696972400},
-  { -0.000731741100, -0.002729709100,  0.002762428000, -0.000673225600,
-    -0.002212588700,  0.006180633900, -0.012494169800,  0.028662906200,
-    0.304000013700, -0.020511012600,  0.008748066500, -0.004928785800,
-    0.003689348800, -0.003788813700,  0.004759315900, -0.004727789800},
-  { -0.000735386100, -0.002721352900,  0.002758959300, -0.000672109200,
-    -0.002226292500,  0.006224450200, -0.012588365800,  0.028957720600,
-    0.303962072700, -0.020792099600,  0.008896179300, -0.005026132300,
-    0.003747768000, -0.003827110500,  0.004781502000, -0.004747416400},
-  { -0.000741467200, -0.002720193100,  0.002764997300, -0.000670457700,
-    -0.002231939800,  0.006257946300, -0.012682582100,  0.029244511900,
-    0.303933574300, -0.021072898700,  0.009054063500, -0.005123937600,
-    0.003816203000, -0.003865951000,  0.004814396600, -0.004769350200},
-  { -0.000745150400, -0.002711729700,  0.002761387900, -0.000669147800,
-    -0.002246404800,  0.006290380500, -0.012784037700,  0.029540755700,
-    0.303893044500, -0.021352478200,  0.009201932100, -0.005220680700,
-    0.003872318000, -0.003911010800,  0.004845423900, -0.004800157600},
-  { -0.000748453500, -0.002703558700,  0.002757747500, -0.000667691900,
-    -0.002261575500,  0.006324791000, -0.012877926700,  0.029827673100,
-    0.303851724000, -0.021629843300,  0.009359170900, -0.005318693300,
-    0.003941798300, -0.003952016200,  0.004869373400, -0.004820883700},
-  { -0.000753869400, -0.002704376900,  0.002755157700, -0.000665839200,
-    -0.002265346200,  0.006366843000, -0.012972784600,  0.030116858700,
-    0.303818672700, -0.021907914800,  0.009517056100, -0.005416881700,
-    0.004010497500, -0.003990905800,  0.004901022400, -0.004852436300},
-  { -0.000758084800, -0.002694258700,  0.002760975500, -0.000666054000,
-    -0.002279366500,  0.006400355600, -0.013065059600,  0.030415689700,
-    0.303781885400, -0.022195988700,  0.009667243000, -0.005515687900,
-    0.004068687500, -0.004038259800,  0.004935181400, -0.004875341600},
-  { -0.000763249100, -0.002695207900,  0.002758724400, -0.000665508700,
-    -0.002293624700,  0.006433708500, -0.013157852400,  0.030703785700,
-    0.303736794400, -0.022471040100,  0.009824735600, -0.005614528900,
-    0.004139136400, -0.004080198200,  0.004959857600, -0.004896598000},
-  { -0.000766591100, -0.002686928900,  0.002754921900, -0.000662665200,
-    -0.002299129500,  0.006466426100, -0.013251271900,  0.030994692400,
-    0.303698508100, -0.022758266200,  0.009976047300, -0.005715080300,
-    0.004199827500, -0.004118619000,  0.004991603200, -0.004928421800},
-  { -0.000771897700, -0.002688143900,  0.002753279200, -0.000663161200,
-    -0.002311137900,  0.006508681700, -0.013345456800,  0.031285977700,
-    0.303659766600, -0.023032853100,  0.010133649800, -0.005813434400,
-    0.004268203300, -0.004168660700,  0.005027973800, -0.004954054600},
-  { -0.000775874300, -0.002678215700,  0.002759243400, -0.000663934100,
-    -0.002324484400,  0.006541662700, -0.013438640200,  0.031578389200,
-    0.303617696900, -0.023316437000,  0.010294044300, -0.005916048600,
-    0.004331218000, -0.004210712400,  0.005053314100, -0.004976115300},
-  { -0.000781019600, -0.002679339200,  0.002756838700, -0.000661553700,
-    -0.002330048900,  0.006575368200, -0.013522135600,  0.031870307600,
-    0.303587200300, -0.023593760200,  0.010444472000, -0.006015436800,
-    0.004402065400, -0.004251580600,  0.005086442900, -0.005008967600},
-  { -0.000784186200, -0.002671460600,  0.002753849700, -0.000661193300,
-    -0.002343698500,  0.006608303400, -0.013614934700,  0.032163622800,
-    0.303542329100, -0.023875417200,  0.010604498100, -0.006117430000,
-    0.004462875900, -0.004301162100,  0.005122582000, -0.005033354700},
-  { -0.000790060900, -0.002670435300,  0.002760669100, -0.000660699900,
-    -0.002347647400,  0.006639524200, -0.013708092900,  0.032447376800,
-    0.303498774900, -0.024159306200,  0.010756094800, -0.006218141400,
-    0.004535552600, -0.004345436200,  0.005149409700, -0.005056179700},
-  { -0.000793256200, -0.002662733600,  0.002757935000, -0.000660639200,
-    -0.002360988600,  0.006672169900, -0.013801224500,  0.032743987500,
-    0.303460194300, -0.024440923300,  0.010917290800, -0.006321772900,
-    0.004598983100, -0.004386048500,  0.005182927100, -0.005089678500},
-  { -0.000798421400, -0.002663989900,  0.002756297000, -0.000661054500,
-    -0.002373851700,  0.006703786000, -0.013892349300,  0.033037596300,
-    0.303413510200, -0.024710885300,  0.011075401800, -0.006421881700,
-    0.004669293700, -0.004437547500,  0.005220209500, -0.005114783000},
-  { -0.000801279400, -0.002656330700,  0.002752971400, -0.000658573800,
-    -0.002379104500,  0.006737428400, -0.013977140000,  0.033324125700,
-    0.303374972100, -0.024994140700,  0.011228843600, -0.006526058700,
-    0.004734510300, -0.004481928500,  0.005247478500, -0.005138134800},
-  { -0.000807307300, -0.002655561700,  0.002760752200, -0.000660917000,
-    -0.002390857100,  0.006768397200, -0.014068603800,  0.033621534300,
-    0.303332931800, -0.025273538400,  0.011389660100, -0.006628580100,
-    0.004808058900, -0.004525112200,  0.005283024100, -0.005174599300},
-  { -0.000810410400, -0.002647879500,  0.002757788100, -0.000659822800,
-    -0.002392746100,  0.006808149800, -0.014163218900,  0.033911264900,
-    0.303289891500, -0.025552150000,  0.011550770700, -0.006731633300,
-    0.004882070200, -0.004569322900,  0.005320551900, -0.005200360700},
-  { -0.000815493900, -0.002649463500,  0.002756849600, -0.000660759200,
-    -0.002405245800,  0.006840045300, -0.014256420100,  0.034200612800,
-    0.303246711500, -0.025832407000,  0.011703557800, -0.006835218200,
-    0.004945699400, -0.004623184600,  0.005349893100, -0.005224926800},
-  { -0.000818255300, -0.002641882000,  0.002753575300, -0.000658712000,
-    -0.002409717000,  0.006872439200, -0.014340074900,  0.034489243800,
-    0.303202188800, -0.026110236100,  0.011865377600, -0.006939263300,
-    0.005020650000, -0.004667616900,  0.005385875600, -0.005260165300},
-  { -0.000824295400, -0.002641015800,  0.002761659300, -0.000661736600,
-    -0.002420492700,  0.006902452300, -0.014430720500,  0.034789552300,
-    0.303152032300, -0.026395378600,  0.012028731400, -0.007046166400,
-    0.005088017800, -0.004713545300,  0.005414457900, -0.005284879700},
-  { -0.000827077700, -0.002633626200,  0.002758707300, -0.000659803100,
-    -0.002424890300,  0.006934810400, -0.014514347800,  0.035080728500,
-    0.303114481500, -0.026675115000,  0.012182095400, -0.007148973700,
-    0.005161314600, -0.004768172600,  0.005454664900, -0.005312372600},
-  { -0.000832149000, -0.002635253900,  0.002757890500, -0.000661304500,
-    -0.002436456100,  0.006965471700, -0.014606652200,  0.035372382500,
-    0.303065098100, -0.026950110700,  0.012344296500, -0.007255591100,
-    0.005228310500, -0.004812448700,  0.005492759000, -0.005338761500},
-  { -0.000835595400, -0.002625576200,  0.002763550700, -0.000660398000,
-    -0.002441798600,  0.006987700700, -0.014687960800,  0.035664170800,
-    0.303024793500, -0.027226932800,  0.012507686500, -0.007362011400,
-    0.005306264800, -0.004861076400,  0.005521878400, -0.005375829600},
-  { -0.000840529300, -0.002627331400,  0.002763058500, -0.000662228600,
-    -0.002453253700,  0.007018769500, -0.014782113000,  0.035948446100,
-    0.302972042600, -0.027509888900,  0.012671612300, -0.007469387600,
-    0.005372340600, -0.004915494200,  0.005562631500, -0.005403790100},
-  { -0.000843220100, -0.002620023800,  0.002760230300, -0.000660605900,
-    -0.002456982100,  0.007050007700, -0.014864692500,  0.036241695300,
-    0.302928958400, -0.027786579600,  0.012825587300, -0.007574066800,
-    0.005449141300, -0.004962376800,  0.005602376800, -0.005431440200},
-  { -0.000848374500, -0.002621758400,  0.002759921300, -0.000662808200,
-    -0.002467783200,  0.007079958900, -0.014956855300,  0.036538564300,
-    0.302880652200, -0.028068772200,  0.012990451100, -0.007683264800,
-    0.005518700600, -0.005009907900,  0.005630853800, -0.005466715000},
-  { -0.000851700900, -0.002612329100,  0.002766079600, -0.000662984200,
-    -0.002470535200,  0.007110968900, -0.015040742100,  0.036823681900,
-    0.302836038100, -0.028342627700,  0.013153651000, -0.007789506200,
-    0.005594863000, -0.005067111000,  0.005673345500, -0.005495962500},
-  { -0.000856978400, -0.002613369900,  0.002763436900, -0.000673963700,
-    -0.002480246400,  0.007141770500, -0.015122696500,  0.037119392900,
-    0.302785848400, -0.028623546600,  0.013318487200, -0.007897426600,
-    0.005674706600, -0.005118090200,  0.005705570200, -0.005523266400},
-  { -0.000859635800, -0.002606209100,  0.002760875300, -0.000672918600,
-    -0.002482718300,  0.007170544900, -0.015215522800,  0.037407381800,
-    0.302738295200, -0.028897800000,  0.013473662100, -0.008005370600,
-    0.005743489200, -0.005163726600,  0.005743450200, -0.005560237100},
-  { -0.000863002200, -0.002596834100,  0.002767923100, -0.000675974400,
-    -0.002493386100,  0.007201598200, -0.015297293000,  0.037704094600,
-    0.302685277400, -0.029176984600,  0.013637747600, -0.008112433600,
-    0.005820627000, -0.005221758100,  0.005786648100, -0.005590368200},
-  { -0.000867828800, -0.002598670200,  0.002766900000, -0.000675186800,
-    -0.002497981300,  0.007223193600, -0.015379756300,  0.037993797900,
-    0.302642069200, -0.029458517200,  0.013805185000, -0.008225058800,
-    0.005893724000, -0.005272906200,  0.005819685000, -0.005618333200},
-  { -0.000870433100, -0.002591465700,  0.002764455200, -0.000674653700,
-    -0.002499759200,  0.007250951700, -0.015471874400,  0.038284268000,
-    0.302587106700, -0.029736435400,  0.013970133000, -0.008333790400,
-    0.005973581100, -0.005321845400,  0.005859684300, -0.005657037700},
-  { -0.000875301600, -0.002593729700,  0.002764759200, -0.000677160100,
-    -0.002510659300,  0.007282648600, -0.015556232000,  0.038575785600,
-    0.302541430200, -0.030018298000,  0.014128120100, -0.008444322900,
-    0.006045352000, -0.005370854200,  0.005902462900, -0.005689051600},
-  { -0.000878577700, -0.002584426900,  0.002771222400, -0.000678044400,
-    -0.002512230800,  0.007312074800, -0.015638780000,  0.038866667200,
-    0.302496054000, -0.030288050400,  0.014292583100, -0.008553225900,
-    0.006124864000, -0.005432964900,  0.005938417900, -0.005718682200},
-  { -0.000883371200, -0.002586549000,  0.002771330800, -0.000680774600,
-    -0.002522537800,  0.007342861000, -0.015721824200,  0.039157112000,
-    0.302437909100, -0.030564097400,  0.014458560600, -0.008665183400,
-    0.006197183700, -0.005481519600,  0.005978394700, -0.005757587300},
-  { -0.000885670100, -0.002579613300,  0.002768808300, -0.000679473400,
-    -0.002527024400,  0.007363441100, -0.015802899000,  0.039449376300,
-    0.302387399600, -0.030841085500,  0.014625338400, -0.008776679900,
-    0.006280742400, -0.005535923100,  0.006013604000, -0.005787145500},
-  { -0.000891447000, -0.002579042300,  0.002777178000, -0.000681709200,
-    -0.002527331400,  0.007391840300, -0.015884752000,  0.039742056100,
-    0.302336098600, -0.031117719900,  0.014792369000, -0.008889397700,
-    0.006352081900, -0.005595185800,  0.006058727200, -0.005818964100},
-  { -0.000893764400, -0.002572520300,  0.002775953500, -0.000683794500,
-    -0.002538011700,  0.007422582300, -0.015967839100,  0.040036207000,
-    0.302282936600, -0.031394934700,  0.014949546000, -0.008998513600,
-    0.006433987600, -0.005646959300,  0.006102867800, -0.005850311400},
-  { -0.000899005400, -0.002573622600,  0.002772999400, -0.000692720800,
-    -0.002539675700,  0.007441443200, -0.016048205900,  0.040332527300,
-    0.302235443400, -0.031680564700,  0.015119563200, -0.009112249200,
-    0.006519185100, -0.005702277700,  0.006137124600, -0.005890136500},
-  { -0.000902066000, -0.002564399000,  0.002779793900, -0.000694252800,
-    -0.002540354300,  0.007470292100, -0.016132038300,  0.040618118300,
-    0.302181358200, -0.031955488100,  0.015287200700, -0.009226118300,
-    0.006591765300, -0.005762778500,  0.006183472900, -0.005922781400},
-  { -0.000906938700, -0.002566684400,  0.002780297700, -0.000697575600,
-    -0.002549585000,  0.007499502500, -0.016213682700,  0.040913759200,
-    0.302123085100, -0.032226770800,  0.015450858700, -0.009346907400,
-    0.006678209600, -0.005819558300,  0.006220559900, -0.005953802600},
-  { -0.000909073800, -0.002560158500,  0.002778219800, -0.000696753300,
-    -0.002553495700,  0.007519854200, -0.016296539100,  0.041202514700,
-    0.302075447000, -0.032502060800,  0.015620155600, -0.009463128500,
-    0.006754676200, -0.005871819500,  0.006264360200, -0.005997784800},
-  { -0.000914005100, -0.002562081100,  0.002778180000, -0.000697783700,
-    -0.002553821800,  0.007547123000, -0.016377089100,  0.041498813500,
-    0.302013593200, -0.032784352400,  0.015779698800, -0.009574791300,
-    0.006838885700, -0.005925655500,  0.006310258300, -0.006030707600},
-  { -0.000917048000, -0.002553292100,  0.002786094000, -0.000702405400,
-    -0.002562617900,  0.007576990700, -0.016461435000,  0.041789551900,
-    0.301962237800, -0.033057262400,  0.015948108300, -0.009690267000,
-    0.006913942100, -0.005990311300,  0.006349328800, -0.006062933900},
-  { -0.000921807000, -0.002555562000,  0.002785897700, -0.000702731900,
-    -0.002565562900,  0.007595979900, -0.016542771000,  0.042079113900,
-    0.301910604800, -0.033329631800,  0.016116562300, -0.009804671800,
-    0.007000329800, -0.006045818500,  0.006396695800, -0.006096934600},
-  { -0.000924334400, -0.002548160800,  0.002781648600, -0.000711981100,
-    -0.002564257200,  0.007623115300, -0.016625851600,  0.042371265900,
-    0.301854227800, -0.033610088700,  0.016287909800, -0.009922951400,
-    0.007079130900, -0.006101996500,  0.006432255400, -0.006137812800},
-  { -0.000927029000, -0.002539353500,  0.002789348200, -0.000715860200,
-    -0.002576064600,  0.007646012100, -0.016699057600,  0.042661393000,
-    0.301797671500, -0.033890060300,  0.016458330300, -0.010038799500,
-    0.007167086900, -0.006158957400,  0.006480627500, -0.006172693900},
-  { -0.000931902700, -0.002541677100,  0.002789556600, -0.000717300000,
-    -0.002575750000,  0.007673144100, -0.016781259600,  0.042953309700,
-    0.301741305700, -0.034159645200,  0.016627163700, -0.010155742500,
-    0.007243536900, -0.006224969100,  0.006520927200, -0.006205898400},
-  { -0.000933911800, -0.002535183000,  0.002787827800, -0.000716968300,
-    -0.002578831000,  0.007691723300, -0.016861993700,  0.043245651300,
-    0.301682214200, -0.034440183200,  0.016788863600, -0.010270201400,
-    0.007330632700, -0.006281032900,  0.006567502700, -0.006252289300},
-  { -0.000939577700, -0.002534998100,  0.002796975700, -0.000720236600,
-    -0.002578087200,  0.007720653400, -0.016935463200,  0.043538995400,
-    0.301633352100, -0.034711193400,  0.016959520500, -0.010389329800,
-    0.007410503600, -0.006337047100,  0.006615790600, -0.006287412000},
-  { -0.000941518100, -0.002528823500,  0.002796070900, -0.000722919300,
-    -0.002589426200,  0.007740582000, -0.017016393700,  0.043833061900,
-    0.301569791200, -0.034986501900,  0.017129209400, -0.010505114500,
-    0.007497394200, -0.006406316800,  0.006658344700, -0.006322346100},
-  { -0.000946421000, -0.002531073000,  0.002796544700, -0.000724851500,
-    -0.002588324800,  0.007766585900, -0.017097850700,  0.044127692000,
-    0.301505220000, -0.035261474700,  0.017300143900, -0.010624650100,
-    0.007577627400, -0.006462535400,  0.006707002900, -0.006357778700},
-  { -0.000949359500, -0.002521316700,  0.002800927700, -0.000735266600,
-    -0.002588925400,  0.007786312500, -0.017171090300,  0.044413545900,
-    0.301451854500, -0.035540053600,  0.017473398600, -0.010743983400,
-    0.007669196200, -0.006524338300,  0.006746574400, -0.006401639200},
-  { -0.000954362300, -0.002523680400,  0.002801635500, -0.000737454900,
-    -0.002587518900,  0.007812074200, -0.017252787500,  0.044711874800,
-    0.301393202700, -0.035815202400,  0.017645387000, -0.010864711900,
-    0.007750585800, -0.006581589800,  0.006796203400, -0.006438009700},
-  { -0.000956035500, -0.002517691400,  0.002800277200, -0.000737232300,
-    -0.002591035300,  0.007833242200, -0.017326384300,  0.044998869000,
-    0.301337182700, -0.036093943200,  0.017809064300, -0.010981524900,
-    0.007839125400, -0.006652924700,  0.006840684600, -0.006474304300},
-  { -0.000961768900, -0.002517572500,  0.002810197300, -0.000743330300,
-    -0.002599865500,  0.007850982300, -0.017405665400,  0.045296336600,
-    0.301279455500, -0.036359405400,  0.017979361500, -0.011101909300,
-    0.007921089700, -0.006710841700,  0.006891483500, -0.006513718100},
-  { -0.000963551800, -0.002511606900,  0.002809097600, -0.000744270100,
-    -0.002600023100,  0.007880162200, -0.017480905500,  0.045585787000,
-    0.301219274700, -0.036633262700,  0.018151488300, -0.011221145500,
-    0.008012401600, -0.006770837100,  0.006940658100, -0.006560412300},
-  { -0.000968652300, -0.002513137500,  0.002806943500, -0.000754654000,
-    -0.002599054600,  0.007895994400, -0.017561716500,  0.045876647100,
-    0.301155082000, -0.036915500100,  0.018327200500, -0.011345476800,
-    0.008097770300, -0.006833460100,  0.006983825400, -0.006596465200},
-  { -0.000970271500, -0.002507180900,  0.002805563000, -0.000754783900,
-    -0.002601855100,  0.007916113200, -0.017634207100,  0.046165570800,
-    0.301092874000, -0.037187988000,  0.018499388000, -0.011464768800,
-    0.008187619300, -0.006903834600,  0.007038598500, -0.006636191300},
-  { -0.000975884100, -0.002506921900,  0.002815167300, -0.000759066900,
-    -0.002599558300,  0.007943302900, -0.017707594600,  0.046455528400,
-    0.301029284000, -0.037460064500,  0.018672889900, -0.011588469400,
-    0.008272917200, -0.006966950500,  0.007082025300, -0.006672404900},
-  { -0.000977775800, -0.002500954000,  0.002814043200, -0.000759764200,
-    -0.002601193300,  0.007960205400, -0.017789132800,  0.046750583700,
-    0.300971836600, -0.037732212300,  0.018846008900, -0.011709400800,
-    0.008366076000, -0.007028371700,  0.007132703000, -0.006720561000},
-  { -0.000982640700, -0.002503047600,  0.002812783500, -0.000772729700,
-    -0.002609428000,  0.007980042300, -0.017860728900,  0.047040567000,
-    0.300906624700, -0.038005599900,  0.019011206000, -0.011831617600,
-    0.008451307000, -0.007091540900,  0.007176317300, -0.006756891400},
-  { -0.000985371100, -0.002494154700,  0.002820679000, -0.000776398500,
-    -0.002607418500,  0.008007388400, -0.017934700400,  0.047335766700,
-    0.300844278100, -0.038285177900,  0.019186232700, -0.011953311100,
-    0.008543197100, -0.007164042200,  0.007233149500, -0.006798540800},
-  { -0.000987006200, -0.002488366700,  0.002819585000, -0.000777006200,
-    -0.002609399200,  0.008026572200, -0.018006655200,  0.047630120500,
-    0.300783801700, -0.038555831700,  0.019361129300, -0.012079179200,
-    0.008630964100, -0.007229475600,  0.007279247200, -0.006839293900},
-  { -0.000991790800, -0.002490903500,  0.002820404900, -0.000778976000,
-    -0.002609670800,  0.008041528500, -0.018085444700,  0.047923413800,
-    0.300712721600, -0.038822537300,  0.019533132300, -0.012200346800,
-    0.008724921800, -0.007291803100,  0.007330615400, -0.006888043700},
-  { -0.000994223400, -0.002482150700,  0.002828146400, -0.000781936000,
-    -0.002610430800,  0.008060409500, -0.018159587600,  0.048210544400,
-    0.300648793200, -0.039101469100,  0.019710850400, -0.012328366300,
-    0.008814417700, -0.007358544200,  0.007377316500, -0.006926866100},
-  { -0.000999231800, -0.002484009500,  0.002826100200, -0.000792419400,
-    -0.002609247300,  0.008077029200, -0.018229228000,  0.048504934800,
-    0.300585104500, -0.039369675200,  0.019885022200, -0.012451522700,
-    0.008910574100, -0.007423567800,  0.007433072000, -0.006968240600},
-  { -0.001000945500, -0.002478474500,  0.002825789700, -0.000794439900,
-    -0.002607855100,  0.008105184800, -0.018306252700,  0.048797495500,
-    0.300525821900, -0.039647806700,  0.020062891600, -0.012579180400,
-    0.008997547100, -0.007499733800,  0.007482806700, -0.007009147900},
-  { -0.001006580300, -0.002478145100,  0.002835512200, -0.000798497500,
-    -0.002607487200,  0.008121814200, -0.018375427900,  0.049092597200,
-    0.300460428800, -0.039917450300,  0.020228151600, -0.012700466400,
-    0.009092708900, -0.007563628700,  0.007535511600, -0.007059152000},
-  { -0.001008355200, -0.002471553400,  0.002831584800, -0.000808105100,
-    -0.002606745200,  0.008139326600, -0.018448182600,  0.049381202700,
-    0.300391149900, -0.040192877300,  0.020406004000, -0.012829151000,
-    0.009182604800, -0.007628580400,  0.007591957300, -0.007101149600},
-  { -0.001013982200, -0.002471464900,  0.002841559200, -0.000812553500,
-    -0.002606187400,  0.008156499100, -0.018520619000,  0.049672014200,
-    0.300332528600, -0.040460854200,  0.020581902400, -0.012954925100,
-    0.009282076700, -0.007699103200,  0.007641451600, -0.007142203300},
-  { -0.001015410900, -0.002465827800,  0.002840812400, -0.000813752200,
-    -0.002607328400,  0.008174805900, -0.018593391800,  0.049961784800,
-    0.300260370700, -0.040734108300,  0.020758957600, -0.013083002200,
-    0.009369503200, -0.007773543100,  0.007701593500, -0.007189132600},
-  { -0.001020138600, -0.002468794900,  0.002842431500, -0.000816356100,
-    -0.002607611600,  0.008192356500, -0.018666130300,  0.050254997100,
-    0.300195390400, -0.041008289300,  0.020936736300, -0.013210161600,
-    0.009469910200, -0.007844275500,  0.007748911800, -0.007239595400},
-  { -0.001022805800, -0.002458999000,  0.002846963800, -0.000828329300,
-    -0.002605038900,  0.008207999600, -0.018736947600,  0.050544717400,
-    0.300121126000, -0.041280619200,  0.021114682600, -0.013339966800,
-    0.009561255200, -0.007910621800,  0.007806632000, -0.007282763500},
-  { -0.001027526900, -0.002462055200,  0.002848515400, -0.000830876200,
-    -0.002605154700,  0.008224995500, -0.018808660100,  0.050837682400,
-    0.300056546100, -0.041544493000,  0.021290236500, -0.013466505100,
-    0.009661947700, -0.007982526900,  0.007857386900, -0.007324914900},
-  { -0.001029015400, -0.002456559500,  0.002848095500, -0.000832295700,
-    -0.002605985800,  0.008242689200, -0.018881182900,  0.051132245200,
-    0.299987943200, -0.041819414400,  0.021460165700, -0.013595099000,
-    0.009753117800, -0.008049069000,  0.007915606500, -0.007368637400},
-  { -0.001034829400, -0.002455432800,  0.002854963900, -0.000845516700,
-    -0.002603155800,  0.008260465800, -0.018942531200,  0.051423553400,
-    0.299919862100, -0.042091828500,  0.021638799100, -0.013722881700,
-    0.009852191300, -0.008130314500,  0.007966615900, -0.007421596100},
-  { -0.001036184000, -0.002450114700,  0.002854590200, -0.000847135700,
-    -0.002603834000,  0.008278482500, -0.019017700500,  0.051710800600,
-    0.299849767900, -0.042362922600,  0.021817938400, -0.013854742200,
-    0.009945759200, -0.008198836000,  0.008026496300, -0.007466532300},
-  { -0.001037730800, -0.002444743300,  0.002854305800, -0.000848986600,
-    -0.002604044700,  0.008295552500, -0.019090033000,  0.052010247800,
-    0.299784559000, -0.042634176100,  0.021997806500, -0.013987692600,
-    0.010041094600, -0.008271562400,  0.008079345200, -0.007513280300},
-  { -0.001043455200, -0.002444344500,  0.002864501800, -0.000854285500,
-    -0.002602041500,  0.008310446500, -0.019159837900,  0.052305586800,
-    0.299710502400, -0.042902559300,  0.022175330800, -0.014116237900,
-    0.010143265600, -0.008342511600,  0.008140629300, -0.007559512700},
-  { -0.001044875200, -0.002438248600,  0.002860802800, -0.000864181800,
-    -0.002600981100,  0.008329727400, -0.019224621200,  0.052591247500,
-    0.299637947900, -0.043172229900,  0.022355720200, -0.014249993700,
-    0.010239585900, -0.008416132400,  0.008193382200, -0.007603296800},
-  { -0.001049660900, -0.002441463500,  0.002862933200, -0.000867444000,
-    -0.002600374000,  0.008346423900, -0.019298671600,  0.052882824900,
-    0.299571471100, -0.043441724600,  0.022534686200, -0.014379049200,
-    0.010339539800, -0.008496004600,  0.008255099600, -0.007660450500},
-  { -0.001051839000, -0.002432661800,  0.002871064200, -0.000871418100,
-    -0.002599735200,  0.008364846400, -0.019359975400,  0.053178429700,
-    0.299491463500, -0.043720040800,  0.022707641400, -0.014511589100,
-    0.010435528000, -0.008569545100,  0.008307898100, -0.007704528800},
-  { -0.001056944400, -0.002434904100,  0.002869839900, -0.000883216200,
-    -0.002596486400,  0.008379552700, -0.019432499100,  0.053470206400,
-    0.299422575400, -0.043988296500,  0.022887494700, -0.014642563600,
-    0.010540183700, -0.008642947600,  0.008371567300, -0.007752716200},
-  { -0.001059278600, -0.002426308700,  0.002878112600, -0.000887696700,
-    -0.002594827000,  0.008395133400, -0.019505511500,  0.053763206500,
-    0.299351847700, -0.044255915700,  0.023068158700, -0.014777689900,
-    0.010638181300, -0.008718424600,  0.008427026200, -0.007801564500},
-  { -0.001063908000, -0.002429340400,  0.002879382200, -0.000887586200,
-    -0.002586331800,  0.008411993400, -0.019568733800,  0.054053355000,
-    0.299282071600, -0.044524238300,  0.023251997700, -0.014901532300,
-    0.010741407000, -0.008790859100,  0.008487210700, -0.007858185900},
-  { -0.001065244000, -0.002423263600,  0.002875630100, -0.000897083200,
-    -0.002587760600,  0.008421815400, -0.019630506300,  0.054344370000,
-    0.299207159000, -0.044799707800,  0.023436300800, -0.015039485700,
-    0.010841905100, -0.008868051200,  0.008543139300, -0.007904789100},
-  { -0.001071045600, -0.002422944100,  0.002886222600, -0.000903092500,
-    -0.002584785900,  0.008436057700, -0.019701857900,  0.054637916200,
-    0.299132742800, -0.045064497900,  0.023616380100, -0.015174084700,
-    0.010937108800, -0.008952392000,  0.008600802500, -0.007952339000},
-  { -0.001072495600, -0.002416975800,  0.002882721100, -0.000913301400,
-    -0.002582942100,  0.008453838100, -0.019764945900,  0.054929607400,
-    0.299058734900, -0.045332341000,  0.023788158500, -0.015304227600,
-    0.011042483200, -0.009027145700,  0.008665715200, -0.008001667100},
-  { -0.001077376400, -0.002420012800,  0.002885109500, -0.000917271300,
-    -0.002580907300,  0.008468413700, -0.019836708300,  0.055225670900,
-    0.298977325900, -0.045602981800,  0.023970548200, -0.015441580200,
-    0.011142744200, -0.009104537200,  0.008722251100, -0.008048876900},
-  { -0.001079321400, -0.002411773500,  0.002893394800, -0.000920943200,
-    -0.002583378800,  0.008478936300, -0.019901475900,  0.055512440700,
-    0.298911585300, -0.045870162900,  0.024153171400, -0.015576602500,
-    0.011251768000, -0.009181661000,  0.008787159000, -0.008112103700},
-  { -0.001084311600, -0.002413690800,  0.002891307200, -0.000929480500,
-    -0.002571357000,  0.008492748700, -0.019961847400,  0.055805182500,
-    0.298830136900, -0.046141044500,  0.024337335900, -0.015715846500,
-    0.011353693700, -0.009260656400,  0.008844778800, -0.008160197200},
-  { -0.001085440200, -0.002408972300,  0.002891576300, -0.000931811500,
-    -0.002571374100,  0.008512218400, -0.020029308800,  0.056094866900,
-    0.298759763600, -0.046405144200,  0.024519846800, -0.015854163900,
-    0.011454721200, -0.009336453400,  0.008911303700, -0.008211115400},
-  { -0.001087840400, -0.002400214400,  0.002900157200, -0.000936969600,
-    -0.002568721700,  0.008526039100, -0.020100315900,  0.056395501800,
-    0.298682066000, -0.046677919500,  0.024693755800, -0.015986171300,
-    0.011560009200, -0.009425383800,  0.008972850800, -0.008261904500},
-  { -0.001092599200, -0.002402600100,  0.002898882600, -0.000948207200,
-    -0.002568479900,  0.008534249200, -0.020162388700,  0.056680564700,
-    0.298599300000, -0.046947568800,  0.024878475500, -0.016126306100,
-    0.011662794000, -0.009502392800,  0.009040315200, -0.008313510700},
-  { -0.001094674000, -0.002394239600,  0.002907384900, -0.000953100600,
-    -0.002566762900,  0.008551918400, -0.020227896300,  0.056970953100,
-    0.298525257700, -0.047209041900,  0.025060099400, -0.016261962900,
-    0.011773596800, -0.009584221800,  0.009097353100, -0.008372136900},
-  { -0.001099661700, -0.002396213700,  0.002905172800, -0.000960917900,
-    -0.002557753000,  0.008556551400, -0.020285138500,  0.057267599400,
-    0.298446320200, -0.047478375000,  0.025245702300, -0.016403414400,
-    0.011877441200, -0.009662092200,  0.009165535000, -0.008424799700},
-  { -0.001100755900, -0.002391414300,  0.002905602300, -0.000963826400,
-    -0.002557026600,  0.008574970900, -0.020351243300,  0.057560244000,
-    0.298365825000, -0.047747110700,  0.025434302500, -0.016536709400,
-    0.011980096900, -0.009743311000,  0.009226377800, -0.008478483800},
-  { -0.001106899300, -0.002390253900,  0.002913287000, -0.000978876700,
-    -0.002551352000,  0.008590004000, -0.020415253900,  0.057854601300,
-    0.298294423300, -0.048021033600,  0.025612282700, -0.016673561700,
-    0.012092889000, -0.009827928200,  0.009288917500, -0.008530542400},
-  { -0.001107825500, -0.002385153400,  0.002912420300, -0.000977036900,
-    -0.002545865100,  0.008597199400, -0.020476810000,  0.058145551600,
-    0.298212478700, -0.048288066300,  0.025797833300, -0.016816027500,
-    0.012198085900, -0.009907251900,  0.009358594600, -0.008584316600},
-  { -0.001113605200, -0.002384780000,  0.002923485400, -0.000983932400,
-    -0.002542224400,  0.008612798400, -0.020540206700,  0.058438067100,
-    0.298128451900, -0.048553232900,  0.025981636800, -0.016954362300,
-    0.012312002500, -0.009992841500,  0.009421764400, -0.008636872000},
-  { -0.001114931100, -0.002379174400,  0.002919927800, -0.000993979200,
-    -0.002542420300,  0.008620998100, -0.020602200500,  0.058732787100,
-    0.298055673800, -0.048812541600,  0.026165585800, -0.017095016200,
-    0.012413140100, -0.010079579700,  0.009490588100, -0.008700892600},
-  { -0.001119665800, -0.002382694100,  0.002922998700, -0.000998529900,
-    -0.002540198000,  0.008638257800, -0.020669669800,  0.059018701600,
-    0.297970747600, -0.049076921100,  0.026350960600, -0.017238147400,
-    0.012520217600, -0.010164038100,  0.009553595700, -0.008753278600},
-  { -0.001121930300, -0.002372946000,  0.002926808400, -0.001007501500,
-    -0.002530568000,  0.008642272200, -0.020728754500,  0.059312998000,
-    0.297893741900, -0.049347375400,  0.026529402400, -0.017376589500,
-    0.012634266200, -0.010246944100,  0.009626161500, -0.008809499600},
-  { -0.001126794900, -0.002376553600,  0.002930143500, -0.001012468200,
-    -0.002528098100,  0.008659451000, -0.020796619900,  0.059603377300,
-    0.297814833400, -0.049613614700,  0.026720176000, -0.017513336800,
-    0.012740654600, -0.010331978800,  0.009690722000, -0.008866407500},
-  { -0.001128974000, -0.002366817000,  0.002934650000, -0.001025446300,
-    -0.002525885700,  0.008665084700, -0.020855847900,  0.059897161500,
-    0.297721129900, -0.049883464500,  0.026908098600, -0.017658755900,
-    0.012849997300, -0.010418098600,  0.009755024700, -0.008920174300},
-  { -0.001129829700, -0.002362132000,  0.002934410200, -0.001024611700,
-    -0.002517293800,  0.008683823800, -0.020914048900,  0.060185287000,
-    0.297640606500, -0.050147624100,  0.027094554000, -0.017800540400,
-    0.012966752800, -0.010503877000,  0.009829858100, -0.008978175500},
-  { -0.001134965700, -0.002364533600,  0.002933528900, -0.001036539700,
-    -0.002515641700,  0.008689737800, -0.020973444000,  0.060482529200,
-    0.297557115100, -0.050413365200,  0.027273058500, -0.017943142100,
-    0.013074472100, -0.010588375400,  0.009890164700, -0.009040073800},
-  { -0.001136940000, -0.002355925500,  0.002941289900, -0.001037794300,
-    -0.002507997500,  0.008695284800, -0.021036808600,  0.060775711600,
-    0.297482132700, -0.050678910500,  0.027462057700, -0.018090535100,
-    0.013184994200, -0.010672807300,  0.009964812300, -0.009098345900},
-  { -0.001142165600, -0.002358437400,  0.002940699400, -0.001050877900,
-    -0.002502402100,  0.008709501200, -0.021101691400,  0.061067211800,
-    0.297396279600, -0.050939241800,  0.027647756700, -0.018232338700,
-    0.013303147900, -0.010762989400,  0.010032437200, -0.009154686400},
-  { -0.001143817000, -0.002350196200,  0.002949420200, -0.001055769400,
-    -0.002503786900,  0.008721014300, -0.021156852500,  0.061355453400,
-    0.297312718800, -0.051205897900,  0.027831555500, -0.018369198800,
-    0.013411298100, -0.010850127500,  0.010098901500, -0.009213325600},
-  { -0.001149066000, -0.002352278400,  0.002947918700, -0.001065202900,
-    -0.002489611700,  0.008732236600, -0.021220051600,  0.061647632000,
-    0.297221172300, -0.051473353600,  0.028021068000, -0.018517173300,
-    0.013522491900, -0.010935538100,  0.010174446400, -0.009272360200},
-  { -0.001149887200, -0.002347967100,  0.002948573300, -0.001067597300,
-    -0.002492352100,  0.008744611200, -0.021276152500,  0.061941420000,
-    0.297140614200, -0.051734216700,  0.028208189500, -0.018660250400,
-    0.013639306600, -0.011036161100,  0.010246624400, -0.009332105500},
-  { -0.001156099600, -0.002346166500,  0.002954987600, -0.001078834400,
-    -0.002480260300,  0.008746430300, -0.021336172300,  0.062236110400,
-    0.297056151300, -0.052003778300,  0.028400005500, -0.018810443800,
-    0.013752383900, -0.011122203700,  0.010319669900, -0.009400556800},
-  { -0.001156792500, -0.002341776700,  0.002955577100, -0.001081090900,
-    -0.002482874600,  0.008758231200, -0.021390879000,  0.062526684700,
-    0.296965665500, -0.052264429900,  0.028578727400, -0.018955461900,
-    0.013863735500, -0.011211408300,  0.010387174600, -0.009457035400},
-  { -0.001163170100, -0.002339996800,  0.002962141700, -0.001093302800,
-    -0.002466860000,  0.008767593500, -0.021452275300,  0.062822494300,
-    0.296881395600, -0.052523860000,  0.028770277400, -0.019092348700,
-    0.013982426200, -0.011303346500,  0.010456770600, -0.009515365500},
-  { -0.001163895700, -0.002335754800,  0.002963079500, -0.001096137300,
-    -0.002469118700,  0.008780017100, -0.021511634200,  0.063110931400,
-    0.296794244500, -0.052791038800,  0.028962045800, -0.019243677500,
-    0.014097865300, -0.011393027300,  0.010536858700, -0.009581441000},
-  { -0.001170125300, -0.002333956200,  0.002969450300, -0.001107234800,
-    -0.002456863700,  0.008780917600, -0.021569686100,  0.063405648500,
-    0.296709109200, -0.053052763700,  0.029143138800, -0.019391070400,
-    0.014211122400, -0.011483842100,  0.010606181300, -0.009639674100},
-  { -0.001170874500, -0.002329660800,  0.002970330900, -0.001110081400,
-    -0.002459004700,  0.008793030100, -0.021628522100,  0.063695013000,
-    0.296618745800, -0.053317589600,  0.029334344500, -0.019542481200,
-    0.014326849900, -0.011573598100,  0.010685674300, -0.009702145300},
-  { -0.001171914500, -0.002323961500,  0.002966009600, -0.001116909400,
-    -0.002450355900,  0.008799692100, -0.021679886200,  0.063990447900,
-    0.296526171200, -0.053581877800,  0.029529044900, -0.019682702400,
-    0.014449006700, -0.011668677900,  0.010757748000, -0.009762586000},
-  { -0.001178072500, -0.002323403700,  0.002977740500, -0.001125189300,
-    -0.002444614700,  0.008813206900, -0.021746613300,  0.064282383100,
-    0.296436562600, -0.053839700800,  0.029708485400, -0.019829369800,
-    0.014562038800, -0.011759300000,  0.010824029000, -0.009829464000},
-  { -0.001179124900, -0.002317979100,  0.002973757000, -0.001132168000,
-    -0.002435747100,  0.008820504400, -0.021802440100,  0.064574678500,
-    0.296352017200, -0.054105959400,  0.029902690900, -0.019983871100,
-    0.014680546000, -0.011851836600,  0.010906814900, -0.009898260300},
-  { -0.001185031900, -0.002317376800,  0.002984984200, -0.001139351300,
-    -0.002434510900,  0.008828516100, -0.021853498100,  0.064870816200,
-    0.296258886800, -0.054357841800,  0.030089125800, -0.020129945500,
-    0.014804636400, -0.011948361700,  0.010980172100, -0.009959891000},
-  { -0.001186088400, -0.002311933800,  0.002981060500, -0.001146354300,
-    -0.002425750100,  0.008835761000, -0.021908764800,  0.065163770900,
-    0.296172290700, -0.054626925700,  0.030279417600, -0.020274570600,
-    0.014920355400, -0.012042691300,  0.011052809300, -0.010020900500},
-  { -0.001192214700, -0.002310334400,  0.002988338000, -0.001161750800,
-    -0.002421544800,  0.008842662600, -0.021962597300,  0.065452832100,
-    0.296075847400, -0.054887446700,  0.030471019600, -0.020427698700,
-    0.015038441400, -0.012134860100,  0.011134601100, -0.010085579200},
-  { -0.001193029800, -0.002305832600,  0.002988510300, -0.001160745800,
-    -0.002415287100,  0.008851064800, -0.022018328800,  0.065747514100,
-    0.295985303100, -0.055152663300,  0.030655950200, -0.020580030600,
-    0.015157088900, -0.012231165800,  0.011208895700, -0.010148001100},
-  { -0.001199255200, -0.002303988400,  0.002994947800, -0.001172180300,
-    -0.002403060700,  0.008854931500, -0.022070359700,  0.066040074000,
-    0.295894792100, -0.055414282300,  0.030848876200, -0.020731638800,
-    0.015285837100, -0.012331974000,  0.011286215600, -0.010212808300},
-  { -0.001200034300, -0.002300011200,  0.002996071300, -0.001175466100,
-    -0.002404798200,  0.008866742900, -0.022131427200,  0.066328312100,
-    0.295807177000, -0.055667568800,  0.031043216800, -0.020877200500,
-    0.015401999100, -0.012423245400,  0.011365248300, -0.010290103500},
-  { -0.001205321400, -0.002302348400,  0.002994763100, -0.001184119100,
-    -0.002394208300,  0.008871703300, -0.022183982500,  0.066622310400,
-    0.295714067400, -0.055930893500,  0.031228731500, -0.021030519400,
-    0.015521915600, -0.012520884000,  0.011440787900, -0.010353664500},
-  { -0.001207424300, -0.002292788000,  0.002999278000, -0.001198036500,
-    -0.002390705100,  0.008878791700, -0.022237804200,  0.066918218000,
-    0.295617466000, -0.056188447800,  0.031421091300, -0.021185866100,
-    0.015643456400, -0.012619826700,  0.011517277400, -0.010418126800},
-  { -0.001212436700, -0.002296230600,  0.003002379300, -0.001199058000,
-    -0.002383054500,  0.008886317900, -0.022295584100,  0.067206178800,
-    0.295523834300, -0.056451724100,  0.031610777900, -0.021331865900,
-    0.015760653300, -0.012712731400,  0.011600637200, -0.010484290500},
-  { -0.001214616000, -0.002286436600,  0.003006011700, -0.001208867400,
-    -0.002371663200,  0.008890402300, -0.022347745200,  0.067505660900,
-    0.295433201300, -0.056710441700,  0.031804218000, -0.021485136600,
-    0.015891596000, -0.012815991100,  0.011680400300, -0.010551509800},
-  { -0.001219729000, -0.002290053700,  0.003010061800, -0.001214114500,
-    -0.002371512600,  0.008900068000, -0.022406367600,  0.067795719500,
-    0.295335292700, -0.056969680800,  0.031988588100, -0.021638667600,
-    0.016012759800, -0.012915294700,  0.011757803200, -0.010616490000},
-  { -0.001221768100, -0.002280163100,  0.003013484800, -0.001223949400,
-    -0.002359880400,  0.008903658200, -0.022457194700,  0.068091568200,
-    0.295234898600, -0.057225248100,  0.032185366300, -0.021787511700,
-    0.016132334200, -0.013010433300,  0.011843615700, -0.010688812000},
-  { -0.001222885000, -0.002274839200,  0.003009550000, -0.001230956100,
-    -0.002350338500,  0.008909637200, -0.022513896200,  0.068385169700,
-    0.295142943400, -0.057486437700,  0.032372518000, -0.021943625600,
-    0.016255565900, -0.013111568500,  0.011922721200, -0.010755431700},
-  { -0.001228791200, -0.002274200700,  0.003021279300, -0.001238353400,
-    -0.002352971000,  0.008913972000, -0.022561101300,  0.068676416600,
-    0.295047141500, -0.057751817000,  0.032570797200, -0.022105269700,
-    0.016383459600, -0.013216314100,  0.012004282000, -0.010824042300},
-  { -0.001229834600, -0.002268726500,  0.003017029900, -0.001245178500,
-    -0.002343674400,  0.008919626500, -0.022616489300,  0.068966542100,
-    0.294944915100, -0.058008634000,  0.032758671600, -0.022247384700,
-    0.016509174100, -0.013312472500,  0.012086623000, -0.010900887700},
-  { -0.001236321600, -0.002266647300,  0.003023412200, -0.001256945700,
-    -0.002330427000,  0.008922281200, -0.022670102300,  0.069259760100,
-    0.294849437700, -0.058263509000,  0.032953544400, -0.022407065400,
-    0.016635331800, -0.013416137200,  0.012167754700, -0.010969358900},
-  { -0.001237037300, -0.002262428500,  0.003023848100, -0.001256128400,
-    -0.002324464800,  0.008933910800, -0.022719357000,  0.069553175900,
-    0.294752983200, -0.058521997300,  0.033144550900, -0.022556496100,
-    0.016757477900, -0.013517704400,  0.012247285200, -0.011036494600},
-  { -0.001243631400, -0.002260491700,  0.003031143500, -0.001272367300,
-    -0.002318660300,  0.008938942400, -0.022774221100,  0.069848353600,
-    0.294654140800, -0.058774188400,  0.033338099000, -0.022715294600,
-    0.016882921900, -0.013617730300,  0.012337731100, -0.011112979600},
-  { -0.001244616700, -0.002255007200,  0.003026834400, -0.001278495600,
-    -0.002312971700,  0.008936004500, -0.022826323700,  0.070143346800,
-    0.294550501800, -0.059037642400,  0.033527611400, -0.022874644300,
-    0.017009920100, -0.013722251500,  0.012419958100, -0.011182377900},
-  { -0.001249868500, -0.002258640400,  0.003030359000, -0.001279931900,
-    -0.002305315700,  0.008946945700, -0.022879051900,  0.070434097200,
-    0.294460157000, -0.059293518700,  0.033729073000, -0.023029828700,
-    0.017136721300, -0.013827892600,  0.012503092200, -0.011252540100},
-  { -0.001252011800, -0.002248666800,  0.003033725600, -0.001289637300,
-    -0.002293460500,  0.008949854300, -0.022931857800,  0.070729691900,
-    0.294357625700, -0.059546703200,  0.033913734300, -0.023182283200,
-    0.017269467600, -0.013934406600,  0.012586727200, -0.011323121700},
-  { -0.001257327400, -0.002251340000,  0.003033306900, -0.001302187900,
-    -0.002294842900,  0.008953591700, -0.022981051800,  0.071016115000,
-    0.294253594500, -0.059806163900,  0.034116321500, -0.023338009400,
-    0.017396575200, -0.014036439400,  0.012678155200, -0.011396549400},
-  { -0.001259366100, -0.002242376300,  0.003041364800, -0.001304581400,
-    -0.002285404200,  0.008958134900, -0.023035573000,  0.071318036600,
-    0.294155332000, -0.060059835200,  0.034302863600, -0.023496551600,
-    0.017523724800, -0.014142299300,  0.012762833200, -0.011472239700},
-  { -0.001264793200, -0.002244873300,  0.003040255700, -0.001313420800,
-    -0.002274742400,  0.008966178100, -0.023084721700,  0.071604519400,
-    0.294053570900, -0.060314068800,  0.034495386400, -0.023649793700,
-    0.017653808300, -0.014239964400,  0.012843156400, -0.011540516700},
-  { -0.001266776300, -0.002234895800,  0.003043324900, -0.001322245300,
-    -0.002267675400,  0.008965455900, -0.023127290700,  0.071902922400,
-    0.293950616300, -0.060571265600,  0.034693878200, -0.023814273900,
-    0.017784544000, -0.014343601700,  0.012932068300, -0.011623815900},
-  { -0.001272408000, -0.002238111400,  0.003046799700, -0.001323837000,
-    -0.002258841200,  0.008970913900, -0.023185828700,  0.072198731500,
-    0.293850684700, -0.060823698800,  0.034885265900, -0.023966290300,
-    0.017910112100, -0.014448925000,  0.013015910500, -0.011694882200},
-  { -0.001274483600, -0.002228201400,  0.003050212200, -0.001333772300,
-    -0.002247134700,  0.008978152700, -0.023234912400,  0.072492005600,
-    0.293746271400, -0.061079622500,  0.035084175400, -0.024131925000,
-    0.018043115400, -0.014559744600,  0.013103666900, -0.011769115200},
-  { -0.001275293500, -0.002223339400,  0.003046802300, -0.001344236100,
-    -0.002249832100,  0.008982191000, -0.023282772800,  0.072780111500,
-    0.293638750200, -0.061329463600,  0.035275317400, -0.024284154200,
-    0.018169987600, -0.014666643200,  0.013189357000, -0.011845461600},
-  { -0.001282008300, -0.002220878800,  0.003053154500, -0.001356054900,
-    -0.002236664600,  0.008988073400, -0.023330451200,  0.073072951600,
-    0.293533527800, -0.061588331200,  0.035466290700, -0.024446846900,
-    0.018300582900, -0.014771995300,  0.013284279500, -0.011922344800},
-  { -0.001282913700, -0.002216603000,  0.003053533900, -0.001354819600,
-    -0.002234495000,  0.008991178300, -0.023379395200,  0.073372194300,
-    0.293431988400, -0.061843667600,  0.035669418700, -0.024601980400,
-    0.018440114900, -0.014885760000,  0.013374412100, -0.011998777300},
-  { -0.001289852900, -0.002213970900,  0.003059661400, -0.001366666100,
-    -0.002220358400,  0.008991998000, -0.023433472500,  0.073667719600,
-    0.293326498300, -0.062091368600,  0.035856112000, -0.024762400200,
-    0.018570057000, -0.014994590500,  0.013461432300, -0.012072689000},
-  { -0.001290828100, -0.002208668300,  0.003055268400, -0.001372665000,
-    -0.002215250000,  0.008992759700, -0.023479470700,  0.073961694600,
-    0.293216599600, -0.062347556700,  0.036051519300, -0.024918766800,
-    0.018700312600, -0.015104288800,  0.013548919900, -0.012146903000},
-  { -0.001297565000, -0.002206188900,  0.003061515200, -0.001384640400,
-    -0.002201711800,  0.008998523600, -0.023530332000,  0.074248575600,
-    0.293108050300, -0.062599496300,  0.036250520900, -0.025085987100,
-    0.018835062100, -0.015213765300,  0.013648384700, -0.012231594800},
-  { -0.001298486200, -0.002201990500,  0.003061911500, -0.001383193600,
-    -0.002199540200,  0.009001070400, -0.023577987000,  0.074548400000,
-    0.293006277700, -0.062848029800,  0.036443834300, -0.025242884300,
-    0.018970177400, -0.015316494200,  0.013733603800, -0.012304800000},
-  { -0.001305173000, -0.002199287800,  0.003067771800, -0.001393998700,
-    -0.002190657800,  0.008998337100, -0.023620522900,  0.074841359700,
-    0.292893802300, -0.063101285300,  0.036634397500, -0.025407276700,
-    0.019104315500, -0.015429059800,  0.013823584100, -0.012381206600},
-  { -0.001306486000, -0.002193998000,  0.003063717500, -0.001401081300,
-    -0.002180765400,  0.009007040500, -0.023673990600,  0.075136252200,
-    0.292786821600, -0.063356530800,  0.036831074500, -0.025565504100,
-    0.019236546600, -0.015541317500,  0.013913853300, -0.012457823800},
-  { -0.001313321900, -0.002191380800,  0.003069674600, -0.001412157700,
-    -0.002171714300,  0.009004937300, -0.023721555300,  0.075427591700,
-    0.292680753800, -0.063607547900,  0.037031767000, -0.025735481500,
-    0.019375159900, -0.015657767200,  0.014007257400, -0.012537078000},
-  { -0.001314354900, -0.002186268300,  0.003065150800, -0.001417698000,
-    -0.002167557500,  0.009010001600, -0.023759323400,  0.075724712100,
-    0.292576319400, -0.063853917500,  0.037225319700, -0.025892093800,
-    0.019506037600, -0.015764904400,  0.014104155900, -0.012616476800},
-  { -0.001321218400, -0.002184458600,  0.003076233500, -0.001422547300,
-    -0.002156670200,  0.009017151300, -0.023810871100,  0.076019700600,
-    0.292466530500, -0.064106762900,  0.037421391100, -0.026050975100,
-    0.019639469300, -0.015878862800,  0.014196955700, -0.012699499300},
-  { -0.001322405100, -0.002179145600,  0.003071783900, -0.001428408900,
-    -0.002151344500,  0.009017528200, -0.023860018100,  0.076314227000,
-    0.292354833000, -0.064357589600,  0.037613307800, -0.026218842900,
-    0.019781456700, -0.015987370400,  0.014287400700, -0.012776898100},
-  { -0.001329411400, -0.002176246500,  0.003077588100, -0.001439416300,
-    -0.002142422000,  0.009015226300, -0.023906702500,  0.076607212500,
-    0.292243989500, -0.064609585900,  0.037810235300, -0.026378597000,
-    0.019915634000, -0.016100609100,  0.014374613700, -0.012862479300},
-  { -0.001331821400, -0.002165817700,  0.003080409800, -0.001449188900,
-    -0.002130265600,  0.009021448800, -0.023957398700,  0.076903557900,
-    0.292129090700, -0.064858733100,  0.038005130000, -0.026536730800,
-    0.020047933100, -0.016209483700,  0.014473806100, -0.012943770500},
-  { -0.001332912300, -0.002160549700,  0.003075666900, -0.001454699900,
-    -0.002125747900,  0.009026360900, -0.023998381000,  0.077196425000,
-    0.292014040700, -0.065102449400,  0.038203933500, -0.026707041800,
-    0.020188140300, -0.016328233200,  0.014569262800, -0.013025077600},
-  { -0.001339767200, -0.002158494200,  0.003086316400, -0.001458535300,
-    -0.002119522600,  0.009025408000, -0.024045414700,  0.077491289100,
-    0.291898436700, -0.065350608700,  0.038399388600, -0.026866946500,
-    0.020323488600, -0.016444050200,  0.014663919000, -0.013110011800},
-  { -0.001341225900, -0.002153019500,  0.003081710900, -0.001464447200,
-    -0.002114130700,  0.009025651700, -0.024094239400,  0.077792721000,
-    0.291786795400, -0.065599338300,  0.038596149400, -0.027027766200,
-    0.020459538900, -0.016560228700,  0.014758176300, -0.013190641200},
-  { -0.001348116400, -0.002150215500,  0.003087524600, -0.001475208500,
-    -0.002105937200,  0.009027973200, -0.024136747400,  0.078077054200,
-    0.291673553600, -0.065848400700,  0.038789809200, -0.027198631300,
-    0.020605326600, -0.016672927800,  0.014852276800, -0.013270943900},
-  { -0.001349842500, -0.002144524900,  0.003082911700, -0.001481921800,
-    -0.002095570400,  0.009035188200, -0.024188073400,  0.078381474100,
-    0.291557196100, -0.066093324400,  0.038984672800, -0.027358305900,
-    0.020740566100, -0.016789045200,  0.014946715800, -0.013351892900},
-  { -0.001357082800, -0.002141367000,  0.003088470800, -0.001492702300,
-    -0.002087255200,  0.009036993800, -0.024226476800,  0.078678890800,
-    0.291445410400, -0.066341740000,  0.039182293600, -0.027520351800,
-    0.020877384400, -0.016902143900,  0.015049535100, -0.013436720300},
-  { -0.001358430400, -0.002135814900,  0.003082938500, -0.001493462900,
-    -0.002074639200,  0.009034254800, -0.024276630700,  0.078972791400,
-    0.291332516600, -0.066588317200,  0.039375542700, -0.027690881700,
-    0.021019023100, -0.017023199600,  0.015149195700, -0.013526024300},
-  { -0.001365518600, -0.002132688700,  0.003088416900, -0.001504139700,
-    -0.002066451500,  0.009036431600, -0.024318259900,  0.079258669800,
-    0.291213669600, -0.066833494600,  0.039572395400, -0.027853162500,
-    0.021157264500, -0.017142104300,  0.015245837400, -0.013608286800},
-  { -0.001366787300, -0.002128108700,  0.003088564100, -0.001502425900,
-    -0.002064956100,  0.009042893100, -0.024359858000,  0.079560972200,
-    0.291093788100, -0.067075438600,  0.039767446600, -0.028015676300,
-    0.021300179900, -0.017253688600,  0.015339335300, -0.013689059900},
-  { -0.001374342300, -0.002124476100,  0.003093955600, -0.001513509600,
-    -0.002055553100,  0.009039889200, -0.024409237700,  0.079856769100,
-    0.290971758300, -0.067326482200,  0.039967168700, -0.028180320800,
-    0.021440417100, -0.017374226900,  0.015437926100, -0.013773229200},
-  { -0.001376849300, -0.002113994500,  0.003096377800, -0.001522077700,
-    -0.002048697200,  0.009043386000, -0.024453193600,  0.080155270500,
-    0.290861113600, -0.067572563200,  0.040162405000, -0.028357551400,
-    0.021577567700, -0.017494757400,  0.015536744300, -0.013857978600},
-  { -0.001383359700, -0.002115681000,  0.003094623000, -0.001529706600,
-    -0.002042499600,  0.009046978300, -0.024496193000,  0.080448884900,
-    0.290742857900, -0.067815030400,  0.040359106100, -0.028520619600,
-    0.021716480000, -0.017610720400,  0.015643569600, -0.013950756900},
-  { -0.001385829000, -0.002104702000,  0.003095698800, -0.001533174400,
-    -0.002027861900,  0.009041815800, -0.024543547500,  0.080744453800,
-    0.290621547300, -0.068055928700,  0.040555731500, -0.028685336800,
-    0.021861411400, -0.017724211200,  0.015739387800, -0.014033359700},
-  { -0.001392505100, -0.002106039500,  0.003093740800, -0.001540744900,
-    -0.002021575300,  0.009045183800, -0.024586190700,  0.081040072300,
-    0.290494347700, -0.068302308800,  0.040754474000, -0.028850387900,
-    0.022002842700, -0.017846481100,  0.015839406100, -0.014118938600},
-  { -0.001395190900, -0.002095226400,  0.003095699600, -0.001548946600,
-    -0.002014963700,  0.009048347000, -0.024629081800,  0.081340267800,
-    0.290377478100, -0.068542945900,  0.040946718000, -0.029021815100,
-    0.022146976500, -0.017970542200,  0.015941116300, -0.014206281900},
-  { -0.001401882300, -0.002096680100,  0.003093691000, -0.001556387000,
-    -0.002008669700,  0.009051397000, -0.024670766100,  0.081635398000,
-    0.290253164200, -0.068780397800,  0.041142095700, -0.029185104300,
-    0.022287585300, -0.018092816300,  0.016042263500, -0.014297586900},
-  { -0.001404564500, -0.002085806300,  0.003095765300, -0.001564993600,
-    -0.002001893100,  0.009055027000, -0.024718526100,  0.081930443400,
-    0.290131292800, -0.069028755000,  0.041343948500, -0.029354488900,
-    0.022437490000, -0.018211358000,  0.016142525900, -0.014383790400},
-  { -0.001411478900, -0.002086898100,  0.003092724100, -0.001567128600,
-    -0.001988704700,  0.009055155500, -0.024758694700,  0.082230235800,
-    0.290011569200, -0.069267292000,  0.041541189800, -0.029519935000,
-    0.022579662500, -0.018334760000,  0.016243913500, -0.014471061400},
-  { -0.001414337900, -0.002075770200,  0.003094262100, -0.001575159300,
-    -0.001982046700,  0.009058174200, -0.024801087800,  0.082532448100,
-    0.289888685100, -0.069503998900,  0.041737590700, -0.029689051900,
-    0.022713561300, -0.018449559000,  0.016349891900, -0.014559627800},
-  { -0.001416907600, -0.002064831500,  0.003096053600, -0.001582625700,
-    -0.001980678900,  0.009054717400, -0.024845070000,  0.082826383600,
-    0.289764874500, -0.069755255200,  0.041932542200, -0.029856412200,
-    0.022863023200, -0.018567891400,  0.016450370300, -0.014646034300},
-  { -0.001423747700, -0.002066861800,  0.003098336700, -0.001577810900,
-    -0.001970699600,  0.009057517500, -0.024891262300,  0.083121682100,
-    0.289643060400, -0.069991474400,  0.042129344000, -0.030022736600,
-    0.023006696000, -0.018693430700,  0.016554974400, -0.014740487700},
-  { -0.001426747600, -0.002055331700,  0.003099557300, -0.001585752700,
-    -0.001964069200,  0.009060147700, -0.024932767200,  0.083425985400,
-    0.289510095600, -0.070230755300,  0.042326526200, -0.030188546200,
-    0.023150063400, -0.018818329000,  0.016657963500, -0.014829329300},
-  { -0.001434061400, -0.002056302800,  0.003097143300, -0.001592655700,
-    -0.001958070000,  0.009063562600, -0.024979066000,  0.083722905800,
-    0.289383840200, -0.070462608200,  0.042516727200, -0.030361552500,
-    0.023301552900, -0.018938392400,  0.016759937100, -0.014917519700},
-  { -0.001436913900, -0.002044866400,  0.003097508000, -0.001595199500,
-    -0.001944654100,  0.009063774800, -0.025022964500,  0.084018453400,
-    0.289257793800, -0.070696301300,  0.042714039500, -0.030533338900,
-    0.023439043400, -0.019061283500,  0.016861988700, -0.015005498900},
-  { -0.001445044100, -0.002040355800,  0.003101858000, -0.001604479400,
-    -0.001941756600,  0.009058701400, -0.025064553400,  0.084313384800,
-    0.289127389400, -0.070941485100,  0.042906585900, -0.030698827600,
-    0.023583328300, -0.019187203800,  0.016966497900, -0.015095192700},
-  { -0.001447330000, -0.002034312100,  0.003096284800, -0.001609315800,
-    -0.001937412700,  0.009063501400, -0.025112304400,  0.084617972200,
-    0.289002944200, -0.071173336500,  0.043102902900, -0.030866540700,
-    0.023733865500, -0.019307909900,  0.017070271400, -0.015190068200},
-  { -0.001455518600, -0.002029502500,  0.003099574200, -0.001613820700,
-    -0.001923185400,  0.009067220900, -0.025147413900,  0.084911325500,
-    0.288870320800, -0.071411887600,  0.043302468300, -0.031035919800,
-    0.023880818700, -0.019436707600,  0.017176704600, -0.015281581500},
-  { -0.001457861300, -0.002023130000,  0.003093622800, -0.001617413500,
-    -0.001924642300,  0.009065729600, -0.025192315000,  0.085215783300,
-    0.288739140200, -0.071653858800,  0.043494252000, -0.031201529400,
-    0.024025743900, -0.019563622700,  0.017282467800, -0.015372811900},
-  { -0.001466497000, -0.002018075200,  0.003096710200, -0.001621883700,
-    -0.001909503200,  0.009063993200, -0.025234780000,  0.085517904200,
-    0.288613216300, -0.071884560100,  0.043691563100, -0.031375546100,
-    0.024169673500, -0.019676404700,  0.017390367400, -0.015464035900},
-  { -0.001469685300, -0.002006309300,  0.003097408700, -0.001629128000,
-    -0.001904355000,  0.009073340000, -0.025278532500,  0.085809125600,
-    0.288475887700, -0.072118967800,  0.043889313200, -0.031543979900,
-    0.024316777100, -0.019805930700,  0.017497985500, -0.015556426100},
-  { -0.001477449400, -0.002006818100,  0.003094518400, -0.001634855100,
-    -0.001903992100,  0.009069894600, -0.025320844800,  0.086112304400,
-    0.288347603800, -0.072351635400,  0.044077625700, -0.031707875300,
-    0.024461035300, -0.019933041100,  0.017605115800, -0.015654004700},
-  { -0.001480767400, -0.001994653500,  0.003094108300, -0.001636592700,
-    -0.001891836000,  0.009074959300, -0.025357212300,  0.086414765800,
-    0.288212217900, -0.072585572700,  0.044276425800, -0.031879037500,
-    0.024614982500, -0.020057087700,  0.017710651600, -0.015745786000},
-  { -0.001488858500, -0.001993991000,  0.003085609100, -0.001648979900,
-    -0.001888369000,  0.009070080400, -0.025403194900,  0.086711998100,
-    0.288078851000, -0.072825294900,  0.044470365700, -0.032052144100,
-    0.024755980300, -0.020183755000,  0.017817156300, -0.015837646000},
-  { -0.001492305300, -0.001981877500,  0.003085015800, -0.001650306000,
-    -0.001876815400,  0.009076396600, -0.025444714700,  0.087007865500,
-    0.287948850700, -0.073051883700,  0.044666232000, -0.032220613500,
-    0.024903471000, -0.020314095600,  0.017925901000, -0.015931594800},
-  { -0.001501262300, -0.001976310900,  0.003088203600, -0.001658952100,
-    -0.001873996900,  0.009070381000, -0.025484515600,  0.087312662900,
-    0.287808844900, -0.073281372400,  0.044862930000, -0.032390709200,
-    0.025057752300, -0.020438589400,  0.018033299200, -0.016030164800},
-  { -0.001503969900, -0.001969379300,  0.003080858100, -0.001657013000,
-    -0.001864713500,  0.009078560600, -0.025527589100,  0.087611730400,
-    0.287669639200, -0.073516228400,  0.045054475300, -0.032563221800,
-    0.025198358100, -0.020565897500,  0.018140302000, -0.016122658700},
-  { -0.001513327100, -0.001963597200,  0.003083968700, -0.001665725900,
-    -0.001862252200,  0.009073875600, -0.025573878100,  0.087916911500,
-    0.287535419700, -0.073748515200,  0.045259152900, -0.032729171400,
-    0.025351871200, -0.020690412400,  0.018247246600, -0.016215838300},
-  { -0.001516114100, -0.001956698100,  0.003076434500, -0.001663416900,
-    -0.001853404200,  0.009082036700, -0.025616230100,  0.088215611900,
-    0.287398826600, -0.073974168600,  0.045445650100, -0.032893481400,
-    0.025497283800, -0.020820608400,  0.018361514000, -0.016303461100},
-  { -0.001525545100, -0.001950784000,  0.003079287600, -0.001671519700,
-    -0.001851968500,  0.009083077500, -0.025655699800,  0.088518791800,
-    0.287263294400, -0.074204448300,  0.045645401700, -0.033070898400,
-    0.025642665600, -0.020951717000,  0.018471685500, -0.016399128000},
-  { -0.001529263800, -0.001938044200,  0.003078214900, -0.001672419000,
-    -0.001840528300,  0.009088750200, -0.025695953100,  0.088817903900,
-    0.287119707900, -0.074435467900,  0.045835202700, -0.033239161900,
-    0.025796245500, -0.021077164200,  0.018580469200, -0.016498716200},
-  { -0.001538275800, -0.001937151500,  0.003074065100, -0.001676983800,
-    -0.001841296500,  0.009086549100, -0.025743532000,  0.089126683900,
-    0.286977836300, -0.074664683000,  0.046023517900, -0.033404937000,
-    0.025943420100, -0.021207672000,  0.018690756000, -0.016594569100},
-  { -0.001542197500, -0.001924344300,  0.003072425300, -0.001676580800,
-    -0.001835675000,  0.009085971800, -0.025781349400,  0.089429913200,
-    0.286843179800, -0.074884840400,  0.046219477100, -0.033581867500,
-    0.026093533900, -0.021331826000,  0.018797704300, -0.016688282800},
-  { -0.001546377000, -0.001910937800,  0.003070488600, -0.001676528000,
-    -0.001825134600,  0.009092452800, -0.025821879500,  0.089731283500,
-    0.286693376000, -0.075110245000,  0.046405855900, -0.033746731200,
-    0.026239733700, -0.021462324800,  0.018907663300, -0.016783704800},
-  { -0.001555232200, -0.001910366600,  0.003066530900, -0.001681411600,
-    -0.001826242300,  0.009095852900, -0.025867448300,  0.090031502000,
-    0.286552421600, -0.075335881700,  0.046610354100, -0.033919719800,
-    0.026389844800, -0.021587898200,  0.019017118400, -0.016884247400},
-  { -0.001559561500, -0.001896839700,  0.003064309200, -0.001680332600,
-    -0.001821529400,  0.009096027200, -0.025905423200,  0.090337279400,
-    0.286407594900, -0.075562967900,  0.046799004200, -0.034087052200,
-    0.026538690300, -0.021720457700,  0.019128983200, -0.016981596000},
-  { -0.001569153000, -0.001894703800,  0.003054176700, -0.001691600600,
-    -0.001814795900,  0.009104248700, -0.025952532400,  0.090639789400,
-    0.286262228400, -0.075788745300,  0.046987841400, -0.034255105000,
-    0.026693327400, -0.021847402400,  0.019238909500, -0.017077386900},
-  { -0.001573670100, -0.001880890400,  0.003051424200, -0.001690153500,
-    -0.001810064900,  0.009104300700, -0.025990224500,  0.090946916500,
-    0.286112971700, -0.076007137400,  0.047182370700, -0.034430712700,
-    0.026838198900, -0.021978862300,  0.019350009900, -0.017174506000},
-  { -0.001583828300, -0.001873935800,  0.003052700600, -0.001692015100,
-    -0.001803039800,  0.009103004000, -0.026032138000,  0.091251439600,
-    0.285975563800, -0.076238222500,  0.047381154500, -0.034597273100,
-    0.026994361100, -0.022107866200,  0.019462639700, -0.017278016500},
-  { -0.001587867000, -0.001865780400,  0.003044301800, -0.001692821000,
-    -0.001807759500,  0.009109488100, -0.026079677000,  0.091556728800,
-    0.285823700200, -0.076458633000,  0.047567511000, -0.034768617100,
-    0.027136848800, -0.022237957200,  0.019573449500, -0.017374543300},
-  { -0.001598323500, -0.001858063000,  0.003044500800, -0.001693384100,
-    -0.001801618700,  0.009107820400, -0.026115241800,  0.091863686900,
-    0.285671811500, -0.076679031600,  0.047753629900, -0.034936118500,
-    0.027291613500, -0.022364869500,  0.019683203200, -0.017470863500},
-  { -0.001603558400, -0.001843678200,  0.003041601400, -0.001692544800,
-    -0.001791780100,  0.009115656500, -0.026162495500,  0.092174773000,
-    0.285524247500, -0.076901860200,  0.047947719600, -0.035103343800,
-    0.027432475300, -0.022494731800,  0.019794038100, -0.017567749800},
-  { -0.001613422400, -0.001841112200,  0.003030366000, -0.001701864700,
-    -0.001792125700,  0.009123179000, -0.026199049700,  0.092474868600,
-    0.285372738700, -0.077116537300,  0.048141797500, -0.035275280700,
-    0.027591688900, -0.022626375700,  0.019908421800, -0.017673081200},
-  { -0.001618684700, -0.001826555800,  0.003026957800, -0.001699564500,
-    -0.001788644700,  0.009124739900, -0.026242686200,  0.092784329800,
-    0.285223614300, -0.077336969100,  0.048328815000, -0.035443127000,
-    0.027742539400, -0.022762632500,  0.020029767800, -0.017767797800},
-  { -0.001629703000, -0.001818503700,  0.003027010500, -0.001700124000,
-    -0.001782837800,  0.009124974400, -0.026290376100,  0.093086772800,
-    0.285077698000, -0.077560338000,  0.048525355700, -0.035614488000,
-    0.027892719100, -0.022889140600,  0.020140353900, -0.017864500900},
-  { -0.001634392700, -0.001809252200,  0.003016455700, -0.001693615300,
-    -0.001782780900,  0.009129169500, -0.026335334700,  0.093393907400,
-    0.284916529600, -0.077771874700,  0.048706755700, -0.035778114400,
-    0.028040064200, -0.023021819100,  0.020253539400, -0.017963440300},
-  { -0.001645793200, -0.001800824700,  0.003016678700, -0.001699031600,
-    -0.001784607900,  0.009137987500, -0.026373328800,  0.093702911100,
-    0.284764041400, -0.077988760200,  0.048893523500, -0.035952564600,
-    0.028191490700, -0.023149218600,  0.020364436200, -0.018061008600},
-  { -0.001651378600, -0.001785770200,  0.003012636900, -0.001696266500,
-    -0.001781460200,  0.009139701600, -0.026416553200,  0.094014760000,
-    0.284608657200, -0.078204266000,  0.049084885500, -0.036119295000,
-    0.028333282800, -0.023280404100,  0.020477739000, -0.018165847100},
-  { -0.001662265200, -0.001781999900,  0.002999487700, -0.001698314300,
-    -0.001777143500,  0.009146283300, -0.026457830700,  0.094316696700,
-    0.284457324700, -0.078421164800,  0.049272679100, -0.036289687800,
-    0.028492007500, -0.023412213700,  0.020592415900, -0.018266186600},
-  { -0.001668313800, -0.001766316400,  0.002994642500, -0.001694643800,
-    -0.001774906500,  0.009148770700, -0.026501577500,  0.094630560000,
-    0.284297024000, -0.078632258000,  0.049461377000, -0.036454574300,
-    0.028632330500, -0.023541974700,  0.020703740000, -0.018364139000},
-  { -0.001680418200, -0.001756770400,  0.002992954400, -0.001693172900,
-    -0.001771057900,  0.009150120900, -0.026549370400,  0.094937302500,
-    0.284139414500, -0.078843755900,  0.049644890900, -0.036622085000,
-    0.028788840800, -0.023671874000,  0.020817422100, -0.018463951300},
-  { -0.001686115500, -0.001746931600,  0.002982552200, -0.001691727400,
-    -0.001778570200,  0.009164052800, -0.026591723800,  0.095258665900,
-    0.283981176300, -0.079052887900,  0.049827569900, -0.036793287300,
-    0.028933443100, -0.023805663500,  0.020933121700, -0.018571534300},
-  { -0.001698209200, -0.001736659300,  0.002974894800, -0.001696435000,
-    -0.001772231300,  0.009168743300, -0.026630607200,  0.095561100700,
-    0.283824708400, -0.079266196800,  0.050019918900, -0.036957408700,
-    0.029090435800, -0.023942524200,  0.021041132500, -0.018668595300},
-  { -0.001704658800, -0.001720493300,  0.002969448100, -0.001691965100,
-    -0.001770702400,  0.009171925300, -0.026679621900,  0.095870802000,
-    0.283660491100, -0.079472717100,  0.050201664600, -0.037129754000,
-    0.029241121700, -0.024070689600,  0.021159356200, -0.018761561600},
-  { -0.001717442700, -0.001710235900,  0.002967018600, -0.001689724600,
-    -0.001768308200,  0.009180232100, -0.026722407800,  0.096183264500,
-    0.283504106100, -0.079683587600,  0.050392415300, -0.037297550600,
-    0.029384739600, -0.024204158900,  0.021274150600, -0.018862478100},
-  { -0.001723295500, -0.001699869700,  0.002955079600, -0.001681516300,
-    -0.001770832400,  0.009192163800, -0.026767354800,  0.096492955100,
-    0.283337590700, -0.079887593500,  0.050578218900, -0.037457346700,
-    0.029538083300, -0.024333413500,  0.021388132400, -0.018968488000},
-  { -0.001736577200, -0.001687977400,  0.002945624400, -0.001683731000,
-    -0.001771162500,  0.009186304800, -0.026811221400,  0.096806832700,
-    0.283171957600, -0.080100778400,  0.050764840500, -0.037632549500,
-    0.029686120900, -0.024469290200,  0.021505473200, -0.019071619200},
-  { -0.001743866400, -0.001670904800,  0.002939243500, -0.001678044700,
-    -0.001772074700,  0.009197158400, -0.026855831200,  0.097122904600,
-    0.283008922400, -0.080311308100,  0.050945404700, -0.037790101700,
-    0.029837934200, -0.024597228000,  0.021617945900, -0.019170951200},
-  { -0.001756624600, -0.001665754600,  0.002930209300, -0.001677015500,
-    -0.001779605600,  0.009211401200, -0.026902305100,  0.097436064800,
-    0.282834989500, -0.080507440900,  0.051121120600, -0.037958156200,
-    0.029986133000, -0.024723351000,  0.021728932000, -0.019269257400},
-  { -0.001764156100, -0.001648349000,  0.002923256000, -0.001670895300,
-    -0.001780604500,  0.009222427700, -0.026946759500,  0.097753369800,
-    0.282668132600, -0.080708954700,  0.051306676900, -0.038122909500,
-    0.030128070300, -0.024856282600,  0.021844654800, -0.019377155600},
-  { -0.001778008400, -0.001635839700,  0.002912741900, -0.001671632200,
-    -0.001783286000,  0.009223573800, -0.026984567000,  0.098066057000,
-    0.282503350600, -0.080910856000,  0.051487224000, -0.038289759200,
-    0.030286004000, -0.024988398200,  0.021960407900, -0.019479635100},
-  { -0.001785075000, -0.001624082400,  0.002899683900, -0.001662356200,
-    -0.001786186700,  0.009231168400, -0.027042545900,  0.098383808800,
-    0.282326299200, -0.081120147400,  0.051668545300, -0.038454440300,
-    0.030434707800, -0.025122240000,  0.022073795700, -0.019570606700},
-  { -0.001799471600, -0.001611646700,  0.002894723100, -0.001657398400,
-    -0.001786417100,  0.009241521900, -0.027086143300,  0.098702548800,
-    0.282153907600, -0.081315971000,  0.051850662000, -0.038616812900,
-    0.030574773900, -0.025253455800,  0.022187350300, -0.019671249500},
-  { -0.001808127200, -0.001592362400,  0.002880377400, -0.001655707600,
-    -0.001785903000,  0.009251959300, -0.027135898100,  0.099021663300,
-    0.281989192800, -0.081515568600,  0.052030462600, -0.038783583100,
-    0.030733042100, -0.025387269800,  0.022306311600, -0.019782364100},
-  { -0.001822507700, -0.001579820600,  0.002875237500, -0.001649711300,
-    -0.001792635900,  0.009256393500, -0.027175974500,  0.099338786400,
-    0.281816351400, -0.081716496200,  0.052207335300, -0.038945254600,
-    0.030878936400, -0.025512202200,  0.022416781800, -0.019880568400},
-  { -0.001830818000, -0.001566710200,  0.002860056400, -0.001637727000,
-    -0.001799068700,  0.009272886300, -0.027230252500,  0.099657892600,
-    0.281637176300, -0.081905722200,  0.052385802800, -0.039105374000,
-    0.031017613200, -0.025642740200,  0.022530400400, -0.019981165400},
-  { -0.001845760100, -0.001552740800,  0.002847881000, -0.001636760100,
-    -0.001804192200,  0.009282507800, -0.027269207300,  0.099967050900,
-    0.281460005200, -0.082107814900,  0.052574179500, -0.039274706000,
-    0.031169977600, -0.025773553200,  0.022645343300, -0.020082641400},
-  { -0.001855192900, -0.001533110500,  0.002838490600, -0.001627660100,
-    -0.001808517000,  0.009296869200, -0.027321921500,  0.100291413500,
-    0.281286138200, -0.082304345000,  0.052741885600, -0.039434316600,
-    0.031323202100, -0.025903756400,  0.022761936700, -0.020192073400},
-  { -0.001869926500, -0.001525588000,  0.002826213600, -0.001617884900,
-    -0.001812957700,  0.009311303900, -0.027373640000,  0.100609916000,
-    0.281103932300, -0.082490397700,  0.052919415400, -0.039594468800,
-    0.031463335700, -0.026042393200,  0.022877455000, -0.020285435000},
-  { -0.001879711300, -0.001504548000,  0.002809677500, -0.001613216100,
-    -0.001820868000,  0.009318026600, -0.027421788700,  0.100932867600,
-    0.280922614500, -0.082692676700,  0.053098254300, -0.039758154000,
-    0.031611536400, -0.026169842500,  0.022990763600, -0.020386038100},
-  { -0.001896148500, -0.001489715900,  0.002802122100, -0.001605491000,
-    -0.001823983800,  0.009331442300, -0.027473598000,  0.101258880600,
-    0.280742505700, -0.082878251100,  0.053275619900, -0.039919465700,
-    0.031757335000, -0.026295748600,  0.023102669400, -0.020486105200},
-  { -0.001906217800, -0.001469185600,  0.002791306400, -0.001593896400,
-    -0.001837111200,  0.009347882600, -0.027518324200,  0.101581276800,
-    0.280564653200, -0.083070602600,  0.053441716200, -0.040078628800,
-    0.031911263600, -0.026426870800,  0.023219719400, -0.020596163500},
-  { -0.001922140900, -0.001459273400,  0.002770198900, -0.001581275300,
-    -0.001835136600,  0.009358983900, -0.027567373500,  0.101900357800,
-    0.280377353300, -0.083256870000,  0.053610471900, -0.040233651400,
-    0.032046118400, -0.026554662000,  0.023331738800, -0.020695687800},
-  { -0.001933077600, -0.001437420100,  0.002757857900, -0.001568643300,
-    -0.001848435300,  0.009370146400, -0.027619025000,  0.102229591200,
-    0.280184129200, -0.083442004400,  0.053787235200, -0.040395032300,
-    0.032192706400, -0.026681026200,  0.023444081100, -0.020796180800},
-  { -0.001950196300, -0.001421126700,  0.002743236000, -0.001565501700,
-    -0.001850389700,  0.009389127400, -0.027669483100,  0.102547554800,
-    0.280004451900, -0.083632987700,  0.053961014100, -0.040555637300,
-    0.032339646100, -0.026814717500,  0.023552023700, -0.020894037400},
-  { -0.001960990100, -0.001399562800,  0.002731039900, -0.001552949300,
-    -0.001863555500,  0.009399847000, -0.027719967200,  0.102875847200,
-    0.279815921900, -0.083810986900,  0.054134314800, -0.040714985700,
-    0.032485359700, -0.026941818000,  0.023672059200, -0.020996580900},
-  { -0.001978335000, -0.001388824500,  0.002715202100, -0.001538161700,
-    -0.001879709700,  0.009419594300, -0.027767473800,  0.103205041100,
-    0.279619234800, -0.083997214900,  0.054302452500, -0.040870290800,
-    0.032621932300, -0.027071437200,  0.023785545000, -0.021097697500},
-  { -0.001990835900, -0.001364801200,  0.002695060500, -0.001530065500,
-    -0.001885898300,  0.009436950100, -0.027828661600,  0.103538923200,
-    0.279432441200, -0.084179631800,  0.054468678800, -0.041018806300,
-    0.032768596100, -0.027197497600,  0.023898644100, -0.021198957800},
-  { -0.002009220500, -0.001347505300,  0.002684579000, -0.001518047500,
-    -0.001900093500,  0.009455425900, -0.027880462700,  0.103861290100,
-    0.279243346600, -0.084361255500,  0.054635449300, -0.041174711300,
-    0.032911712700, -0.027321991400,  0.024009912800, -0.021298248700},
-  { -0.002021097800, -0.001323447400,  0.002663196100, -0.001502518600,
-    -0.001906698600,  0.009462422300, -0.027927521300,  0.104190543900,
-    0.279042526200, -0.084538637100,  0.054809534600, -0.041335183200,
-    0.033058704200, -0.027455391500,  0.024118477100, -0.021403770100},
-  { -0.002040050600, -0.001311257700,  0.002645934000, -0.001486507400,
-    -0.001918547800,  0.009490451500, -0.027986541700,  0.104526215400,
-    0.278849784900, -0.084713840400,  0.054965250700, -0.041491644800,
-    0.033194974400, -0.027586029200,  0.024240038400, -0.021501456000},
-  { -0.002053034800, -0.001286367400,  0.002624167700, -0.001475643600,
-    -0.001933711100,  0.009510206500, -0.028039339300,  0.104851735700,
-    0.278653475900, -0.084889121800,  0.055128391400, -0.041644581200,
-    0.033335865400, -0.027708847400,  0.024350066900, -0.021599986800},
-  { -0.002073264900, -0.001266673600,  0.002611261800, -0.001461338600,
-    -0.001949621100,  0.009524686500, -0.028099508700,  0.105189430300,
-    0.278450786400, -0.085067297700,  0.055292010700, -0.041798158600,
-    0.033477267300, -0.027831832100,  0.024460899000, -0.021699539700},
-  { -0.002086264900, -0.001241753500,  0.002589582900, -0.001451556400,
-    -0.001957811700,  0.009549327200, -0.028154247100,  0.105517476900,
-    0.278250526200, -0.085239563600,  0.055460095600, -0.041944857600,
-    0.033615404000, -0.027960051300,  0.024565652100, -0.021801611400},
-  { -0.002106926400, -0.001221321700,  0.002575063400, -0.001429511100,
-    -0.001970246700,  0.009568367500, -0.028207292800,  0.105852072900,
-    0.278047516100, -0.085416983300,  0.055624216900, -0.042099685900,
-    0.033757782300, -0.028084273300,  0.024677037500, -0.021901583000},
-  { -0.002120617500, -0.001202056000,  0.002552535400, -0.001408007500,
-    -0.001993279700,  0.009595095600, -0.028266589600,  0.106192034600,
-    0.277843916500, -0.085583072500,  0.055780937400, -0.042248483600,
-    0.033896113600, -0.028206269200,  0.024793027300, -0.021995201800},
-  { -0.002142396800, -0.001179865400,  0.002530754500, -0.001396393300,
-    -0.002009028700,  0.009610046500, -0.028326674100,  0.106531925400,
-    0.277639650500, -0.085747792700,  0.055936365900, -0.042394273800,
-    0.034025320000, -0.028330041100,  0.024903208900, -0.022094548100},
-  { -0.002157159200, -0.001153285000,  0.002512274500, -0.001370844300,
-    -0.002024860800,  0.009632664400, -0.028388245500,  0.106864987700,
-    0.277432448700, -0.085921130000,  0.056098971500, -0.042548622300,
-    0.034168711000, -0.028462099000,  0.025011964800, -0.022199944300},
-  { -0.002179375900, -0.001130552500,  0.002489758900, -0.001358263800,
-    -0.002042234800,  0.009654833100, -0.028443348800,  0.107203619900,
-    0.277226300200, -0.086083834300,  0.056253954500, -0.042695656200,
-    0.034305305000, -0.028581781400,  0.025119808500, -0.022297564100},
-  { -0.002195061100, -0.001108669600,  0.002464213000, -0.001333423100,
-    -0.002068874300,  0.009685232500, -0.028506052900,  0.107550806200,
-    0.277004327300, -0.086243310500,  0.056405162700, -0.042840028100,
-    0.034439922500, -0.028700012900,  0.025226614100, -0.022394383100},
-  { -0.002217436800, -0.001085689500,  0.002440979000, -0.001314845000,
-    -0.002074387600,  0.009710099800, -0.028567755500,  0.107884769000,
-    0.276798805200, -0.086406171500,  0.056561115200, -0.042988680400,
-    0.034577788700, -0.028822677500,  0.025344724600, -0.022496001600},
-  { -0.002234052300, -0.001056977600,  0.002420334600, -0.001292564500,
-    -0.002099057700,  0.009738656200, -0.028628118700,  0.108230473600,
-    0.276581678800, -0.086558899300,  0.056708946400, -0.043130672100,
-    0.034711343700, -0.028946376900,  0.025445511400, -0.022589602700},
-  { -0.002257986500, -0.001032008700,  0.002395334200, -0.001277542100,
-    -0.002119185700,  0.009764314400, -0.028692402200,  0.108569779600,
-    0.276361694700, -0.086719885800,  0.056868813300, -0.043271529100,
-    0.034844676000, -0.029064307100,  0.025552190100, -0.022685765900},
-  { -0.002275798800, -0.001001252000,  0.002366059500, -0.001252260400,
-    -0.002137523800,  0.009790138000, -0.028757551100,  0.108916066600,
-    0.276151572300, -0.086882727400,  0.057015156000, -0.043413931200,
-    0.034977723200, -0.029181547900,  0.025659050200, -0.022782491400},
-  { -0.002299519300, -0.000983084300,  0.002341848700, -0.001227918200,
-    -0.002164204600,  0.009821204200, -0.028826112600,  0.109260641300,
-    0.275924294400, -0.087035380900,  0.057163011400, -0.043556341700,
-    0.035112146900, -0.029306783100,  0.025762575100, -0.022884324300},
-  { -0.002318342500, -0.000951184900,  0.002311491600, -0.001207356700,
-    -0.002190231800,  0.009858208200, -0.028883563000,  0.109614224000,
-    0.275705340200, -0.087183966300,  0.057307956100, -0.043694747100,
-    0.035236477300, -0.029428661900,  0.025877315200, -0.022977857000},
-  { -0.002343785600, -0.000924936400,  0.002290080300, -0.001177431500,
-    -0.002211532800,  0.009886431100, -0.028949989000,  0.109957830700,
-    0.275481985700, -0.087329639600,  0.057457528900, -0.043828523400,
-    0.035363736500, -0.029541639900,  0.025980032600, -0.023071295000},
-  { -0.002363396600, -0.000891896000,  0.002258762900, -0.001155997700,
-    -0.002237980900,  0.009918196800, -0.029019980500,  0.110312292600,
-    0.275252475700, -0.087485388500,  0.057598214300, -0.043965976300,
-    0.035494092700, -0.029663348400,  0.026080272800, -0.023164098500},
-  { -0.002389152800, -0.000865190200,  0.002236651900, -0.001124397300,
-    -0.002266843400,  0.009941856300, -0.029083534200,  0.110654857700,
-    0.275027780000, -0.087628679600,  0.057741079400, -0.044111852100,
-    0.035620616000, -0.029776226200,  0.026184102500, -0.023265168600},
-  { -0.002409751900, -0.000831096900,  0.002203852900, -0.001101449700,
-    -0.002295711000,  0.009982935500, -0.029157146400,  0.111004330000,
-    0.274797647300, -0.087777694100,  0.057893310100, -0.044247467300,
-    0.035750612400, -0.029893238400,  0.026296883500, -0.023356224600},
-  { -0.002436583600, -0.000809275400,  0.002174932100, -0.001065376500,
-    -0.002322951600,  0.010016783300, -0.029228839400,  0.111361951300,
-    0.274567466000, -0.087919930200,  0.058025057300, -0.044378805200,
-    0.035875683000, -0.030010656200,  0.026393710400, -0.023446642300},
-  { -0.002458072800, -0.000774072300,  0.002140548500, -0.001040420000,
-    -0.002353097400,  0.010052135800, -0.029301943900,  0.111721745400,
-    0.274333594900, -0.088052895500,  0.058159209800, -0.044509951300,
-    0.036000215000, -0.030121514300,  0.026496227300, -0.023547531800},
-  { -0.002486798400, -0.000743082100,  0.002107901300, -0.001010435600,
-    -0.002377569500,  0.010090405600, -0.029366888100,  0.112076957700,
-    0.274096422800, -0.088200445900,  0.058300810100, -0.044638462800,
-    0.036123651800, -0.030232021100,  0.026596958900, -0.023639414500},
-  { -0.002509178900, -0.000707489700,  0.002079209800, -0.000979178500,
-    -0.002412292800,  0.010130406600, -0.029450197300,  0.112436237300,
-    0.273857995500, -0.088329074400,  0.058431854000, -0.044767731000,
-    0.036247749400, -0.030349857900,  0.026701008800, -0.023725485500},
-  { -0.002538546200, -0.000675641700,  0.002045354700, -0.000947146600,
-    -0.002444944300,  0.010165016900, -0.029513195500,  0.112791388300,
-    0.273618006800, -0.088473828000,  0.058572790800, -0.044902786100,
-    0.036367072300, -0.030457501700,  0.026799344000, -0.023815374100},
-  { -0.002562081700, -0.000638597900,  0.002015094700, -0.000913965300,
-    -0.002481943700,  0.010207398600, -0.029598886400,  0.113154412600,
-    0.273374591600, -0.088603102200,  0.058693934100, -0.045025119300,
-    0.036484791400, -0.030563119800,  0.026898455900, -0.023913083300},
-  { -0.002592531600, -0.000611735800,  0.001974049600, -0.000877067200,
-    -0.002513122700,  0.010252711500, -0.029676327000,  0.113513193200,
-    0.273125908800, -0.088732072900,  0.058832779800, -0.045150554000,
-    0.036606443900, -0.030679000400,  0.026993402700, -0.024001590900},
-  { -0.002617432700, -0.000572476600,  0.001934940900, -0.000846562800,
-    -0.002549947700,  0.010301351000, -0.029750846500,  0.113886584200,
-    0.272881898500, -0.088859686000,  0.058953274300, -0.045271977200,
-    0.036723589400, -0.030784892400,  0.027097712600, -0.024087333600},
-  { -0.002648556200, -0.000539287700,  0.001905685000, -0.000806920200,
-    -0.002588198100,  0.010335223100, -0.029830210100,  0.114246195000,
-    0.272637989000, -0.088988209700,  0.059082508900, -0.045398291800,
-    0.036835959600, -0.030886948300,  0.027193422300, -0.024182088200},
-  { -0.002675426700, -0.000497529300,  0.001863568800, -0.000773306300,
-    -0.002628339500,  0.010387943600, -0.029915068400,  0.114620841300,
-    0.272380972500, -0.089107334300,  0.059206370700, -0.045521223000,
-    0.036954725600, -0.031000132500,  0.027286742200, -0.024270058800},
-  { -0.002708812100, -0.000461001300,  0.001824188800, -0.000735439500,
-    -0.002661448300,  0.010435538400, -0.029994677500,  0.114983831800,
-    0.272129953900, -0.089228688900,  0.059329528700, -0.045634938700,
-    0.037065976700, -0.031100796100,  0.027379891900, -0.024355993600},
-  { -0.002735490700, -0.000419849000,  0.001788462900, -0.000689215900,
-    -0.002707124200,  0.010482924400, -0.030075860600,  0.115356267200,
-    0.271872904900, -0.089354351300,  0.059449185200, -0.045758252600,
-    0.037192230500, -0.031210219100,  0.027478273400, -0.024437594700},
-  { -0.002768719300, -0.000389873200,  0.001744376300, -0.000654868000,
-    -0.002747163000,  0.010528906800, -0.030164681700,  0.115727569700,
-    0.271612337400, -0.089466219000,  0.059565965700, -0.045873231900,
-    0.037295135500, -0.031304965400,  0.027568162200, -0.024528121700},
-  { -0.002798079400, -0.000344868200,  0.001697477500, -0.000608943300,
-    -0.002794808000,  0.010579370800, -0.030249393200,  0.116105596800,
-    0.271346326500, -0.089576437400,  0.059689822100, -0.045986571500,
-    0.037406419500, -0.031405176100,  0.027660621000, -0.024614179100},
-  { -0.002834574300, -0.000305400500,  0.001661742100, -0.000568717900,
-    -0.002840569000,  0.010637555700, -0.030338939200,  0.116487577100,
-    0.271082832700, -0.089682984500,  0.059794346400, -0.046095149100,
-    0.037513479000, -0.031508865800,  0.027746587900, -0.024696294000},
-  { -0.002863090600, -0.000261546500,  0.001616196800, -0.000524060200,
-    -0.002886726400,  0.010686302700, -0.030421218200,  0.116863187300,
-    0.270824597700, -0.089796024200,  0.059912731300, -0.046212603400,
-    0.037619046000, -0.031606514800,  0.027845171900, -0.024784044100},
-  { -0.002900989400, -0.000219487800,  0.001570599400, -0.000479303700,
-    -0.002927315300,  0.010742257600, -0.030515733500,  0.117240864200,
-    0.270554278500, -0.089907403100,  0.060028342200, -0.046320155000,
-    0.037725963100, -0.031710668200,  0.027931517600, -0.024865514300},
-  { -0.002939110000, -0.000177806100,  0.001531519200, -0.000428383200,
-    -0.002978759900,  0.010796286200, -0.030603272900,  0.117623618000,
-    0.270285855600, -0.090009416000,  0.060137232300, -0.046429802200,
-    0.037824453100, -0.031801130600,  0.028016349500, -0.024945375600},
-  { -0.002971404300, -0.000129367200,  0.001481455800, -0.000385645100,
-    -0.003028924400,  0.010859951400, -0.030704739700,  0.118009163200,
-    0.270004747300, -0.090110535200,  0.060237393200, -0.046534338000,
-    0.037928400600, -0.031903279600,  0.028108476700, -0.025021832500},
-  { -0.003010799000, -0.000085506800,  0.001433304900, -0.000337127500,
-    -0.003080051000,  0.010914101700, -0.030792208700,  0.118393292300,
-    0.269732724800, -0.090208244500,  0.060342765300, -0.046633690800,
-    0.038028249000, -0.031994340000,  0.028194618000, -0.025109965600},
-  { -0.003043352800, -0.000043286100,  0.001376710400, -0.000282666000,
-    -0.003129872000,  0.010978749000, -0.030894968100,  0.118781343500,
-    0.269453183200, -0.090299385000,  0.060444527700, -0.046738202500,
-    0.038128681100, -0.032076686500,  0.028274348700, -0.025185554200},
-  { -0.003084097600,  0.000001652200,  0.001334856800, -0.000235221900,
-    -0.003190341200,  0.011040895200, -0.030996156800,  0.119168850700,
-    0.269167050700, -0.090401757000,  0.060542535700, -0.046832398400,
-    0.038225851900, -0.032173379200,  0.028361984300, -0.025257897700},
-  { -0.003118681600,  0.000052969800,  0.001280388200, -0.000180668100,
-    -0.003240720400,  0.011105920600, -0.031092550300,  0.119563660200,
-    0.268880111900, -0.090484913100,  0.060629970500, -0.046933803100,
-    0.038315834400, -0.032256880200,  0.028442350400, -0.025341820300},
-  { -0.003162561900,  0.000102202900,  0.001226211900, -0.000125395300,
-    -0.003299906800,  0.011175918200, -0.031191167100,  0.119959312000,
-    0.268593285800, -0.090577351800,  0.060731151800, -0.047029530200,
-    0.038413339800, -0.032353226800,  0.028521763200, -0.025418085200},
-  { -0.003199268400,  0.000156014300,  0.001168676900, -0.000066919400,
-    -0.003361438800,  0.011241308700, -0.031296168100,  0.120353034900,
-    0.268302409700, -0.090656855500,  0.060822958600, -0.047124517500,
-    0.038499397300, -0.032433214400,  0.028598264500, -0.025491004800},
-  { -0.003242762700,  0.000204180800,  0.001122626500, -0.000008679700,
-    -0.003414828400,  0.011309574900, -0.031402432600,  0.120754514200,
-    0.268015321100, -0.090745034900,  0.060911299100, -0.047212175500,
-    0.038596766500, -0.032520166800,  0.028679119400, -0.025558748500},
-  { -0.003280931700,  0.000259812600,  0.001063521800,  0.000044884500,
-    -0.003483800400,  0.011387738000, -0.031508074100,  0.121152150800,
-    0.267711413800, -0.090822485700,  0.061000604600, -0.047304659400,
-    0.038681603800, -0.032600073600,  0.028755960800, -0.025638962100},
-  { -0.003327797000,  0.000312623600,  0.001004973300,  0.000105206400,
-    -0.003548028100,  0.011456238300, -0.031616336600,  0.121558234900,
-    0.267415888400, -0.090894622700,  0.061086213100, -0.047387160100,
-    0.038767569400, -0.032686245400,  0.028827467700, -0.025709333200},
-  { -0.003367277200,  0.000369742900,  0.000943784400,  0.000167921300,
-    -0.003614337200,  0.011526657700, -0.031726469200,  0.121966313400,
-    0.267117532200, -0.090972059800,  0.061166435400, -0.047473566900,
-    0.038846825400, -0.032761339500,  0.028907556300, -0.025775412400},
-  { -0.003415490600,  0.000424433200,  0.000883119400,  0.000230091300,
-    -0.003674451700,  0.011609993400, -0.031842624600,  0.122364892800,
-    0.266807297400, -0.091041565400,  0.061249320900, -0.047553631700,
-    0.038930581400, -0.032847149600,  0.028979555600, -0.025852313500},
-  { -0.003456266600,  0.000475867100,  0.000822340300,  0.000303040600,
-    -0.003749535300,  0.011688497100, -0.031960441800,  0.122782327100,
-    0.266496871700, -0.091106317700,  0.061319593900, -0.047633284300,
-    0.039010819600, -0.032912027100,  0.029044984700, -0.025916736900},
-  { -0.003505638300,  0.000531731300,  0.000760093900,  0.000367747300,
-    -0.003818881300,  0.011769073200, -0.032068754900,  0.123192522800,
-    0.266191486300, -0.091168632300,  0.061398326100, -0.047717396700,
-    0.039088687600, -0.032993298700,  0.029119110500, -0.025979190500},
-  { -0.003550040600,  0.000594828700,  0.000692495800,  0.000430866400,
-    -0.003898279700,  0.011852192100, -0.032198029300,  0.123611901100,
-    0.265868569100, -0.091231578000,  0.061464903000, -0.047784155800,
-    0.039161387400, -0.033061913700,  0.029187959100, -0.026053040700},
-  { -0.003602065500,  0.000653931700,  0.000626385600,  0.000499981800,
-    -0.003972488800,  0.011937971200, -0.032311531400,  0.124029148500,
-    0.265553269700, -0.091283444100,  0.061535070700, -0.047860778200,
-    0.039232475500, -0.033136595000,  0.029249328200, -0.026115105800},
-  { -0.003647327300,  0.000718027400,  0.000556866100,  0.000572266200,
-    -0.004049722900,  0.012020034000, -0.032439785200,  0.124448392000,
-    0.265233959000, -0.091339033000,  0.061597170100, -0.047925510600,
-    0.039309873100, -0.033199111900,  0.029320278800, -0.026173704500},
-  { -0.003702105200,  0.000780101600,  0.000494443100,  0.000649052900,
-    -0.004123793300,  0.012117690200, -0.032570746200,  0.124873224300,
-    0.264900163300, -0.091383468500,  0.061659588400, -0.047995635500,
-    0.039375017600, -0.033269511800,  0.029378736300, -0.026232862100},
-  { -0.003755895200,  0.000841447500,  0.000425856500,  0.000720904000,
-    -0.004201204700,  0.012206896600, -0.032687548300,  0.125295550200,
-    0.264577145700, -0.091434512400,  0.061726016900, -0.048060026200,
-    0.039436382500, -0.033329672000,  0.029438925700, -0.026300063600},
-  { -0.003803350600,  0.000908270600,  0.000353021900,  0.000796996500,
-    -0.004282623500,  0.012293251100, -0.032819571200,  0.125720795200,
-    0.264247652100, -0.091479732400,  0.061780340600, -0.048117964600,
-    0.039508550400, -0.033394973500,  0.029502101900, -0.026353317400},
-  { -0.003861457500,  0.000974841200,  0.000278697700,  0.000875358500,
-    -0.004367158600,  0.012390643600, -0.032952152900,  0.126156834400,
-    0.263910245800, -0.091525806900,  0.061834912800, -0.048182001300,
-    0.039568933000, -0.033460776600,  0.029556965600, -0.026409434000},
-  { -0.003912507000,  0.001045891900,  0.000200514600,  0.000957623400,
-    -0.004455578400,  0.012491700600, -0.033087770300,  0.126588986000,
-    0.263570751000, -0.091552786700,  0.061883959100, -0.048240646500,
-    0.039624070900, -0.033515051500,  0.029612627700, -0.026473220500},
-  { -0.003970051000,  0.001111797200,  0.000126628900,  0.001035742900,
-    -0.004539881200,  0.012588312500, -0.033218503400,  0.127016546500,
-    0.263234790300, -0.091590421200,  0.061932964300, -0.048301375000,
-    0.039688914300, -0.033575106100,  0.029670790800, -0.026522150600},
-  { -0.004024302800,  0.001186615500,  0.000044341700,  0.001122432500,
-    -0.004633631600,  0.012695304100, -0.033360614900,  0.127463754300,
-    0.262888924200, -0.091617477500,  0.061978479200, -0.048340055700,
-    0.039737596900, -0.033623583100,  0.029720893300, -0.026573902300},
-  { -0.004085082700,  0.001256538900, -0.000034034800,  0.001205478700,
-    -0.004723290400,  0.012797985100, -0.033498033100,  0.127907136500,
-    0.262539269000, -0.091650848600,  0.062022592400, -0.048395229300,
-    0.039790688300, -0.033684178100,  0.029779644500, -0.026631089400},
-  { -0.004139947900,  0.001331802200, -0.000110045000,  0.001297966400,
-    -0.004821497300,  0.012908660300, -0.033643014900,  0.128351507600,
-    0.262181947100, -0.091667171300,  0.062052525700, -0.048439828000,
-    0.039840829600, -0.033723634100,  0.029823200100, -0.026677369100},
-  { -0.004204208100,  0.001405618600, -0.000193120700,  0.001386785000,
-    -0.004924853700,  0.013014623800, -0.033792097000,  0.128796851700,
-    0.261832669700, -0.091689502800,  0.062095944700, -0.048484357900,
-    0.039885777900, -0.033776306400,  0.029866954600, -0.026723942900},
-  { -0.004260417800,  0.001483063100, -0.000278806000,  0.001477736900,
-    -0.005023257700,  0.013125955200, -0.033937289100,  0.129242600400,
-    0.261471099700, -0.091701578900,  0.062122650400, -0.048518010200,
-    0.039936894900, -0.033824115200,  0.029914914700, -0.026764892400},
-  { -0.004327008900,  0.001552956500, -0.000370001900,  0.001573784600,
-    -0.005126787000,  0.013243154600, -0.034089428900,  0.129704208100,
-    0.261097309800, -0.091709577400,  0.062145158100, -0.048554302300,
-    0.039972655000, -0.033861618500,  0.029956756400, -0.026817551300},
-  { -0.004387061400,  0.001634796200, -0.000460660800,  0.001670082700,
-    -0.005230956800,  0.013361670100, -0.034249709200,  0.130162737200,
-    0.260730415900, -0.091714875900,  0.062174189600, -0.048586130300,
-    0.040006010900, -0.033904910800,  0.029992822400, -0.026858101400},
-  { -0.004454372600,  0.001712493000, -0.000548375700,  0.001763978200,
-    -0.005332669200,  0.013476831400, -0.034399268600,  0.130622438100,
-    0.260362390800, -0.091718251200,  0.062194230500, -0.048621392100,
-    0.040048640600, -0.033945864700,  0.030035043200, -0.026894698800},
-  { -0.004523786800,  0.001792774700, -0.000639267000,  0.001868519600,
-    -0.005434268500,  0.013594098000, -0.034558763500,  0.131081652600,
-    0.259993523100, -0.091727265200,  0.062216113000, -0.048648464400,
-    0.040076906100, -0.033977399000,  0.030072123900, -0.026942508300},
-  { -0.004586585500,  0.001877974400, -0.000734060100,  0.001970438800,
-    -0.005551787400,  0.013714416500, -0.034721796900,  0.131545261000,
-    0.259617106900, -0.091722403400,  0.062229403200, -0.048678076000,
-    0.040115213700, -0.034014280800,  0.030111284500, -0.026976072400},
-  { -0.004659557800,  0.001962511100, -0.000829862900,  0.002073337300,
-    -0.005663538600,  0.013840666600, -0.034882878100,  0.132019240400,
-    0.259230513500, -0.091706871400,  0.062239873700, -0.048693489400,
-    0.040133308800, -0.034036485500,  0.030138847000, -0.027009514400},
-  { -0.004725695500,  0.002051981700, -0.000929347100,  0.002180035700,
-    -0.005779960100,  0.013979073500, -0.035051605900,  0.132491612100,
-    0.258836019600, -0.091701376100,  0.062241192800, -0.048705371900,
-    0.040165553900, -0.034068442600,  0.030166932700, -0.027050861400},
-  { -0.004799901300,  0.002138024300, -0.001026848500,  0.002284840400,
-    -0.005893861400,  0.014108040800, -0.035222237300,  0.132964854500,
-    0.258446283900, -0.091682539100,  0.062249560500, -0.048718972600,
-    0.040182871900, -0.034098388500,  0.030199249900, -0.027078741500},
-  { -0.004870595400,  0.002232582100, -0.001132590800,  0.002399200400,
-    -0.006025214200,  0.014243272400, -0.035401209000,  0.133455517400,
-    0.258048229900, -0.091653939600,  0.062241715900, -0.048729769800,
-    0.040203792100, -0.034111888100,  0.030220920600, -0.027107457100},
-  { -0.004947156000,  0.002321555700, -0.001233847400,  0.002515774700,
-    -0.006140611400,  0.014382400400, -0.035570772900,  0.133930500000,
-    0.257654713000, -0.091637493400,  0.062242822500, -0.048738434100,
-    0.040216442600, -0.034137799500,  0.030242570200, -0.027143371600},
-  { -0.005016493400,  0.002414767800, -0.001338252600,  0.002627935400,
-    -0.006262314300,  0.014519076200, -0.035748887100,  0.134413490000,
-    0.257250575700, -0.091604648700,  0.062239840100, -0.048743282000,
-    0.040233396200, -0.034157300200,  0.030266800800, -0.027164826500},
-  { -0.005099278600,  0.002511020600, -0.001447380500,  0.002746842300,
-    -0.006399204100,  0.014660767100, -0.035934332400,  0.134912928100,
-    0.256840267600, -0.091570002800,  0.062216233800, -0.048739644700,
-    0.040234336300, -0.034163561400,  0.030281865200, -0.027187650100},
-  { -0.005170558100,  0.002606541400, -0.001554671000,  0.002862380100,
-    -0.006525103100,  0.014809292700, -0.036112846200,  0.135398740700,
-    0.256430891500, -0.091531009000,  0.062208163600, -0.048740138000,
-    0.040247773900, -0.034180802400,  0.030304366300, -0.027215455700},
-  { -0.005254922300,  0.002704732600, -0.001666038900,  0.002983502200,
-    -0.006664576800,  0.014954266000, -0.036308554600,  0.135898611300,
-    0.256016406700, -0.091492283600,  0.062189717900, -0.048730903800,
-    0.040245240000, -0.034192418000,  0.030314184400, -0.027233909600},
-  { -0.005330421900,  0.002805447300, -0.001779622200,  0.003113745000,
-    -0.006794821100,  0.015108636900, -0.036493663300,  0.136392728600,
-    0.255595532100, -0.091449297700,  0.062167723200, -0.048720314000,
-    0.040247715100, -0.034191966500,  0.030331001200, -0.027248039400},
-  { -0.005418047900,  0.002907510500, -0.001896019300,  0.003240948000,
-    -0.006941296500,  0.015268001700, -0.036685011500,  0.136902218400,
-    0.255169264700, -0.091390047400,  0.062133585500, -0.048706450000,
-    0.040240217600, -0.034199174200,  0.030336692900, -0.027272064200},
-  { -0.005505373600,  0.003009395700, -0.002011695700,  0.003366480500,
-    -0.007078261400,  0.015421720100, -0.036888380700,  0.137411927200,
-    0.254740700000, -0.091336957100,  0.062103176600, -0.048687487200,
-    0.040235929700, -0.034199682900,  0.030337810300, -0.027283556600},
-  { -0.005585382500,  0.003115541600, -0.002131832000,  0.003504827500,
-    -0.007224968800,  0.015582215100, -0.037080250800,  0.137915259700,
-    0.254306086800, -0.091279630400,  0.062069083500, -0.048665013800,
-    0.040221399100, -0.034201654500,  0.030346034000, -0.027291156400},
-  { -0.005674994900,  0.003220173800, -0.002250865900,  0.003634318300,
-    -0.007366427500,  0.015748179900, -0.037284933600,  0.138428727000,
-    0.253871405000, -0.091219627900,  0.062033003000, -0.048649242600,
-    0.040210075200, -0.034189299100,  0.030346059500, -0.027308900300},
-  { -0.005758700400,  0.003330548600, -0.002375530200,  0.003770118000,
-    -0.007521879300,  0.015909567200, -0.037496867100,  0.138949385400,
-    0.253426570300, -0.091143115000,  0.061992180000, -0.048620522900,
-    0.040197728000, -0.034182788700,  0.030348556000, -0.027312476200},
-  { -0.005852674900,  0.003440460400, -0.002500886900,  0.003906772800,
-    -0.007671474500,  0.016084224600, -0.037702515700,  0.139476737000,
-    0.252975093200, -0.091066456400,  0.061940861800, -0.048581744400,
-    0.040168382200, -0.034171796400,  0.030338133100, -0.027314851900},
-  { -0.005940171600,  0.003555441000, -0.002631162900,  0.004057015800,
-    -0.007831507500,  0.016259063300, -0.037917269600,  0.140002708200,
-    0.252522799200, -0.090988640700,  0.061880613500, -0.048547165800,
-    0.040149371300, -0.034151729900,  0.030339624000, -0.027324602000},
-  { -0.006038006300,  0.003669989500, -0.002761828800,  0.004199685000,
-    -0.007987803500,  0.016441338600, -0.038138344000,  0.140535980000,
-    0.252061541300, -0.090901636600,  0.061820252000, -0.048500250500,
-    0.040112744100, -0.034134470700,  0.030324310800, -0.027322408700},
-  { -0.006128817400,  0.003788978800, -0.002896910300,  0.004355118400,
-    -0.008153648900,  0.016622514100, -0.038359180300,  0.141069989900,
-    0.251597538600, -0.090812420800,  0.061758888600, -0.048454321900,
-    0.040084569400, -0.034113893000,  0.030306458400, -0.027317970100},
-  { -0.006227186400,  0.003904318200, -0.003028595200,  0.004499540800,
-    -0.008319159800,  0.016794826900, -0.038581990000,  0.141605434000,
-    0.251131429100, -0.090720594500,  0.061694722300, -0.048405249700,
-    0.040054114300, -0.034091543000,  0.030295722900, -0.027310222200},
-  { -0.006328397300,  0.004031158500, -0.003168595500,  0.004641928300,
-    -0.008476386900,  0.016978639900, -0.038804959500,  0.142142757000,
-    0.250662990700, -0.090633704900,  0.061624954700, -0.048358207200,
-    0.040007213300, -0.034057656100,  0.030276666600, -0.027311829700},
-  { -0.006423738600,  0.004155528900, -0.003309959300,  0.004804548400,
-    -0.008650250700,  0.017168425100, -0.039034846100,  0.142695621300,
-    0.250186846500, -0.090531292600,  0.061551769900, -0.048301646800,
-    0.039969736100, -0.034029532000,  0.030260492100, -0.027299867000},
-  { -0.006528665100,  0.004278722600, -0.003450970500,  0.004959568700,
-    -0.008827892900,  0.017361477800, -0.039267480800,  0.143244619700,
-    0.249702348700, -0.090420060400,  0.061470769900, -0.048237360200,
-    0.039925613200, -0.033995062800,  0.030230693900, -0.027285607600},
-  { -0.006624732800,  0.004404173000, -0.003593946300,  0.005123920600,
-    -0.009003806900,  0.017553760300, -0.039499198000,  0.143792799000,
-    0.249217705300, -0.090309454700,  0.061398382500, -0.048170611400,
-    0.039872247300, -0.033963765200,  0.030211452200, -0.027278748100},
-  { -0.006733019100,  0.004530986400, -0.003739016800,  0.005283093400,
-    -0.009178450500,  0.017763535800, -0.039744969800,  0.144353453000,
-    0.248736735600, -0.090189496400,  0.061311021700, -0.048108842000,
-    0.039820545400, -0.033924139600,  0.030177475500, -0.027261029400},
-  { -0.006833632200,  0.004661933300, -0.003888052900,  0.005454760700,
-    -0.009362610000,  0.017964244700, -0.039985659800,  0.144912324100,
-    0.248238004700, -0.090072272700,  0.061214521700, -0.048032095800,
-    0.039764687300, -0.033871892800,  0.030150552400, -0.027238906300},
-  { -0.006944808900,  0.004792587900, -0.004037760400,  0.005619673100,
-    -0.009551266900,  0.018169204500, -0.040230608100,  0.145484672100,
-    0.247735896000, -0.089941342900,  0.061116139800, -0.047952151500,
-    0.039706664600, -0.033825489900,  0.030111200300, -0.027225498800},
-  { -0.007048709900,  0.004927883500, -0.004199654100,  0.005793881200,
-    -0.009738964200,  0.018374848700, -0.040483849800,  0.146046598800,
-    0.247230365400, -0.089816950200,  0.061014854400, -0.047877574700,
-    0.039635751800, -0.033778171100,  0.030078686000, -0.027198514200},
-  { -0.007165536600,  0.005065305500, -0.004357110300,  0.005967529800,
-    -0.009937335800,  0.018590642800, -0.040747877600,  0.146628884600,
-    0.246713790300, -0.089671417900,  0.060903432100, -0.047785728000,
-    0.039566909200, -0.033722116600,  0.030030861700, -0.027169252500},
-  { -0.007276776700,  0.005196186900, -0.004507476500,  0.006140611400,
-    -0.010115702100,  0.018796926000, -0.040992574000,  0.147194377100,
-    0.246211745800, -0.089538068000,  0.060802547900, -0.047694806200,
-    0.039498877900, -0.033667952600,  0.029984769900, -0.027149571000},
-  { -0.007387874000,  0.005339424900, -0.004670815200,  0.006320666200,
-    -0.010320954700,  0.019027766500, -0.041261046500,  0.147782948500,
-    0.245685443800, -0.089383414100,  0.060683139900, -0.047604443400,
-    0.039421896500, -0.033597878400,  0.029942169700, -0.027114750800},
-  { -0.007510337800,  0.005483782700, -0.004836420600,  0.006511584900,
-    -0.010526788500,  0.019252707100, -0.041534516600,  0.148377088500,
-    0.245152841500, -0.089229128400,  0.060553978800, -0.047496635400,
-    0.039330446700, -0.033531679300,  0.029885352000, -0.027077485500},
-  { -0.007617681800,  0.005622426600, -0.004994838300,  0.006686063700,
-    -0.010725673400,  0.019468467400, -0.041789645200,  0.148963171000,
-    0.244635866200, -0.089072585900,  0.060442764900, -0.047403936100,
-    0.039252529900, -0.033469077500,  0.029839930100, -0.027050084400},
-  { -0.007743458100,  0.005771106400, -0.005173633200,  0.006879940500,
-    -0.010936112200,  0.019706338200, -0.042065049900,  0.149561525700,
-    0.244095869900, -0.088910561500,  0.060307776300, -0.047291253700,
-    0.039164455700, -0.033396349900,  0.029777209800, -0.027007624400},
-  { -0.007858967200,  0.005919845900, -0.005343167000,  0.007067136200,
-    -0.011149489200,  0.019938097200, -0.042344891600,  0.150163766200,
-    0.243550330900, -0.088743758000,  0.060167864400, -0.047174313100,
-    0.039073486100, -0.033321568100,  0.029721987600, -0.026962754000},
-  { -0.007983157300,  0.006074179500, -0.005508592100,  0.007258796500,
-    -0.011356666000,  0.020172218500, -0.042616124600,  0.150758631000,
-    0.243020071900, -0.088580561000,  0.060040729000, -0.047067967200,
-    0.038982593900, -0.033247283000,  0.029658101500, -0.026927788900},
-  { -0.008105130300,  0.006230560200, -0.005687757500,  0.007464989300,
-    -0.011579317500,  0.020414981800, -0.042907551700,  0.151374476700,
-    0.242457316000, -0.088387814400,  0.059887026200, -0.046937384600,
-    0.038870631000, -0.033163420100,  0.029594120700, -0.026875984700},
-  { -0.008233810500,  0.006382559600, -0.005862421100,  0.007658087800,
-    -0.011799401200,  0.020662084900, -0.043192258600,  0.151985072700,
-    0.241899935800, -0.088207332900,  0.059743644400, -0.046816052000,
-    0.038766487900, -0.033069335600,  0.029522772700, -0.026834459500},
-  { -0.008365745600,  0.006538532000, -0.006049746700,  0.007862043900,
-    -0.012020887000,  0.020904026300, -0.043490655700,  0.152598080900,
-    0.241345587100, -0.088019183800,  0.059585807800, -0.046682659300,
-    0.038659818300, -0.032980362900,  0.029455506100, -0.026779041200},
-  { -0.008488941000,  0.006696553400, -0.006230594800,  0.008061850300,
-    -0.012248204100,  0.021158865900, -0.043782741400,  0.153217488200,
-    0.240775110200, -0.087826286000,  0.059432200300, -0.046551952900,
-    0.038547619600, -0.032887333800,  0.029375054800, -0.026721976200},
-  { -0.008621850700,  0.006853393800, -0.006411265100,  0.008270409100,
-    -0.012474342700,  0.021413239200, -0.044074457000,  0.153836655200,
-    0.240212813600, -0.087629196300,  0.059265982800, -0.046411553600,
-    0.038435074500, -0.032793916400,  0.029303599100, -0.026672135800},
-  { -0.008749942500,  0.007017378200, -0.006599218000,  0.008486986700,
-    -0.012716522600,  0.021665336500, -0.044383621100,  0.154463623000,
-    0.239631193600, -0.087424514000,  0.059102015300, -0.046272077200,
-    0.038314783100, -0.032692580400,  0.029216641900, -0.026609057300},
-  { -0.008886221300,  0.007178451900, -0.006792714500,  0.008689620600,
-    -0.012948009400,  0.021925282500, -0.044681119300,  0.155098325200,
-    0.239060508500, -0.087219020100,  0.058937803200, -0.046131179100,
-    0.038193255500, -0.032591551900,  0.029137687900, -0.026544650500},
-  { -0.009017719800,  0.007346605300, -0.006985204400,  0.008911224900,
-    -0.013188518400,  0.022195302800, -0.044997006400,  0.155734052300,
-    0.238467918900, -0.087010194700,  0.058751361600, -0.045972814900,
-    0.038064564500, -0.032483676700,  0.029046121000, -0.026486139900},
-  { -0.009157733600,  0.007511909600, -0.007175647500,  0.009130702800,
-    -0.013426053000,  0.022454091700, -0.045304400400,  0.156379869500,
-    0.237883048800, -0.086789838900,  0.058573065700, -0.045819242800,
-    0.037922966700, -0.032373937700,  0.028959823600, -0.026415860100},
-  { -0.009301621700,  0.007690545500, -0.007377781200,  0.009352140300,
-    -0.013667509600,  0.022725762800, -0.045622167700,  0.157018351900,
-    0.237292774000, -0.086564748300,  0.058390364400, -0.045653170900,
-    0.037787266600, -0.032260085200,  0.028870030600, -0.026341359100},
-  { -0.009438250700,  0.007864516400, -0.007577424400,  0.009574249500,
-    -0.013927827700,  0.023004845600, -0.045939676500,  0.157677386600,
-    0.236683031800, -0.086329249600,  0.058190028400, -0.045489825900,
-    0.037645625200, -0.032140124600,  0.028767035600, -0.026274692700},
-  { -0.009580872000,  0.008033410300, -0.007771917200,  0.009798419700,
-    -0.014171124700,  0.023277932300, -0.046258378200,  0.158318052700,
-    0.236087895800, -0.086106607600,  0.058000802500, -0.045327782600,
-    0.037504763700, -0.032022055600,  0.028674126500, -0.026197380900},
-  { -0.009721894700,  0.008212777900, -0.007978032900,  0.010035312500,
-    -0.014428158400,  0.023565684300, -0.046592644400,  0.158984686900,
-    0.235466308600, -0.085859387000,  0.057798739800, -0.045153519300,
-    0.037352645400, -0.031893498200,  0.028563276700, -0.026114821800},
-  { -0.009871323400,  0.008389875100, -0.008190788700,  0.010268343100,
-    -0.014682289800,  0.023850713300, -0.046924112000,  0.159640235100,
-    0.234853461000, -0.085609536100,  0.057593857200, -0.044967652300,
-    0.037198907100, -0.031755365000,  0.028462385300, -0.026039689900},
-  { -0.010014352200,  0.008571352800, -0.008398761300,  0.010499975700,
-    -0.014953382600,  0.024141775800, -0.047261891500,  0.160311566300,
-    0.234232816700, -0.085360140300,  0.057372021900, -0.044785182900,
-    0.037040075600, -0.031620187000,  0.028346554700, -0.025952967800},
-  { -0.010166260400,  0.008751093900, -0.008606212500,  0.010738923200,
-    -0.015213032100,  0.024432461700, -0.047598975500,  0.160982608100,
-    0.233611368900, -0.085101130000,  0.057159516400, -0.044601390800,
-    0.036879378400, -0.031484316000,  0.028237949300, -0.025863505900},
-  { -0.010321897600,  0.008936015200, -0.008827674600,  0.010981773200,
-    -0.015478042100,  0.024729320900, -0.047942312100,  0.161661569100,
-    0.232972740300, -0.084843025700,  0.056938084300, -0.044400455400,
-    0.036712214700, -0.031342439100,  0.028116156900, -0.025780065800},
-  { -0.010466289100,  0.009127889900, -0.009036452200,  0.011223231400,
-    -0.015749030400,  0.025020862500, -0.048280259200,  0.162326124500,
-    0.232344053400, -0.084586151300,  0.056717963000, -0.044210265700,
-    0.036546321900, -0.031201495400,  0.028003222400, -0.025686033500},
-  { -0.010624282400,  0.009314904500, -0.009252420500,  0.011471920900,
-    -0.016019505400,  0.025323118600, -0.048628982800,  0.163011748400,
-    0.231703178600, -0.084306442100,  0.056487091900, -0.044009688500,
-    0.036370261500, -0.031051508400,  0.027873625100, -0.025587973900},
-  { -0.010770500300,  0.009500718600, -0.009474642200,  0.011715943000,
-    -0.016285463700,  0.025620788400, -0.048972602300,  0.163692118500,
-    0.231066748100, -0.084039975100,  0.056259353500, -0.043812102400,
-    0.036197201000, -0.030904859500,  0.027756477200, -0.025499892900},
-  { -0.010931246800,  0.009691737700, -0.009694581800,  0.011960978000,
-    -0.016571687400,  0.025928666900, -0.049336013900,  0.164383311000,
-    0.230408652300, -0.083761749100,  0.056019673100, -0.043603445300,
-    0.036015066800, -0.030749714100,  0.027631903700, -0.025396035700},
-  { -0.011083143100,  0.009884244000, -0.009924855700,  0.012214065900,
-    -0.016847826800,  0.026245793300, -0.049688721100,  0.165075323300,
-    0.229757192500, -0.083479360500,  0.055777843800, -0.043392967400,
-    0.035830313000, -0.030592744600,  0.027496482800, -0.025301408600},
-  { -0.011247937000,  0.010079726100, -0.010150237400,  0.012473832200,
-    -0.017139617800,  0.026560090900, -0.050058620700,  0.165774369800,
-    0.229096722700, -0.083187562800,  0.055525970000, -0.043164809800,
-    0.035639110100, -0.030429438500,  0.027364856000, -0.025191900900},
-  { -0.011414156900,  0.010285088600, -0.010375664800,  0.012733949200,
-    -0.017423150000,  0.026876050100, -0.050421461700,  0.166486654000,
-    0.228431981400, -0.082882457600,  0.055272032600, -0.042943711600,
-    0.035452683100, -0.030260595300,  0.027218999400, -0.025080573500},
-  { -0.011569876800,  0.010482366800, -0.010611428200,  0.012993995900,
-    -0.017715404200,  0.027190997300, -0.050791534100,  0.167187177600,
-    0.227767190600, -0.082585986900,  0.055017316200, -0.042721547900,
-    0.035257818300, -0.030094081500,  0.027084885600, -0.024977875100},
-  { -0.011735641200,  0.010679052100, -0.010838874100,  0.013255461800,
-    -0.018000408400,  0.027517442600, -0.051153628100,  0.167891670700,
-    0.227096876100, -0.082283304900,  0.054765605000, -0.042492896400,
-    0.035056918500, -0.029922928500,  0.026936217500, -0.024863147800},
-  { -0.011895524600,  0.010881222400, -0.011080393900,  0.013522101400,
-    -0.018299976100,  0.027840232000, -0.051531646700,  0.168601698400,
-    0.226418695900, -0.081973147300,  0.054498561600, -0.042259399400,
-    0.034851636500, -0.029746913300,  0.026793421400, -0.024744283000},
-  { -0.012061741600,  0.011078958400, -0.011308563500,  0.013785401700,
-    -0.018595879900,  0.028167737000, -0.051903321700,  0.169306244900,
-    0.225746079600, -0.081675879800,  0.054233890700, -0.042028641800,
-    0.034649470800, -0.029583320700,  0.026652632600, -0.024635779800},
-  { -0.012233380000,  0.011282444600, -0.011543470000,  0.014055945900,
-    -0.018890880000,  0.028496294000, -0.052278354600,  0.170034645100,
-    0.225057382600, -0.081353165500,  0.053955054200, -0.041784523800,
-    0.034433929800, -0.029398158700,  0.026492726700, -0.024512416500},
-  { -0.012397906100,  0.011498850800, -0.011789873100,  0.014328734600,
-    -0.019197522300,  0.028826801200, -0.052664294200,  0.170754821100,
-    0.224364465600, -0.081027646800,  0.053673705700, -0.041537691400,
-    0.034216344400, -0.029211010100,  0.026340154100, -0.024385306400},
-  { -0.012569967700,  0.011703276500, -0.012026289200,  0.014600559700,
-    -0.019494308900,  0.029165749700, -0.053047725600,  0.171482978400,
-    0.223673445000, -0.080701758400,  0.053401535600, -0.041291105000,
-    0.034007728400, -0.029023858700,  0.026178649300, -0.024268830700},
-  { -0.012733999200,  0.011910640700, -0.012273784000,  0.014874303900,
-    -0.019802025600,  0.029497290200, -0.053434105100,  0.172204980000,
-    0.222975700000, -0.080378906900,  0.053114037000, -0.041039151900,
-    0.033785715200, -0.028832942600,  0.026023212900, -0.024139101200},
-  { -0.012909827000,  0.012119093100, -0.012514786800,  0.015152338700,
-    -0.020114351000,  0.029842400300, -0.053824260500,  0.172940887300,
-    0.222282695500, -0.080040051200,  0.052820808400, -0.040782083200,
-    0.033559250100, -0.028638659800,  0.025864605000, -0.024016696400},
-  { -0.013077694700,  0.012330804800, -0.012768208900,  0.015431882400,
-    -0.020419854900,  0.030191368700, -0.054217452300,  0.173672040800,
-    0.221572261900, -0.079694814600,  0.052531679400, -0.040518864300,
-    0.033326721800, -0.028439265300,  0.025691724900, -0.023881218600},
-  { -0.013256584600,  0.012552301800, -0.013011940600,  0.015713408100,
-    -0.020736060900,  0.030531916300, -0.054613554100,  0.174415121200,
-    0.220859647000, -0.079355588500,  0.052228216400, -0.040252363400,
-    0.033091335800, -0.028236227500,  0.025525720700, -0.023743015900},
-  { -0.013434190200,  0.012763748700, -0.013265795800,  0.015994241000,
-    -0.021052047100,  0.030880792200, -0.055006606000,  0.175147783700,
-    0.220145965700, -0.079005398700,  0.051934897400, -0.039986031200,
-    0.032865074900, -0.028032712000,  0.025349395400, -0.023613527100},
-  { -0.013607326700,  0.012981847200, -0.013517060900,  0.016283677300,
-    -0.021377016200,  0.031239628300, -0.055419411200,  0.175899125500,
-    0.219420925700, -0.078653073000,  0.051620280600, -0.039709589400,
-    0.032621025300, -0.027822778600,  0.025177627600, -0.023470126900},
-  { -0.013782589000,  0.013190197300, -0.013766570600,  0.016559610500,
-    -0.021678237600,  0.031575100900, -0.055808854800,  0.176637181300,
-    0.218717601900, -0.078311440600,  0.051325946300, -0.039451087500,
-    0.032383743600, -0.027618613700,  0.025010333400, -0.023331058700},
-  { -0.013957302500,  0.013409708800, -0.014020295800,  0.016852102000,
-    -0.022006668200,  0.031937517200, -0.056216071400,  0.177395411400,
-    0.217982956500, -0.077938975900,  0.051002551300, -0.039166330500,
-    0.032131961500, -0.027401344200,  0.024822499400, -0.023192767000},
-  { -0.014137826400,  0.013634160600, -0.014277189300,  0.017136805900,
-    -0.022327273100,  0.032291873400, -0.056623155700,  0.178133731400,
-    0.217257004100, -0.077584995300,  0.050696728900, -0.038888338700,
-    0.031895218300, -0.027197775400,  0.024646690200, -0.023045282800},
-  { -0.014322369000,  0.013853217500, -0.014530205800,  0.017428585500,
-    -0.022655062900,  0.032653627200, -0.057029286500,  0.178891911700,
-    0.216528434500, -0.077216471400,  0.050368084700, -0.038598885400,
-    0.031639043700, -0.026976449100,  0.024455251600, -0.022894485700},
-  { -0.014497130900,  0.014073600400, -0.014793724500,  0.017720424400,
-    -0.022983229400,  0.033016325000, -0.057445269000,  0.179650074100,
-    0.215789443000, -0.076847958800,  0.050048943000, -0.038308589100,
-    0.031382426000, -0.026755494400,  0.024273618900, -0.022751911400},
-  { -0.014682624600,  0.014293733300, -0.015048990300,  0.018023602800,
-    -0.023312864800,  0.033380176500, -0.057853443800,  0.180411228100,
-    0.215054814200, -0.076463911600,  0.049724541400, -0.038014094400,
-    0.031121419200, -0.026530109300,  0.024086993000, -0.022596809400},
-  { -0.014859695200,  0.014525847700, -0.015314517000,  0.018318827500,
-    -0.023644693500,  0.033746221600, -0.058272616300,  0.181174383300,
-    0.214307631900, -0.076086492000,  0.049388587800, -0.037727262100,
-    0.030867454500, -0.026301452600,  0.023889634600, -0.022449489700},
-  { -0.015043628800,  0.014744644300, -0.015567389200,  0.018609777000,
-    -0.023962891000,  0.034108731100, -0.058687999000,  0.181933910400,
-    0.213571477500, -0.075708968100,  0.049061183200, -0.037429622300,
-    0.030603552000, -0.026074188000,  0.023702400300, -0.022293365600},
-  { -0.015230621700,  0.014967722500, -0.015834525700,  0.018906008200,
-    -0.024296112800,  0.034477126200, -0.059108931600,  0.182699826000,
-    0.212818269000, -0.075324331700,  0.048728034800, -0.037126070200,
-    0.030334649300, -0.025851070600,  0.023509696000, -0.022132339300},
-  { -0.015403239200,  0.015184755300, -0.016085532200,  0.019196261600,
-    -0.024622369200,  0.034836693200, -0.059511496600,  0.183458281900,
-    0.212080113800, -0.074943583300,  0.048389608700, -0.036837633800,
-    0.030079543400, -0.025621473000,  0.023311149400, -0.021984907000},
-  { -0.015590979000,  0.015408947400, -0.016353520500,  0.019493453600,
-    -0.024956657000,  0.035205975300, -0.059933451000,  0.184226621300,
-    0.211321394300, -0.074561582900,  0.048049643100, -0.036528248900,
-    0.029805219600, -0.025384306000,  0.023115206300, -0.021820726800},
-  { -0.015774153200,  0.015647568900, -0.016617815600,  0.019807043400,
-    -0.025298080600,  0.035582464000, -0.060363020600,  0.185012756300,
-    0.210561671700, -0.074159545200,  0.047700175200, -0.036210874300,
-    0.029523208500, -0.025139945600,  0.022903521200, -0.021652637100},
-  { -0.015957718800,  0.015866363900, -0.016880438900,  0.020098938000,
-    -0.025626490200,  0.035944852300, -0.060777269100,  0.185774583200,
-    0.209816210000, -0.073770259000,  0.047363636300, -0.035914525800,
-    0.029260937100, -0.024904284200,  0.022708784900, -0.021499355400},
-  { -0.016146341100,  0.016091423300, -0.017150197200,  0.020398479100,
-    -0.025963577000,  0.036317429100, -0.061201713700,  0.186547463400,
-    0.209047984700, -0.073368078300,  0.047014992300, -0.035596734200,
-    0.028978835200, -0.024669258800,  0.022505698100, -0.021329645000},
-  { -0.016320272300,  0.016310576200, -0.017403342300,  0.020690491600,
-    -0.026292446400,  0.036679979100, -0.061615606400,  0.187310565800,
-    0.208297289900, -0.072981740600,  0.046672091800, -0.035285782400,
-    0.028712202900, -0.024430026800,  0.022298988100, -0.021174596000},
-  { -0.016517713700,  0.016555097200, -0.017684359000,  0.021012495700,
-    -0.026652137000,  0.037074921500, -0.062062849200,  0.188107078200,
-    0.207521739000, -0.072562306900,  0.046307362400, -0.034963432800,
-    0.028417277400, -0.024173926100,  0.022085993400, -0.020996166200},
-  { -0.016693369200,  0.016775967300, -0.017940069300,  0.021307570300,
-    -0.026984503800,  0.037441286100, -0.062480664600,  0.188874906800,
-    0.206762441600, -0.072157646700,  0.045956576300, -0.034644987500,
-    0.028143706400, -0.023928413000,  0.021882650000, -0.020826571400},
-  { -0.016880502600,  0.016999617900, -0.018208006800,  0.021605481800,
-    -0.027319373500,  0.037811009900, -0.062901579400,  0.189647520400,
-    0.205988741400, -0.071756528600,  0.045600627200, -0.034330459400,
-    0.027855743300, -0.023678399200,  0.021665948800, -0.020662712500},
-  { -0.017068318000,  0.017223435000, -0.018475976000,  0.021903230800,
-    -0.027654693700,  0.038181666300, -0.063323023000,  0.190429725400,
-    0.205222534800, -0.071353119600,  0.045242727900, -0.034004343600,
-    0.027565877300, -0.023436396900,  0.021457189000, -0.020488542500},
-  { -0.017246917900,  0.017457669100, -0.018736272400,  0.022213168000,
-    -0.027992598200,  0.038563100600, -0.063755422100,  0.191204356500,
-    0.204452658100, -0.070936826400,  0.044881428000, -0.033686094400,
-    0.027283488000, -0.023183090400,  0.021246949000, -0.020321895500},
-  { -0.017437502400,  0.017684574800, -0.019007749200,  0.022514818900,
-    -0.028332071700,  0.038937772100, -0.064180906300,  0.191992723900,
-    0.203676829800, -0.070522535200,  0.044513642200, -0.033351129700,
-    0.026985379900, -0.022924089100,  0.021022365800, -0.020142555600},
-  { -0.017612607500,  0.017905551400, -0.019263469700,  0.022810027000,
-    -0.028664228600,  0.039313071700, -0.064606182200,  0.192761249200,
-    0.202909086600, -0.070116301600,  0.044153394600, -0.033033628600,
-    0.026704131700, -0.022671934000,  0.020813349900, -0.019967342300},
-  { -0.017804156200,  0.018142992400, -0.019536907100,  0.023124244000,
-    -0.029016668700,  0.039691471800, -0.065035304900,  0.193554029900,
-    0.202126709100, -0.069685647800,  0.043779368600, -0.032692955500,
-    0.026400789300, -0.022417171100,  0.020592971000, -0.019792949400},
-  { -0.017992718700,  0.018368200800, -0.019806941800,  0.023424641100,
-    -0.029354657000,  0.040073376700, -0.065467078100,  0.194340183400,
-    0.201348610200, -0.069267933600,  0.043409003500, -0.032365611400,
-    0.026110304900, -0.022156493800,  0.020376369200, -0.019611597000},
-  { -0.018169389900,  0.018590771100, -0.020064391100,  0.023730685800,
-    -0.029688570400,  0.040441389700, -0.065894130000,  0.195112977600,
-    0.200571593400, -0.068850504200,  0.043048431400, -0.032029425400,
-    0.025810897300, -0.021896568900,  0.020150932200, -0.019430720600},
-  { -0.018352128100,  0.018808952700, -0.020326930300,  0.024023078900,
-    -0.030018101100,  0.040814643600, -0.066306546900,  0.195890653300,
-    0.199799462500, -0.068437128700,  0.042682739700, -0.031706143000,
-    0.025524084500, -0.021648572900,  0.019936501000, -0.019261187000},
-  { -0.018529692600,  0.019042047700, -0.020594876900,  0.024321965700,
-    -0.030363853100,  0.041184957000, -0.066735945800,  0.196675804800,
-    0.199017015900, -0.068014184700,  0.042307739300, -0.031374606800,
-    0.025230096300, -0.021383827800,  0.019716451300, -0.019076980100},
-  { -0.018717857800,  0.019266724700, -0.020855153600,  0.024631079300,
-    -0.030701275000,  0.041566227500, -0.067166371900,  0.197464077100,
-    0.198230805200, -0.067585453700,  0.041936966700, -0.031028914900,
-    0.024921902400, -0.021116319300,  0.019483967100, -0.018899947900},
-  { -0.018899947900,  0.019483967100, -0.021116319300,  0.024921902400,
-    -0.031028914900,  0.041936966700, -0.067585453700,  0.198230805200,
-    0.197464077100, -0.067166371900,  0.041566227500, -0.030701275000,
-    0.024631079300, -0.020855153600,  0.019266724700, -0.018717857800},
-  { -0.019076980100,  0.019716451300, -0.021383827800,  0.025230096300,
-    -0.031374606800,  0.042307739300, -0.068014184700,  0.199017015900,
-    0.196675804800, -0.066735945800,  0.041184957000, -0.030363853100,
-    0.024321965700, -0.020594876900,  0.019042047700, -0.018529692600},
-  { -0.019261187000,  0.019936501000, -0.021648572900,  0.025524084500,
-    -0.031706143000,  0.042682739700, -0.068437128700,  0.199799462500,
-    0.195890653300, -0.066306546900,  0.040814643600, -0.030018101100,
-    0.024023078900, -0.020326930300,  0.018808952700, -0.018352128100},
-  { -0.019430720600,  0.020150932200, -0.021896568900,  0.025810897300,
-    -0.032029425400,  0.043048431400, -0.068850504200,  0.200571593400,
-    0.195112977600, -0.065894130000,  0.040441389700, -0.029688570400,
-    0.023730685800, -0.020064391100,  0.018590771100, -0.018169389900},
-  { -0.019611597000,  0.020376369200, -0.022156493800,  0.026110304900,
-    -0.032365611400,  0.043409003500, -0.069267933600,  0.201348610200,
-    0.194340183400, -0.065467078100,  0.040073376700, -0.029354657000,
-    0.023424641100, -0.019806941800,  0.018368200800, -0.017992718700},
-  { -0.019792949400,  0.020592971000, -0.022417171100,  0.026400789300,
-    -0.032692955500,  0.043779368600, -0.069685647800,  0.202126709100,
-    0.193554029900, -0.065035304900,  0.039691471800, -0.029016668700,
-    0.023124244000, -0.019536907100,  0.018142992400, -0.017804156200},
-  { -0.019967342300,  0.020813349900, -0.022671934000,  0.026704131700,
-    -0.033033628600,  0.044153394600, -0.070116301600,  0.202909086600,
-    0.192761249200, -0.064606182200,  0.039313071700, -0.028664228600,
-    0.022810027000, -0.019263469700,  0.017905551400, -0.017612607500},
-  { -0.020142555600,  0.021022365800, -0.022924089100,  0.026985379900,
-    -0.033351129700,  0.044513642200, -0.070522535200,  0.203676829800,
-    0.191992723900, -0.064180906300,  0.038937772100, -0.028332071700,
-    0.022514818900, -0.019007749200,  0.017684574800, -0.017437502400},
-  { -0.020321895500,  0.021246949000, -0.023183090400,  0.027283488000,
-    -0.033686094400,  0.044881428000, -0.070936826400,  0.204452658100,
-    0.191204356500, -0.063755422100,  0.038563100600, -0.027992598200,
-    0.022213168000, -0.018736272400,  0.017457669100, -0.017246917900},
-  { -0.020488542500,  0.021457189000, -0.023436396900,  0.027565877300,
-    -0.034004343600,  0.045242727900, -0.071353119600,  0.205222534800,
-    0.190429725400, -0.063323023000,  0.038181666300, -0.027654693700,
-    0.021903230800, -0.018475976000,  0.017223435000, -0.017068318000},
-  { -0.020662712500,  0.021665948800, -0.023678399200,  0.027855743300,
-    -0.034330459400,  0.045600627200, -0.071756528600,  0.205988741400,
-    0.189647520400, -0.062901579400,  0.037811009900, -0.027319373500,
-    0.021605481800, -0.018208006800,  0.016999617900, -0.016880502600},
-  { -0.020826571400,  0.021882650000, -0.023928413000,  0.028143706400,
-    -0.034644987500,  0.045956576300, -0.072157646700,  0.206762441600,
-    0.188874906800, -0.062480664600,  0.037441286100, -0.026984503800,
-    0.021307570300, -0.017940069300,  0.016775967300, -0.016693369200},
-  { -0.020996166200,  0.022085993400, -0.024173926100,  0.028417277400,
-    -0.034963432800,  0.046307362400, -0.072562306900,  0.207521739000,
-    0.188107078200, -0.062062849200,  0.037074921500, -0.026652137000,
-    0.021012495700, -0.017684359000,  0.016555097200, -0.016517713700},
-  { -0.021174596000,  0.022298988100, -0.024430026800,  0.028712202900,
-    -0.035285782400,  0.046672091800, -0.072981740600,  0.208297289900,
-    0.187310565800, -0.061615606400,  0.036679979100, -0.026292446400,
-    0.020690491600, -0.017403342300,  0.016310576200, -0.016320272300},
-  { -0.021329645000,  0.022505698100, -0.024669258800,  0.028978835200,
-    -0.035596734200,  0.047014992300, -0.073368078300,  0.209047984700,
-    0.186547463400, -0.061201713700,  0.036317429100, -0.025963577000,
-    0.020398479100, -0.017150197200,  0.016091423300, -0.016146341100},
-  { -0.021499355400,  0.022708784900, -0.024904284200,  0.029260937100,
-    -0.035914525800,  0.047363636300, -0.073770259000,  0.209816210000,
-    0.185774583200, -0.060777269100,  0.035944852300, -0.025626490200,
-    0.020098938000, -0.016880438900,  0.015866363900, -0.015957718800},
-  { -0.021652637100,  0.022903521200, -0.025139945600,  0.029523208500,
-    -0.036210874300,  0.047700175200, -0.074159545200,  0.210561671700,
-    0.185012756300, -0.060363020600,  0.035582464000, -0.025298080600,
-    0.019807043400, -0.016617815600,  0.015647568900, -0.015774153200},
-  { -0.021820726800,  0.023115206300, -0.025384306000,  0.029805219600,
-    -0.036528248900,  0.048049643100, -0.074561582900,  0.211321394300,
-    0.184226621300, -0.059933451000,  0.035205975300, -0.024956657000,
-    0.019493453600, -0.016353520500,  0.015408947400, -0.015590979000},
-  { -0.021984907000,  0.023311149400, -0.025621473000,  0.030079543400,
-    -0.036837633800,  0.048389608700, -0.074943583300,  0.212080113800,
-    0.183458281900, -0.059511496600,  0.034836693200, -0.024622369200,
-    0.019196261600, -0.016085532200,  0.015184755300, -0.015403239200},
-  { -0.022132339300,  0.023509696000, -0.025851070600,  0.030334649300,
-    -0.037126070200,  0.048728034800, -0.075324331700,  0.212818269000,
-    0.182699826000, -0.059108931600,  0.034477126200, -0.024296112800,
-    0.018906008200, -0.015834525700,  0.014967722500, -0.015230621700},
-  { -0.022293365600,  0.023702400300, -0.026074188000,  0.030603552000,
-    -0.037429622300,  0.049061183200, -0.075708968100,  0.213571477500,
-    0.181933910400, -0.058687999000,  0.034108731100, -0.023962891000,
-    0.018609777000, -0.015567389200,  0.014744644300, -0.015043628800},
-  { -0.022449489700,  0.023889634600, -0.026301452600,  0.030867454500,
-    -0.037727262100,  0.049388587800, -0.076086492000,  0.214307631900,
-    0.181174383300, -0.058272616300,  0.033746221600, -0.023644693500,
-    0.018318827500, -0.015314517000,  0.014525847700, -0.014859695200},
-  { -0.022596809400,  0.024086993000, -0.026530109300,  0.031121419200,
-    -0.038014094400,  0.049724541400, -0.076463911600,  0.215054814200,
-    0.180411228100, -0.057853443800,  0.033380176500, -0.023312864800,
-    0.018023602800, -0.015048990300,  0.014293733300, -0.014682624600},
-  { -0.022751911400,  0.024273618900, -0.026755494400,  0.031382426000,
-    -0.038308589100,  0.050048943000, -0.076847958800,  0.215789443000,
-    0.179650074100, -0.057445269000,  0.033016325000, -0.022983229400,
-    0.017720424400, -0.014793724500,  0.014073600400, -0.014497130900},
-  { -0.022894485700,  0.024455251600, -0.026976449100,  0.031639043700,
-    -0.038598885400,  0.050368084700, -0.077216471400,  0.216528434500,
-    0.178891911700, -0.057029286500,  0.032653627200, -0.022655062900,
-    0.017428585500, -0.014530205800,  0.013853217500, -0.014322369000},
-  { -0.023045282800,  0.024646690200, -0.027197775400,  0.031895218300,
-    -0.038888338700,  0.050696728900, -0.077584995300,  0.217257004100,
-    0.178133731400, -0.056623155700,  0.032291873400, -0.022327273100,
-    0.017136805900, -0.014277189300,  0.013634160600, -0.014137826400},
-  { -0.023192767000,  0.024822499400, -0.027401344200,  0.032131961500,
-    -0.039166330500,  0.051002551300, -0.077938975900,  0.217982956500,
-    0.177395411400, -0.056216071400,  0.031937517200, -0.022006668200,
-    0.016852102000, -0.014020295800,  0.013409708800, -0.013957302500},
-  { -0.023331058700,  0.025010333400, -0.027618613700,  0.032383743600,
-    -0.039451087500,  0.051325946300, -0.078311440600,  0.218717601900,
-    0.176637181300, -0.055808854800,  0.031575100900, -0.021678237600,
-    0.016559610500, -0.013766570600,  0.013190197300, -0.013782589000},
-  { -0.023470126900,  0.025177627600, -0.027822778600,  0.032621025300,
-    -0.039709589400,  0.051620280600, -0.078653073000,  0.219420925700,
-    0.175899125500, -0.055419411200,  0.031239628300, -0.021377016200,
-    0.016283677300, -0.013517060900,  0.012981847200, -0.013607326700},
-  { -0.023613527100,  0.025349395400, -0.028032712000,  0.032865074900,
-    -0.039986031200,  0.051934897400, -0.079005398700,  0.220145965700,
-    0.175147783700, -0.055006606000,  0.030880792200, -0.021052047100,
-    0.015994241000, -0.013265795800,  0.012763748700, -0.013434190200},
-  { -0.023743015900,  0.025525720700, -0.028236227500,  0.033091335800,
-    -0.040252363400,  0.052228216400, -0.079355588500,  0.220859647000,
-    0.174415121200, -0.054613554100,  0.030531916300, -0.020736060900,
-    0.015713408100, -0.013011940600,  0.012552301800, -0.013256584600},
-  { -0.023881218600,  0.025691724900, -0.028439265300,  0.033326721800,
-    -0.040518864300,  0.052531679400, -0.079694814600,  0.221572261900,
-    0.173672040800, -0.054217452300,  0.030191368700, -0.020419854900,
-    0.015431882400, -0.012768208900,  0.012330804800, -0.013077694700},
-  { -0.024016696400,  0.025864605000, -0.028638659800,  0.033559250100,
-    -0.040782083200,  0.052820808400, -0.080040051200,  0.222282695500,
-    0.172940887300, -0.053824260500,  0.029842400300, -0.020114351000,
-    0.015152338700, -0.012514786800,  0.012119093100, -0.012909827000},
-  { -0.024139101200,  0.026023212900, -0.028832942600,  0.033785715200,
-    -0.041039151900,  0.053114037000, -0.080378906900,  0.222975700000,
-    0.172204980000, -0.053434105100,  0.029497290200, -0.019802025600,
-    0.014874303900, -0.012273784000,  0.011910640700, -0.012733999200},
-  { -0.024268830700,  0.026178649300, -0.029023858700,  0.034007728400,
-    -0.041291105000,  0.053401535600, -0.080701758400,  0.223673445000,
-    0.171482978400, -0.053047725600,  0.029165749700, -0.019494308900,
-    0.014600559700, -0.012026289200,  0.011703276500, -0.012569967700},
-  { -0.024385306400,  0.026340154100, -0.029211010100,  0.034216344400,
-    -0.041537691400,  0.053673705700, -0.081027646800,  0.224364465600,
-    0.170754821100, -0.052664294200,  0.028826801200, -0.019197522300,
-    0.014328734600, -0.011789873100,  0.011498850800, -0.012397906100},
-  { -0.024512416500,  0.026492726700, -0.029398158700,  0.034433929800,
-    -0.041784523800,  0.053955054200, -0.081353165500,  0.225057382600,
-    0.170034645100, -0.052278354600,  0.028496294000, -0.018890880000,
-    0.014055945900, -0.011543470000,  0.011282444600, -0.012233380000},
-  { -0.024635779800,  0.026652632600, -0.029583320700,  0.034649470800,
-    -0.042028641800,  0.054233890700, -0.081675879800,  0.225746079600,
-    0.169306244900, -0.051903321700,  0.028167737000, -0.018595879900,
-    0.013785401700, -0.011308563500,  0.011078958400, -0.012061741600},
-  { -0.024744283000,  0.026793421400, -0.029746913300,  0.034851636500,
-    -0.042259399400,  0.054498561600, -0.081973147300,  0.226418695900,
-    0.168601698400, -0.051531646700,  0.027840232000, -0.018299976100,
-    0.013522101400, -0.011080393900,  0.010881222400, -0.011895524600},
-  { -0.024863147800,  0.026936217500, -0.029922928500,  0.035056918500,
-    -0.042492896400,  0.054765605000, -0.082283304900,  0.227096876100,
-    0.167891670700, -0.051153628100,  0.027517442600, -0.018000408400,
-    0.013255461800, -0.010838874100,  0.010679052100, -0.011735641200},
-  { -0.024977875100,  0.027084885600, -0.030094081500,  0.035257818300,
-    -0.042721547900,  0.055017316200, -0.082585986900,  0.227767190600,
-    0.167187177600, -0.050791534100,  0.027190997300, -0.017715404200,
-    0.012993995900, -0.010611428200,  0.010482366800, -0.011569876800},
-  { -0.025080573500,  0.027218999400, -0.030260595300,  0.035452683100,
-    -0.042943711600,  0.055272032600, -0.082882457600,  0.228431981400,
-    0.166486654000, -0.050421461700,  0.026876050100, -0.017423150000,
-    0.012733949200, -0.010375664800,  0.010285088600, -0.011414156900},
-  { -0.025191900900,  0.027364856000, -0.030429438500,  0.035639110100,
-    -0.043164809800,  0.055525970000, -0.083187562800,  0.229096722700,
-    0.165774369800, -0.050058620700,  0.026560090900, -0.017139617800,
-    0.012473832200, -0.010150237400,  0.010079726100, -0.011247937000},
-  { -0.025301408600,  0.027496482800, -0.030592744600,  0.035830313000,
-    -0.043392967400,  0.055777843800, -0.083479360500,  0.229757192500,
-    0.165075323300, -0.049688721100,  0.026245793300, -0.016847826800,
-    0.012214065900, -0.009924855700,  0.009884244000, -0.011083143100},
-  { -0.025396035700,  0.027631903700, -0.030749714100,  0.036015066800,
-    -0.043603445300,  0.056019673100, -0.083761749100,  0.230408652300,
-    0.164383311000, -0.049336013900,  0.025928666900, -0.016571687400,
-    0.011960978000, -0.009694581800,  0.009691737700, -0.010931246800},
-  { -0.025499892900,  0.027756477200, -0.030904859500,  0.036197201000,
-    -0.043812102400,  0.056259353500, -0.084039975100,  0.231066748100,
-    0.163692118500, -0.048972602300,  0.025620788400, -0.016285463700,
-    0.011715943000, -0.009474642200,  0.009500718600, -0.010770500300},
-  { -0.025587973900,  0.027873625100, -0.031051508400,  0.036370261500,
-    -0.044009688500,  0.056487091900, -0.084306442100,  0.231703178600,
-    0.163011748400, -0.048628982800,  0.025323118600, -0.016019505400,
-    0.011471920900, -0.009252420500,  0.009314904500, -0.010624282400},
-  { -0.025686033500,  0.028003222400, -0.031201495400,  0.036546321900,
-    -0.044210265700,  0.056717963000, -0.084586151300,  0.232344053400,
-    0.162326124500, -0.048280259200,  0.025020862500, -0.015749030400,
-    0.011223231400, -0.009036452200,  0.009127889900, -0.010466289100},
-  { -0.025780065800,  0.028116156900, -0.031342439100,  0.036712214700,
-    -0.044400455400,  0.056938084300, -0.084843025700,  0.232972740300,
-    0.161661569100, -0.047942312100,  0.024729320900, -0.015478042100,
-    0.010981773200, -0.008827674600,  0.008936015200, -0.010321897600},
-  { -0.025863505900,  0.028237949300, -0.031484316000,  0.036879378400,
-    -0.044601390800,  0.057159516400, -0.085101130000,  0.233611368900,
-    0.160982608100, -0.047598975500,  0.024432461700, -0.015213032100,
-    0.010738923200, -0.008606212500,  0.008751093900, -0.010166260400},
-  { -0.025952967800,  0.028346554700, -0.031620187000,  0.037040075600,
-    -0.044785182900,  0.057372021900, -0.085360140300,  0.234232816700,
-    0.160311566300, -0.047261891500,  0.024141775800, -0.014953382600,
-    0.010499975700, -0.008398761300,  0.008571352800, -0.010014352200},
-  { -0.026039689900,  0.028462385300, -0.031755365000,  0.037198907100,
-    -0.044967652300,  0.057593857200, -0.085609536100,  0.234853461000,
-    0.159640235100, -0.046924112000,  0.023850713300, -0.014682289800,
-    0.010268343100, -0.008190788700,  0.008389875100, -0.009871323400},
-  { -0.026114821800,  0.028563276700, -0.031893498200,  0.037352645400,
-    -0.045153519300,  0.057798739800, -0.085859387000,  0.235466308600,
-    0.158984686900, -0.046592644400,  0.023565684300, -0.014428158400,
-    0.010035312500, -0.007978032900,  0.008212777900, -0.009721894700},
-  { -0.026197380900,  0.028674126500, -0.032022055600,  0.037504763700,
-    -0.045327782600,  0.058000802500, -0.086106607600,  0.236087895800,
-    0.158318052700, -0.046258378200,  0.023277932300, -0.014171124700,
-    0.009798419700, -0.007771917200,  0.008033410300, -0.009580872000},
-  { -0.026274692700,  0.028767035600, -0.032140124600,  0.037645625200,
-    -0.045489825900,  0.058190028400, -0.086329249600,  0.236683031800,
-    0.157677386600, -0.045939676500,  0.023004845600, -0.013927827700,
-    0.009574249500, -0.007577424400,  0.007864516400, -0.009438250700},
-  { -0.026341359100,  0.028870030600, -0.032260085200,  0.037787266600,
-    -0.045653170900,  0.058390364400, -0.086564748300,  0.237292774000,
-    0.157018351900, -0.045622167700,  0.022725762800, -0.013667509600,
-    0.009352140300, -0.007377781200,  0.007690545500, -0.009301621700},
-  { -0.026415860100,  0.028959823600, -0.032373937700,  0.037922966700,
-    -0.045819242800,  0.058573065700, -0.086789838900,  0.237883048800,
-    0.156379869500, -0.045304400400,  0.022454091700, -0.013426053000,
-    0.009130702800, -0.007175647500,  0.007511909600, -0.009157733600},
-  { -0.026486139900,  0.029046121000, -0.032483676700,  0.038064564500,
-    -0.045972814900,  0.058751361600, -0.087010194700,  0.238467918900,
-    0.155734052300, -0.044997006400,  0.022195302800, -0.013188518400,
-    0.008911224900, -0.006985204400,  0.007346605300, -0.009017719800},
-  { -0.026544650500,  0.029137687900, -0.032591551900,  0.038193255500,
-    -0.046131179100,  0.058937803200, -0.087219020100,  0.239060508500,
-    0.155098325200, -0.044681119300,  0.021925282500, -0.012948009400,
-    0.008689620600, -0.006792714500,  0.007178451900, -0.008886221300},
-  { -0.026609057300,  0.029216641900, -0.032692580400,  0.038314783100,
-    -0.046272077200,  0.059102015300, -0.087424514000,  0.239631193600,
-    0.154463623000, -0.044383621100,  0.021665336500, -0.012716522600,
-    0.008486986700, -0.006599218000,  0.007017378200, -0.008749942500},
-  { -0.026672135800,  0.029303599100, -0.032793916400,  0.038435074500,
-    -0.046411553600,  0.059265982800, -0.087629196300,  0.240212813600,
-    0.153836655200, -0.044074457000,  0.021413239200, -0.012474342700,
-    0.008270409100, -0.006411265100,  0.006853393800, -0.008621850700},
-  { -0.026721976200,  0.029375054800, -0.032887333800,  0.038547619600,
-    -0.046551952900,  0.059432200300, -0.087826286000,  0.240775110200,
-    0.153217488200, -0.043782741400,  0.021158865900, -0.012248204100,
-    0.008061850300, -0.006230594800,  0.006696553400, -0.008488941000},
-  { -0.026779041200,  0.029455506100, -0.032980362900,  0.038659818300,
-    -0.046682659300,  0.059585807800, -0.088019183800,  0.241345587100,
-    0.152598080900, -0.043490655700,  0.020904026300, -0.012020887000,
-    0.007862043900, -0.006049746700,  0.006538532000, -0.008365745600},
-  { -0.026834459500,  0.029522772700, -0.033069335600,  0.038766487900,
-    -0.046816052000,  0.059743644400, -0.088207332900,  0.241899935800,
-    0.151985072700, -0.043192258600,  0.020662084900, -0.011799401200,
-    0.007658087800, -0.005862421100,  0.006382559600, -0.008233810500},
-  { -0.026875984700,  0.029594120700, -0.033163420100,  0.038870631000,
-    -0.046937384600,  0.059887026200, -0.088387814400,  0.242457316000,
-    0.151374476700, -0.042907551700,  0.020414981800, -0.011579317500,
-    0.007464989300, -0.005687757500,  0.006230560200, -0.008105130300},
-  { -0.026927788900,  0.029658101500, -0.033247283000,  0.038982593900,
-    -0.047067967200,  0.060040729000, -0.088580561000,  0.243020071900,
-    0.150758631000, -0.042616124600,  0.020172218500, -0.011356666000,
-    0.007258796500, -0.005508592100,  0.006074179500, -0.007983157300},
-  { -0.026962754000,  0.029721987600, -0.033321568100,  0.039073486100,
-    -0.047174313100,  0.060167864400, -0.088743758000,  0.243550330900,
-    0.150163766200, -0.042344891600,  0.019938097200, -0.011149489200,
-    0.007067136200, -0.005343167000,  0.005919845900, -0.007858967200},
-  { -0.027007624400,  0.029777209800, -0.033396349900,  0.039164455700,
-    -0.047291253700,  0.060307776300, -0.088910561500,  0.244095869900,
-    0.149561525700, -0.042065049900,  0.019706338200, -0.010936112200,
-    0.006879940500, -0.005173633200,  0.005771106400, -0.007743458100},
-  { -0.027050084400,  0.029839930100, -0.033469077500,  0.039252529900,
-    -0.047403936100,  0.060442764900, -0.089072585900,  0.244635866200,
-    0.148963171000, -0.041789645200,  0.019468467400, -0.010725673400,
-    0.006686063700, -0.004994838300,  0.005622426600, -0.007617681800},
-  { -0.027077485500,  0.029885352000, -0.033531679300,  0.039330446700,
-    -0.047496635400,  0.060553978800, -0.089229128400,  0.245152841500,
-    0.148377088500, -0.041534516600,  0.019252707100, -0.010526788500,
-    0.006511584900, -0.004836420600,  0.005483782700, -0.007510337800},
-  { -0.027114750800,  0.029942169700, -0.033597878400,  0.039421896500,
-    -0.047604443400,  0.060683139900, -0.089383414100,  0.245685443800,
-    0.147782948500, -0.041261046500,  0.019027766500, -0.010320954700,
-    0.006320666200, -0.004670815200,  0.005339424900, -0.007387874000},
-  { -0.027149571000,  0.029984769900, -0.033667952600,  0.039498877900,
-    -0.047694806200,  0.060802547900, -0.089538068000,  0.246211745800,
-    0.147194377100, -0.040992574000,  0.018796926000, -0.010115702100,
-    0.006140611400, -0.004507476500,  0.005196186900, -0.007276776700},
-  { -0.027169252500,  0.030030861700, -0.033722116600,  0.039566909200,
-    -0.047785728000,  0.060903432100, -0.089671417900,  0.246713790300,
-    0.146628884600, -0.040747877600,  0.018590642800, -0.009937335800,
-    0.005967529800, -0.004357110300,  0.005065305500, -0.007165536600},
-  { -0.027198514200,  0.030078686000, -0.033778171100,  0.039635751800,
-    -0.047877574700,  0.061014854400, -0.089816950200,  0.247230365400,
-    0.146046598800, -0.040483849800,  0.018374848700, -0.009738964200,
-    0.005793881200, -0.004199654100,  0.004927883500, -0.007048709900},
-  { -0.027225498800,  0.030111200300, -0.033825489900,  0.039706664600,
-    -0.047952151500,  0.061116139800, -0.089941342900,  0.247735896000,
-    0.145484672100, -0.040230608100,  0.018169204500, -0.009551266900,
-    0.005619673100, -0.004037760400,  0.004792587900, -0.006944808900},
-  { -0.027238906300,  0.030150552400, -0.033871892800,  0.039764687300,
-    -0.048032095800,  0.061214521700, -0.090072272700,  0.248238004700,
-    0.144912324100, -0.039985659800,  0.017964244700, -0.009362610000,
-    0.005454760700, -0.003888052900,  0.004661933300, -0.006833632200},
-  { -0.027261029400,  0.030177475500, -0.033924139600,  0.039820545400,
-    -0.048108842000,  0.061311021700, -0.090189496400,  0.248736735600,
-    0.144353453000, -0.039744969800,  0.017763535800, -0.009178450500,
-    0.005283093400, -0.003739016800,  0.004530986400, -0.006733019100},
-  { -0.027278748100,  0.030211452200, -0.033963765200,  0.039872247300,
-    -0.048170611400,  0.061398382500, -0.090309454700,  0.249217705300,
-    0.143792799000, -0.039499198000,  0.017553760300, -0.009003806900,
-    0.005123920600, -0.003593946300,  0.004404173000, -0.006624732800},
-  { -0.027285607600,  0.030230693900, -0.033995062800,  0.039925613200,
-    -0.048237360200,  0.061470769900, -0.090420060400,  0.249702348700,
-    0.143244619700, -0.039267480800,  0.017361477800, -0.008827892900,
-    0.004959568700, -0.003450970500,  0.004278722600, -0.006528665100},
-  { -0.027299867000,  0.030260492100, -0.034029532000,  0.039969736100,
-    -0.048301646800,  0.061551769900, -0.090531292600,  0.250186846500,
-    0.142695621300, -0.039034846100,  0.017168425100, -0.008650250700,
-    0.004804548400, -0.003309959300,  0.004155528900, -0.006423738600},
-  { -0.027311829700,  0.030276666600, -0.034057656100,  0.040007213300,
-    -0.048358207200,  0.061624954700, -0.090633704900,  0.250662990700,
-    0.142142757000, -0.038804959500,  0.016978639900, -0.008476386900,
-    0.004641928300, -0.003168595500,  0.004031158500, -0.006328397300},
-  { -0.027310222200,  0.030295722900, -0.034091543000,  0.040054114300,
-    -0.048405249700,  0.061694722300, -0.090720594500,  0.251131429100,
-    0.141605434000, -0.038581990000,  0.016794826900, -0.008319159800,
-    0.004499540800, -0.003028595200,  0.003904318200, -0.006227186400},
-  { -0.027317970100,  0.030306458400, -0.034113893000,  0.040084569400,
-    -0.048454321900,  0.061758888600, -0.090812420800,  0.251597538600,
-    0.141069989900, -0.038359180300,  0.016622514100, -0.008153648900,
-    0.004355118400, -0.002896910300,  0.003788978800, -0.006128817400},
-  { -0.027322408700,  0.030324310800, -0.034134470700,  0.040112744100,
-    -0.048500250500,  0.061820252000, -0.090901636600,  0.252061541300,
-    0.140535980000, -0.038138344000,  0.016441338600, -0.007987803500,
-    0.004199685000, -0.002761828800,  0.003669989500, -0.006038006300},
-  { -0.027324602000,  0.030339624000, -0.034151729900,  0.040149371300,
-    -0.048547165800,  0.061880613500, -0.090988640700,  0.252522799200,
-    0.140002708200, -0.037917269600,  0.016259063300, -0.007831507500,
-    0.004057015800, -0.002631162900,  0.003555441000, -0.005940171600},
-  { -0.027314851900,  0.030338133100, -0.034171796400,  0.040168382200,
-    -0.048581744400,  0.061940861800, -0.091066456400,  0.252975093200,
-    0.139476737000, -0.037702515700,  0.016084224600, -0.007671474500,
-    0.003906772800, -0.002500886900,  0.003440460400, -0.005852674900},
-  { -0.027312476200,  0.030348556000, -0.034182788700,  0.040197728000,
-    -0.048620522900,  0.061992180000, -0.091143115000,  0.253426570300,
-    0.138949385400, -0.037496867100,  0.015909567200, -0.007521879300,
-    0.003770118000, -0.002375530200,  0.003330548600, -0.005758700400},
-  { -0.027308900300,  0.030346059500, -0.034189299100,  0.040210075200,
-    -0.048649242600,  0.062033003000, -0.091219627900,  0.253871405000,
-    0.138428727000, -0.037284933600,  0.015748179900, -0.007366427500,
-    0.003634318300, -0.002250865900,  0.003220173800, -0.005674994900},
-  { -0.027291156400,  0.030346034000, -0.034201654500,  0.040221399100,
-    -0.048665013800,  0.062069083500, -0.091279630400,  0.254306086800,
-    0.137915259700, -0.037080250800,  0.015582215100, -0.007224968800,
-    0.003504827500, -0.002131832000,  0.003115541600, -0.005585382500},
-  { -0.027283556600,  0.030337810300, -0.034199682900,  0.040235929700,
-    -0.048687487200,  0.062103176600, -0.091336957100,  0.254740700000,
-    0.137411927200, -0.036888380700,  0.015421720100, -0.007078261400,
-    0.003366480500, -0.002011695700,  0.003009395700, -0.005505373600},
-  { -0.027272064200,  0.030336692900, -0.034199174200,  0.040240217600,
-    -0.048706450000,  0.062133585500, -0.091390047400,  0.255169264700,
-    0.136902218400, -0.036685011500,  0.015268001700, -0.006941296500,
-    0.003240948000, -0.001896019300,  0.002907510500, -0.005418047900},
-  { -0.027248039400,  0.030331001200, -0.034191966500,  0.040247715100,
-    -0.048720314000,  0.062167723200, -0.091449297700,  0.255595532100,
-    0.136392728600, -0.036493663300,  0.015108636900, -0.006794821100,
-    0.003113745000, -0.001779622200,  0.002805447300, -0.005330421900},
-  { -0.027233909600,  0.030314184400, -0.034192418000,  0.040245240000,
-    -0.048730903800,  0.062189717900, -0.091492283600,  0.256016406700,
-    0.135898611300, -0.036308554600,  0.014954266000, -0.006664576800,
-    0.002983502200, -0.001666038900,  0.002704732600, -0.005254922300},
-  { -0.027215455700,  0.030304366300, -0.034180802400,  0.040247773900,
-    -0.048740138000,  0.062208163600, -0.091531009000,  0.256430891500,
-    0.135398740700, -0.036112846200,  0.014809292700, -0.006525103100,
-    0.002862380100, -0.001554671000,  0.002606541400, -0.005170558100},
-  { -0.027187650100,  0.030281865200, -0.034163561400,  0.040234336300,
-    -0.048739644700,  0.062216233800, -0.091570002800,  0.256840267600,
-    0.134912928100, -0.035934332400,  0.014660767100, -0.006399204100,
-    0.002746842300, -0.001447380500,  0.002511020600, -0.005099278600},
-  { -0.027164826500,  0.030266800800, -0.034157300200,  0.040233396200,
-    -0.048743282000,  0.062239840100, -0.091604648700,  0.257250575700,
-    0.134413490000, -0.035748887100,  0.014519076200, -0.006262314300,
-    0.002627935400, -0.001338252600,  0.002414767800, -0.005016493400},
-  { -0.027143371600,  0.030242570200, -0.034137799500,  0.040216442600,
-    -0.048738434100,  0.062242822500, -0.091637493400,  0.257654713000,
-    0.133930500000, -0.035570772900,  0.014382400400, -0.006140611400,
-    0.002515774700, -0.001233847400,  0.002321555700, -0.004947156000},
-  { -0.027107457100,  0.030220920600, -0.034111888100,  0.040203792100,
-    -0.048729769800,  0.062241715900, -0.091653939600,  0.258048229900,
-    0.133455517400, -0.035401209000,  0.014243272400, -0.006025214200,
-    0.002399200400, -0.001132590800,  0.002232582100, -0.004870595400},
-  { -0.027078741500,  0.030199249900, -0.034098388500,  0.040182871900,
-    -0.048718972600,  0.062249560500, -0.091682539100,  0.258446283900,
-    0.132964854500, -0.035222237300,  0.014108040800, -0.005893861400,
-    0.002284840400, -0.001026848500,  0.002138024300, -0.004799901300},
-  { -0.027050861400,  0.030166932700, -0.034068442600,  0.040165553900,
-    -0.048705371900,  0.062241192800, -0.091701376100,  0.258836019600,
-    0.132491612100, -0.035051605900,  0.013979073500, -0.005779960100,
-    0.002180035700, -0.000929347100,  0.002051981700, -0.004725695500},
-  { -0.027009514400,  0.030138847000, -0.034036485500,  0.040133308800,
-    -0.048693489400,  0.062239873700, -0.091706871400,  0.259230513500,
-    0.132019240400, -0.034882878100,  0.013840666600, -0.005663538600,
-    0.002073337300, -0.000829862900,  0.001962511100, -0.004659557800},
-  { -0.026976072400,  0.030111284500, -0.034014280800,  0.040115213700,
-    -0.048678076000,  0.062229403200, -0.091722403400,  0.259617106900,
-    0.131545261000, -0.034721796900,  0.013714416500, -0.005551787400,
-    0.001970438800, -0.000734060100,  0.001877974400, -0.004586585500},
-  { -0.026942508300,  0.030072123900, -0.033977399000,  0.040076906100,
-    -0.048648464400,  0.062216113000, -0.091727265200,  0.259993523100,
-    0.131081652600, -0.034558763500,  0.013594098000, -0.005434268500,
-    0.001868519600, -0.000639267000,  0.001792774700, -0.004523786800},
-  { -0.026894698800,  0.030035043200, -0.033945864700,  0.040048640600,
-    -0.048621392100,  0.062194230500, -0.091718251200,  0.260362390800,
-    0.130622438100, -0.034399268600,  0.013476831400, -0.005332669200,
-    0.001763978200, -0.000548375700,  0.001712493000, -0.004454372600},
-  { -0.026858101400,  0.029992822400, -0.033904910800,  0.040006010900,
-    -0.048586130300,  0.062174189600, -0.091714875900,  0.260730415900,
-    0.130162737200, -0.034249709200,  0.013361670100, -0.005230956800,
-    0.001670082700, -0.000460660800,  0.001634796200, -0.004387061400},
-  { -0.026817551300,  0.029956756400, -0.033861618500,  0.039972655000,
-    -0.048554302300,  0.062145158100, -0.091709577400,  0.261097309800,
-    0.129704208100, -0.034089428900,  0.013243154600, -0.005126787000,
-    0.001573784600, -0.000370001900,  0.001552956500, -0.004327008900},
-  { -0.026764892400,  0.029914914700, -0.033824115200,  0.039936894900,
-    -0.048518010200,  0.062122650400, -0.091701578900,  0.261471099700,
-    0.129242600400, -0.033937289100,  0.013125955200, -0.005023257700,
-    0.001477736900, -0.000278806000,  0.001483063100, -0.004260417800},
-  { -0.026723942900,  0.029866954600, -0.033776306400,  0.039885777900,
-    -0.048484357900,  0.062095944700, -0.091689502800,  0.261832669700,
-    0.128796851700, -0.033792097000,  0.013014623800, -0.004924853700,
-    0.001386785000, -0.000193120700,  0.001405618600, -0.004204208100},
-  { -0.026677369100,  0.029823200100, -0.033723634100,  0.039840829600,
-    -0.048439828000,  0.062052525700, -0.091667171300,  0.262181947100,
-    0.128351507600, -0.033643014900,  0.012908660300, -0.004821497300,
-    0.001297966400, -0.000110045000,  0.001331802200, -0.004139947900},
-  { -0.026631089400,  0.029779644500, -0.033684178100,  0.039790688300,
-    -0.048395229300,  0.062022592400, -0.091650848600,  0.262539269000,
-    0.127907136500, -0.033498033100,  0.012797985100, -0.004723290400,
-    0.001205478700, -0.000034034800,  0.001256538900, -0.004085082700},
-  { -0.026573902300,  0.029720893300, -0.033623583100,  0.039737596900,
-    -0.048340055700,  0.061978479200, -0.091617477500,  0.262888924200,
-    0.127463754300, -0.033360614900,  0.012695304100, -0.004633631600,
-    0.001122432500,  0.000044341700,  0.001186615500, -0.004024302800},
-  { -0.026522150600,  0.029670790800, -0.033575106100,  0.039688914300,
-    -0.048301375000,  0.061932964300, -0.091590421200,  0.263234790300,
-    0.127016546500, -0.033218503400,  0.012588312500, -0.004539881200,
-    0.001035742900,  0.000126628900,  0.001111797200, -0.003970051000},
-  { -0.026473220500,  0.029612627700, -0.033515051500,  0.039624070900,
-    -0.048240646500,  0.061883959100, -0.091552786700,  0.263570751000,
-    0.126588986000, -0.033087770300,  0.012491700600, -0.004455578400,
-    0.000957623400,  0.000200514600,  0.001045891900, -0.003912507000},
-  { -0.026409434000,  0.029556965600, -0.033460776600,  0.039568933000,
-    -0.048182001300,  0.061834912800, -0.091525806900,  0.263910245800,
-    0.126156834400, -0.032952152900,  0.012390643600, -0.004367158600,
-    0.000875358500,  0.000278697700,  0.000974841200, -0.003861457500},
-  { -0.026353317400,  0.029502101900, -0.033394973500,  0.039508550400,
-    -0.048117964600,  0.061780340600, -0.091479732400,  0.264247652100,
-    0.125720795200, -0.032819571200,  0.012293251100, -0.004282623500,
-    0.000796996500,  0.000353021900,  0.000908270600, -0.003803350600},
-  { -0.026300063600,  0.029438925700, -0.033329672000,  0.039436382500,
-    -0.048060026200,  0.061726016900, -0.091434512400,  0.264577145700,
-    0.125295550200, -0.032687548300,  0.012206896600, -0.004201204700,
-    0.000720904000,  0.000425856500,  0.000841447500, -0.003755895200},
-  { -0.026232862100,  0.029378736300, -0.033269511800,  0.039375017600,
-    -0.047995635500,  0.061659588400, -0.091383468500,  0.264900163300,
-    0.124873224300, -0.032570746200,  0.012117690200, -0.004123793300,
-    0.000649052900,  0.000494443100,  0.000780101600, -0.003702105200},
-  { -0.026173704500,  0.029320278800, -0.033199111900,  0.039309873100,
-    -0.047925510600,  0.061597170100, -0.091339033000,  0.265233959000,
-    0.124448392000, -0.032439785200,  0.012020034000, -0.004049722900,
-    0.000572266200,  0.000556866100,  0.000718027400, -0.003647327300},
-  { -0.026115105800,  0.029249328200, -0.033136595000,  0.039232475500,
-    -0.047860778200,  0.061535070700, -0.091283444100,  0.265553269700,
-    0.124029148500, -0.032311531400,  0.011937971200, -0.003972488800,
-    0.000499981800,  0.000626385600,  0.000653931700, -0.003602065500},
-  { -0.026053040700,  0.029187959100, -0.033061913700,  0.039161387400,
-    -0.047784155800,  0.061464903000, -0.091231578000,  0.265868569100,
-    0.123611901100, -0.032198029300,  0.011852192100, -0.003898279700,
-    0.000430866400,  0.000692495800,  0.000594828700, -0.003550040600},
-  { -0.025979190500,  0.029119110500, -0.032993298700,  0.039088687600,
-    -0.047717396700,  0.061398326100, -0.091168632300,  0.266191486300,
-    0.123192522800, -0.032068754900,  0.011769073200, -0.003818881300,
-    0.000367747300,  0.000760093900,  0.000531731300, -0.003505638300},
-  { -0.025916736900,  0.029044984700, -0.032912027100,  0.039010819600,
-    -0.047633284300,  0.061319593900, -0.091106317700,  0.266496871700,
-    0.122782327100, -0.031960441800,  0.011688497100, -0.003749535300,
-    0.000303040600,  0.000822340300,  0.000475867100, -0.003456266600},
-  { -0.025852313500,  0.028979555600, -0.032847149600,  0.038930581400,
-    -0.047553631700,  0.061249320900, -0.091041565400,  0.266807297400,
-    0.122364892800, -0.031842624600,  0.011609993400, -0.003674451700,
-    0.000230091300,  0.000883119400,  0.000424433200, -0.003415490600},
-  { -0.025775412400,  0.028907556300, -0.032761339500,  0.038846825400,
-    -0.047473566900,  0.061166435400, -0.090972059800,  0.267117532200,
-    0.121966313400, -0.031726469200,  0.011526657700, -0.003614337200,
-    0.000167921300,  0.000943784400,  0.000369742900, -0.003367277200},
-  { -0.025709333200,  0.028827467700, -0.032686245400,  0.038767569400,
-    -0.047387160100,  0.061086213100, -0.090894622700,  0.267415888400,
-    0.121558234900, -0.031616336600,  0.011456238300, -0.003548028100,
-    0.000105206400,  0.001004973300,  0.000312623600, -0.003327797000},
-  { -0.025638962100,  0.028755960800, -0.032600073600,  0.038681603800,
-    -0.047304659400,  0.061000604600, -0.090822485700,  0.267711413800,
-    0.121152150800, -0.031508074100,  0.011387738000, -0.003483800400,
-    0.000044884500,  0.001063521800,  0.000259812600, -0.003280931700},
-  { -0.025558748500,  0.028679119400, -0.032520166800,  0.038596766500,
-    -0.047212175500,  0.060911299100, -0.090745034900,  0.268015321100,
-    0.120754514200, -0.031402432600,  0.011309574900, -0.003414828400,
-    -0.000008679700,  0.001122626500,  0.000204180800, -0.003242762700},
-  { -0.025491004800,  0.028598264500, -0.032433214400,  0.038499397300,
-    -0.047124517500,  0.060822958600, -0.090656855500,  0.268302409700,
-    0.120353034900, -0.031296168100,  0.011241308700, -0.003361438800,
-    -0.000066919400,  0.001168676900,  0.000156014300, -0.003199268400},
-  { -0.025418085200,  0.028521763200, -0.032353226800,  0.038413339800,
-    -0.047029530200,  0.060731151800, -0.090577351800,  0.268593285800,
-    0.119959312000, -0.031191167100,  0.011175918200, -0.003299906800,
-    -0.000125395300,  0.001226211900,  0.000102202900, -0.003162561900},
-  { -0.025341820300,  0.028442350400, -0.032256880200,  0.038315834400,
-    -0.046933803100,  0.060629970500, -0.090484913100,  0.268880111900,
-    0.119563660200, -0.031092550300,  0.011105920600, -0.003240720400,
-    -0.000180668100,  0.001280388200,  0.000052969800, -0.003118681600},
-  { -0.025257897700,  0.028361984300, -0.032173379200,  0.038225851900,
-    -0.046832398400,  0.060542535700, -0.090401757000,  0.269167050700,
-    0.119168850700, -0.030996156800,  0.011040895200, -0.003190341200,
-    -0.000235221900,  0.001334856800,  0.000001652200, -0.003084097600},
-  { -0.025185554200,  0.028274348700, -0.032076686500,  0.038128681100,
-    -0.046738202500,  0.060444527700, -0.090299385000,  0.269453183200,
-    0.118781343500, -0.030894968100,  0.010978749000, -0.003129872000,
-    -0.000282666000,  0.001376710400, -0.000043286100, -0.003043352800},
-  { -0.025109965600,  0.028194618000, -0.031994340000,  0.038028249000,
-    -0.046633690800,  0.060342765300, -0.090208244500,  0.269732724800,
-    0.118393292300, -0.030792208700,  0.010914101700, -0.003080051000,
-    -0.000337127500,  0.001433304900, -0.000085506800, -0.003010799000},
-  { -0.025021832500,  0.028108476700, -0.031903279600,  0.037928400600,
-    -0.046534338000,  0.060237393200, -0.090110535200,  0.270004747300,
-    0.118009163200, -0.030704739700,  0.010859951400, -0.003028924400,
-    -0.000385645100,  0.001481455800, -0.000129367200, -0.002971404300},
-  { -0.024945375600,  0.028016349500, -0.031801130600,  0.037824453100,
-    -0.046429802200,  0.060137232300, -0.090009416000,  0.270285855600,
-    0.117623618000, -0.030603272900,  0.010796286200, -0.002978759900,
-    -0.000428383200,  0.001531519200, -0.000177806100, -0.002939110000},
-  { -0.024865514300,  0.027931517600, -0.031710668200,  0.037725963100,
-    -0.046320155000,  0.060028342200, -0.089907403100,  0.270554278500,
-    0.117240864200, -0.030515733500,  0.010742257600, -0.002927315300,
-    -0.000479303700,  0.001570599400, -0.000219487800, -0.002900989400},
-  { -0.024784044100,  0.027845171900, -0.031606514800,  0.037619046000,
-    -0.046212603400,  0.059912731300, -0.089796024200,  0.270824597700,
-    0.116863187300, -0.030421218200,  0.010686302700, -0.002886726400,
-    -0.000524060200,  0.001616196800, -0.000261546500, -0.002863090600},
-  { -0.024696294000,  0.027746587900, -0.031508865800,  0.037513479000,
-    -0.046095149100,  0.059794346400, -0.089682984500,  0.271082832700,
-    0.116487577100, -0.030338939200,  0.010637555700, -0.002840569000,
-    -0.000568717900,  0.001661742100, -0.000305400500, -0.002834574300},
-  { -0.024614179100,  0.027660621000, -0.031405176100,  0.037406419500,
-    -0.045986571500,  0.059689822100, -0.089576437400,  0.271346326500,
-    0.116105596800, -0.030249393200,  0.010579370800, -0.002794808000,
-    -0.000608943300,  0.001697477500, -0.000344868200, -0.002798079400},
-  { -0.024528121700,  0.027568162200, -0.031304965400,  0.037295135500,
-    -0.045873231900,  0.059565965700, -0.089466219000,  0.271612337400,
-    0.115727569700, -0.030164681700,  0.010528906800, -0.002747163000,
-    -0.000654868000,  0.001744376300, -0.000389873200, -0.002768719300},
-  { -0.024437594700,  0.027478273400, -0.031210219100,  0.037192230500,
-    -0.045758252600,  0.059449185200, -0.089354351300,  0.271872904900,
-    0.115356267200, -0.030075860600,  0.010482924400, -0.002707124200,
-    -0.000689215900,  0.001788462900, -0.000419849000, -0.002735490700},
-  { -0.024355993600,  0.027379891900, -0.031100796100,  0.037065976700,
-    -0.045634938700,  0.059329528700, -0.089228688900,  0.272129953900,
-    0.114983831800, -0.029994677500,  0.010435538400, -0.002661448300,
-    -0.000735439500,  0.001824188800, -0.000461001300, -0.002708812100},
-  { -0.024270058800,  0.027286742200, -0.031000132500,  0.036954725600,
-    -0.045521223000,  0.059206370700, -0.089107334300,  0.272380972500,
-    0.114620841300, -0.029915068400,  0.010387943600, -0.002628339500,
-    -0.000773306300,  0.001863568800, -0.000497529300, -0.002675426700},
-  { -0.024182088200,  0.027193422300, -0.030886948300,  0.036835959600,
-    -0.045398291800,  0.059082508900, -0.088988209700,  0.272637989000,
-    0.114246195000, -0.029830210100,  0.010335223100, -0.002588198100,
-    -0.000806920200,  0.001905685000, -0.000539287700, -0.002648556200},
-  { -0.024087333600,  0.027097712600, -0.030784892400,  0.036723589400,
-    -0.045271977200,  0.058953274300, -0.088859686000,  0.272881898500,
-    0.113886584200, -0.029750846500,  0.010301351000, -0.002549947700,
-    -0.000846562800,  0.001934940900, -0.000572476600, -0.002617432700},
-  { -0.024001590900,  0.026993402700, -0.030679000400,  0.036606443900,
-    -0.045150554000,  0.058832779800, -0.088732072900,  0.273125908800,
-    0.113513193200, -0.029676327000,  0.010252711500, -0.002513122700,
-    -0.000877067200,  0.001974049600, -0.000611735800, -0.002592531600},
-  { -0.023913083300,  0.026898455900, -0.030563119800,  0.036484791400,
-    -0.045025119300,  0.058693934100, -0.088603102200,  0.273374591600,
-    0.113154412600, -0.029598886400,  0.010207398600, -0.002481943700,
-    -0.000913965300,  0.002015094700, -0.000638597900, -0.002562081700},
-  { -0.023815374100,  0.026799344000, -0.030457501700,  0.036367072300,
-    -0.044902786100,  0.058572790800, -0.088473828000,  0.273618006800,
-    0.112791388300, -0.029513195500,  0.010165016900, -0.002444944300,
-    -0.000947146600,  0.002045354700, -0.000675641700, -0.002538546200},
-  { -0.023725485500,  0.026701008800, -0.030349857900,  0.036247749400,
-    -0.044767731000,  0.058431854000, -0.088329074400,  0.273857995500,
-    0.112436237300, -0.029450197300,  0.010130406600, -0.002412292800,
-    -0.000979178500,  0.002079209800, -0.000707489700, -0.002509178900},
-  { -0.023639414500,  0.026596958900, -0.030232021100,  0.036123651800,
-    -0.044638462800,  0.058300810100, -0.088200445900,  0.274096422800,
-    0.112076957700, -0.029366888100,  0.010090405600, -0.002377569500,
-    -0.001010435600,  0.002107901300, -0.000743082100, -0.002486798400},
-  { -0.023547531800,  0.026496227300, -0.030121514300,  0.036000215000,
-    -0.044509951300,  0.058159209800, -0.088052895500,  0.274333594900,
-    0.111721745400, -0.029301943900,  0.010052135800, -0.002353097400,
-    -0.001040420000,  0.002140548500, -0.000774072300, -0.002458072800},
-  { -0.023446642300,  0.026393710400, -0.030010656200,  0.035875683000,
-    -0.044378805200,  0.058025057300, -0.087919930200,  0.274567466000,
-    0.111361951300, -0.029228839400,  0.010016783300, -0.002322951600,
-    -0.001065376500,  0.002174932100, -0.000809275400, -0.002436583600},
-  { -0.023356224600,  0.026296883500, -0.029893238400,  0.035750612400,
-    -0.044247467300,  0.057893310100, -0.087777694100,  0.274797647300,
-    0.111004330000, -0.029157146400,  0.009982935500, -0.002295711000,
-    -0.001101449700,  0.002203852900, -0.000831096900, -0.002409751900},
-  { -0.023265168600,  0.026184102500, -0.029776226200,  0.035620616000,
-    -0.044111852100,  0.057741079400, -0.087628679600,  0.275027780000,
-    0.110654857700, -0.029083534200,  0.009941856300, -0.002266843400,
-    -0.001124397300,  0.002236651900, -0.000865190200, -0.002389152800},
-  { -0.023164098500,  0.026080272800, -0.029663348400,  0.035494092700,
-    -0.043965976300,  0.057598214300, -0.087485388500,  0.275252475700,
-    0.110312292600, -0.029019980500,  0.009918196800, -0.002237980900,
-    -0.001155997700,  0.002258762900, -0.000891896000, -0.002363396600},
-  { -0.023071295000,  0.025980032600, -0.029541639900,  0.035363736500,
-    -0.043828523400,  0.057457528900, -0.087329639600,  0.275481985700,
-    0.109957830700, -0.028949989000,  0.009886431100, -0.002211532800,
-    -0.001177431500,  0.002290080300, -0.000924936400, -0.002343785600},
-  { -0.022977857000,  0.025877315200, -0.029428661900,  0.035236477300,
-    -0.043694747100,  0.057307956100, -0.087183966300,  0.275705340200,
-    0.109614224000, -0.028883563000,  0.009858208200, -0.002190231800,
-    -0.001207356700,  0.002311491600, -0.000951184900, -0.002318342500},
-  { -0.022884324300,  0.025762575100, -0.029306783100,  0.035112146900,
-    -0.043556341700,  0.057163011400, -0.087035380900,  0.275924294400,
-    0.109260641300, -0.028826112600,  0.009821204200, -0.002164204600,
-    -0.001227918200,  0.002341848700, -0.000983084300, -0.002299519300},
-  { -0.022782491400,  0.025659050200, -0.029181547900,  0.034977723200,
-    -0.043413931200,  0.057015156000, -0.086882727400,  0.276151572300,
-    0.108916066600, -0.028757551100,  0.009790138000, -0.002137523800,
-    -0.001252260400,  0.002366059500, -0.001001252000, -0.002275798800},
-  { -0.022685765900,  0.025552190100, -0.029064307100,  0.034844676000,
-    -0.043271529100,  0.056868813300, -0.086719885800,  0.276361694700,
-    0.108569779600, -0.028692402200,  0.009764314400, -0.002119185700,
-    -0.001277542100,  0.002395334200, -0.001032008700, -0.002257986500},
-  { -0.022589602700,  0.025445511400, -0.028946376900,  0.034711343700,
-    -0.043130672100,  0.056708946400, -0.086558899300,  0.276581678800,
-    0.108230473600, -0.028628118700,  0.009738656200, -0.002099057700,
-    -0.001292564500,  0.002420334600, -0.001056977600, -0.002234052300},
-  { -0.022496001600,  0.025344724600, -0.028822677500,  0.034577788700,
-    -0.042988680400,  0.056561115200, -0.086406171500,  0.276798805200,
-    0.107884769000, -0.028567755500,  0.009710099800, -0.002074387600,
-    -0.001314845000,  0.002440979000, -0.001085689500, -0.002217436800},
-  { -0.022394383100,  0.025226614100, -0.028700012900,  0.034439922500,
-    -0.042840028100,  0.056405162700, -0.086243310500,  0.277004327300,
-    0.107550806200, -0.028506052900,  0.009685232500, -0.002068874300,
-    -0.001333423100,  0.002464213000, -0.001108669600, -0.002195061100},
-  { -0.022297564100,  0.025119808500, -0.028581781400,  0.034305305000,
-    -0.042695656200,  0.056253954500, -0.086083834300,  0.277226300200,
-    0.107203619900, -0.028443348800,  0.009654833100, -0.002042234800,
-    -0.001358263800,  0.002489758900, -0.001130552500, -0.002179375900},
-  { -0.022199944300,  0.025011964800, -0.028462099000,  0.034168711000,
-    -0.042548622300,  0.056098971500, -0.085921130000,  0.277432448700,
-    0.106864987700, -0.028388245500,  0.009632664400, -0.002024860800,
-    -0.001370844300,  0.002512274500, -0.001153285000, -0.002157159200},
-  { -0.022094548100,  0.024903208900, -0.028330041100,  0.034025320000,
-    -0.042394273800,  0.055936365900, -0.085747792700,  0.277639650500,
-    0.106531925400, -0.028326674100,  0.009610046500, -0.002009028700,
-    -0.001396393300,  0.002530754500, -0.001179865400, -0.002142396800},
-  { -0.021995201800,  0.024793027300, -0.028206269200,  0.033896113600,
-    -0.042248483600,  0.055780937400, -0.085583072500,  0.277843916500,
-    0.106192034600, -0.028266589600,  0.009595095600, -0.001993279700,
-    -0.001408007500,  0.002552535400, -0.001202056000, -0.002120617500},
-  { -0.021901583000,  0.024677037500, -0.028084273300,  0.033757782300,
-    -0.042099685900,  0.055624216900, -0.085416983300,  0.278047516100,
-    0.105852072900, -0.028207292800,  0.009568367500, -0.001970246700,
-    -0.001429511100,  0.002575063400, -0.001221321700, -0.002106926400},
-  { -0.021801611400,  0.024565652100, -0.027960051300,  0.033615404000,
-    -0.041944857600,  0.055460095600, -0.085239563600,  0.278250526200,
-    0.105517476900, -0.028154247100,  0.009549327200, -0.001957811700,
-    -0.001451556400,  0.002589582900, -0.001241753500, -0.002086264900},
-  { -0.021699539700,  0.024460899000, -0.027831832100,  0.033477267300,
-    -0.041798158600,  0.055292010700, -0.085067297700,  0.278450786400,
-    0.105189430300, -0.028099508700,  0.009524686500, -0.001949621100,
-    -0.001461338600,  0.002611261800, -0.001266673600, -0.002073264900},
-  { -0.021599986800,  0.024350066900, -0.027708847400,  0.033335865400,
-    -0.041644581200,  0.055128391400, -0.084889121800,  0.278653475900,
-    0.104851735700, -0.028039339300,  0.009510206500, -0.001933711100,
-    -0.001475643600,  0.002624167700, -0.001286367400, -0.002053034800},
-  { -0.021501456000,  0.024240038400, -0.027586029200,  0.033194974400,
-    -0.041491644800,  0.054965250700, -0.084713840400,  0.278849784900,
-    0.104526215400, -0.027986541700,  0.009490451500, -0.001918547800,
-    -0.001486507400,  0.002645934000, -0.001311257700, -0.002040050600},
-  { -0.021403770100,  0.024118477100, -0.027455391500,  0.033058704200,
-    -0.041335183200,  0.054809534600, -0.084538637100,  0.279042526200,
-    0.104190543900, -0.027927521300,  0.009462422300, -0.001906698600,
-    -0.001502518600,  0.002663196100, -0.001323447400, -0.002021097800},
-  { -0.021298248700,  0.024009912800, -0.027321991400,  0.032911712700,
-    -0.041174711300,  0.054635449300, -0.084361255500,  0.279243346600,
-    0.103861290100, -0.027880462700,  0.009455425900, -0.001900093500,
-    -0.001518047500,  0.002684579000, -0.001347505300, -0.002009220500},
-  { -0.021198957800,  0.023898644100, -0.027197497600,  0.032768596100,
-    -0.041018806300,  0.054468678800, -0.084179631800,  0.279432441200,
-    0.103538923200, -0.027828661600,  0.009436950100, -0.001885898300,
-    -0.001530065500,  0.002695060500, -0.001364801200, -0.001990835900},
-  { -0.021097697500,  0.023785545000, -0.027071437200,  0.032621932300,
-    -0.040870290800,  0.054302452500, -0.083997214900,  0.279619234800,
-    0.103205041100, -0.027767473800,  0.009419594300, -0.001879709700,
-    -0.001538161700,  0.002715202100, -0.001388824500, -0.001978335000},
-  { -0.020996580900,  0.023672059200, -0.026941818000,  0.032485359700,
-    -0.040714985700,  0.054134314800, -0.083810986900,  0.279815921900,
-    0.102875847200, -0.027719967200,  0.009399847000, -0.001863555500,
-    -0.001552949300,  0.002731039900, -0.001399562800, -0.001960990100},
-  { -0.020894037400,  0.023552023700, -0.026814717500,  0.032339646100,
-    -0.040555637300,  0.053961014100, -0.083632987700,  0.280004451900,
-    0.102547554800, -0.027669483100,  0.009389127400, -0.001850389700,
-    -0.001565501700,  0.002743236000, -0.001421126700, -0.001950196300},
-  { -0.020796180800,  0.023444081100, -0.026681026200,  0.032192706400,
-    -0.040395032300,  0.053787235200, -0.083442004400,  0.280184129200,
-    0.102229591200, -0.027619025000,  0.009370146400, -0.001848435300,
-    -0.001568643300,  0.002757857900, -0.001437420100, -0.001933077600},
-  { -0.020695687800,  0.023331738800, -0.026554662000,  0.032046118400,
-    -0.040233651400,  0.053610471900, -0.083256870000,  0.280377353300,
-    0.101900357800, -0.027567373500,  0.009358983900, -0.001835136600,
-    -0.001581275300,  0.002770198900, -0.001459273400, -0.001922140900},
-  { -0.020596163500,  0.023219719400, -0.026426870800,  0.031911263600,
-    -0.040078628800,  0.053441716200, -0.083070602600,  0.280564653200,
-    0.101581276800, -0.027518324200,  0.009347882600, -0.001837111200,
-    -0.001593896400,  0.002791306400, -0.001469185600, -0.001906217800},
-  { -0.020486105200,  0.023102669400, -0.026295748600,  0.031757335000,
-    -0.039919465700,  0.053275619900, -0.082878251100,  0.280742505700,
-    0.101258880600, -0.027473598000,  0.009331442300, -0.001823983800,
-    -0.001605491000,  0.002802122100, -0.001489715900, -0.001896148500},
-  { -0.020386038100,  0.022990763600, -0.026169842500,  0.031611536400,
-    -0.039758154000,  0.053098254300, -0.082692676700,  0.280922614500,
-    0.100932867600, -0.027421788700,  0.009318026600, -0.001820868000,
-    -0.001613216100,  0.002809677500, -0.001504548000, -0.001879711300},
-  { -0.020285435000,  0.022877455000, -0.026042393200,  0.031463335700,
-    -0.039594468800,  0.052919415400, -0.082490397700,  0.281103932300,
-    0.100609916000, -0.027373640000,  0.009311303900, -0.001812957700,
-    -0.001617884900,  0.002826213600, -0.001525588000, -0.001869926500},
-  { -0.020192073400,  0.022761936700, -0.025903756400,  0.031323202100,
-    -0.039434316600,  0.052741885600, -0.082304345000,  0.281286138200,
-    0.100291413500, -0.027321921500,  0.009296869200, -0.001808517000,
-    -0.001627660100,  0.002838490600, -0.001533110500, -0.001855192900},
-  { -0.020082641400,  0.022645343300, -0.025773553200,  0.031169977600,
-    -0.039274706000,  0.052574179500, -0.082107814900,  0.281460005200,
-    0.099967050900, -0.027269207300,  0.009282507800, -0.001804192200,
-    -0.001636760100,  0.002847881000, -0.001552740800, -0.001845760100},
-  { -0.019981165400,  0.022530400400, -0.025642740200,  0.031017613200,
-    -0.039105374000,  0.052385802800, -0.081905722200,  0.281637176300,
-    0.099657892600, -0.027230252500,  0.009272886300, -0.001799068700,
-    -0.001637727000,  0.002860056400, -0.001566710200, -0.001830818000},
-  { -0.019880568400,  0.022416781800, -0.025512202200,  0.030878936400,
-    -0.038945254600,  0.052207335300, -0.081716496200,  0.281816351400,
-    0.099338786400, -0.027175974500,  0.009256393500, -0.001792635900,
-    -0.001649711300,  0.002875237500, -0.001579820600, -0.001822507700},
-  { -0.019782364100,  0.022306311600, -0.025387269800,  0.030733042100,
-    -0.038783583100,  0.052030462600, -0.081515568600,  0.281989192800,
-    0.099021663300, -0.027135898100,  0.009251959300, -0.001785903000,
-    -0.001655707600,  0.002880377400, -0.001592362400, -0.001808127200},
-  { -0.019671249500,  0.022187350300, -0.025253455800,  0.030574773900,
-    -0.038616812900,  0.051850662000, -0.081315971000,  0.282153907600,
-    0.098702548800, -0.027086143300,  0.009241521900, -0.001786417100,
-    -0.001657398400,  0.002894723100, -0.001611646700, -0.001799471600},
-  { -0.019570606700,  0.022073795700, -0.025122240000,  0.030434707800,
-    -0.038454440300,  0.051668545300, -0.081120147400,  0.282326299200,
-    0.098383808800, -0.027042545900,  0.009231168400, -0.001786186700,
-    -0.001662356200,  0.002899683900, -0.001624082400, -0.001785075000},
-  { -0.019479635100,  0.021960407900, -0.024988398200,  0.030286004000,
-    -0.038289759200,  0.051487224000, -0.080910856000,  0.282503350600,
-    0.098066057000, -0.026984567000,  0.009223573800, -0.001783286000,
-    -0.001671632200,  0.002912741900, -0.001635839700, -0.001778008400},
-  { -0.019377155600,  0.021844654800, -0.024856282600,  0.030128070300,
-    -0.038122909500,  0.051306676900, -0.080708954700,  0.282668132600,
-    0.097753369800, -0.026946759500,  0.009222427700, -0.001780604500,
-    -0.001670895300,  0.002923256000, -0.001648349000, -0.001764156100},
-  { -0.019269257400,  0.021728932000, -0.024723351000,  0.029986133000,
-    -0.037958156200,  0.051121120600, -0.080507440900,  0.282834989500,
-    0.097436064800, -0.026902305100,  0.009211401200, -0.001779605600,
-    -0.001677015500,  0.002930209300, -0.001665754600, -0.001756624600},
-  { -0.019170951200,  0.021617945900, -0.024597228000,  0.029837934200,
-    -0.037790101700,  0.050945404700, -0.080311308100,  0.283008922400,
-    0.097122904600, -0.026855831200,  0.009197158400, -0.001772074700,
-    -0.001678044700,  0.002939243500, -0.001670904800, -0.001743866400},
-  { -0.019071619200,  0.021505473200, -0.024469290200,  0.029686120900,
-    -0.037632549500,  0.050764840500, -0.080100778400,  0.283171957600,
-    0.096806832700, -0.026811221400,  0.009186304800, -0.001771162500,
-    -0.001683731000,  0.002945624400, -0.001687977400, -0.001736577200},
-  { -0.018968488000,  0.021388132400, -0.024333413500,  0.029538083300,
-    -0.037457346700,  0.050578218900, -0.079887593500,  0.283337590700,
-    0.096492955100, -0.026767354800,  0.009192163800, -0.001770832400,
-    -0.001681516300,  0.002955079600, -0.001699869700, -0.001723295500},
-  { -0.018862478100,  0.021274150600, -0.024204158900,  0.029384739600,
-    -0.037297550600,  0.050392415300, -0.079683587600,  0.283504106100,
-    0.096183264500, -0.026722407800,  0.009180232100, -0.001768308200,
-    -0.001689724600,  0.002967018600, -0.001710235900, -0.001717442700},
-  { -0.018761561600,  0.021159356200, -0.024070689600,  0.029241121700,
-    -0.037129754000,  0.050201664600, -0.079472717100,  0.283660491100,
-    0.095870802000, -0.026679621900,  0.009171925300, -0.001770702400,
-    -0.001691965100,  0.002969448100, -0.001720493300, -0.001704658800},
-  { -0.018668595300,  0.021041132500, -0.023942524200,  0.029090435800,
-    -0.036957408700,  0.050019918900, -0.079266196800,  0.283824708400,
-    0.095561100700, -0.026630607200,  0.009168743300, -0.001772231300,
-    -0.001696435000,  0.002974894800, -0.001736659300, -0.001698209200},
-  { -0.018571534300,  0.020933121700, -0.023805663500,  0.028933443100,
-    -0.036793287300,  0.049827569900, -0.079052887900,  0.283981176300,
-    0.095258665900, -0.026591723800,  0.009164052800, -0.001778570200,
-    -0.001691727400,  0.002982552200, -0.001746931600, -0.001686115500},
-  { -0.018463951300,  0.020817422100, -0.023671874000,  0.028788840800,
-    -0.036622085000,  0.049644890900, -0.078843755900,  0.284139414500,
-    0.094937302500, -0.026549370400,  0.009150120900, -0.001771057900,
-    -0.001693172900,  0.002992954400, -0.001756770400, -0.001680418200},
-  { -0.018364139000,  0.020703740000, -0.023541974700,  0.028632330500,
-    -0.036454574300,  0.049461377000, -0.078632258000,  0.284297024000,
-    0.094630560000, -0.026501577500,  0.009148770700, -0.001774906500,
-    -0.001694643800,  0.002994642500, -0.001766316400, -0.001668313800},
-  { -0.018266186600,  0.020592415900, -0.023412213700,  0.028492007500,
-    -0.036289687800,  0.049272679100, -0.078421164800,  0.284457324700,
-    0.094316696700, -0.026457830700,  0.009146283300, -0.001777143500,
-    -0.001698314300,  0.002999487700, -0.001781999900, -0.001662265200},
-  { -0.018165847100,  0.020477739000, -0.023280404100,  0.028333282800,
-    -0.036119295000,  0.049084885500, -0.078204266000,  0.284608657200,
-    0.094014760000, -0.026416553200,  0.009139701600, -0.001781460200,
-    -0.001696266500,  0.003012636900, -0.001785770200, -0.001651378600},
-  { -0.018061008600,  0.020364436200, -0.023149218600,  0.028191490700,
-    -0.035952564600,  0.048893523500, -0.077988760200,  0.284764041400,
-    0.093702911100, -0.026373328800,  0.009137987500, -0.001784607900,
-    -0.001699031600,  0.003016678700, -0.001800824700, -0.001645793200},
-  { -0.017963440300,  0.020253539400, -0.023021819100,  0.028040064200,
-    -0.035778114400,  0.048706755700, -0.077771874700,  0.284916529600,
-    0.093393907400, -0.026335334700,  0.009129169500, -0.001782780900,
-    -0.001693615300,  0.003016455700, -0.001809252200, -0.001634392700},
-  { -0.017864500900,  0.020140353900, -0.022889140600,  0.027892719100,
-    -0.035614488000,  0.048525355700, -0.077560338000,  0.285077698000,
-    0.093086772800, -0.026290376100,  0.009124974400, -0.001782837800,
-    -0.001700124000,  0.003027010500, -0.001818503700, -0.001629703000},
-  { -0.017767797800,  0.020029767800, -0.022762632500,  0.027742539400,
-    -0.035443127000,  0.048328815000, -0.077336969100,  0.285223614300,
-    0.092784329800, -0.026242686200,  0.009124739900, -0.001788644700,
-    -0.001699564500,  0.003026957800, -0.001826555800, -0.001618684700},
-  { -0.017673081200,  0.019908421800, -0.022626375700,  0.027591688900,
-    -0.035275280700,  0.048141797500, -0.077116537300,  0.285372738700,
-    0.092474868600, -0.026199049700,  0.009123179000, -0.001792125700,
-    -0.001701864700,  0.003030366000, -0.001841112200, -0.001613422400},
-  { -0.017567749800,  0.019794038100, -0.022494731800,  0.027432475300,
-    -0.035103343800,  0.047947719600, -0.076901860200,  0.285524247500,
-    0.092174773000, -0.026162495500,  0.009115656500, -0.001791780100,
-    -0.001692544800,  0.003041601400, -0.001843678200, -0.001603558400},
-  { -0.017470863500,  0.019683203200, -0.022364869500,  0.027291613500,
-    -0.034936118500,  0.047753629900, -0.076679031600,  0.285671811500,
-    0.091863686900, -0.026115241800,  0.009107820400, -0.001801618700,
-    -0.001693384100,  0.003044500800, -0.001858063000, -0.001598323500},
-  { -0.017374543300,  0.019573449500, -0.022237957200,  0.027136848800,
-    -0.034768617100,  0.047567511000, -0.076458633000,  0.285823700200,
-    0.091556728800, -0.026079677000,  0.009109488100, -0.001807759500,
-    -0.001692821000,  0.003044301800, -0.001865780400, -0.001587867000},
-  { -0.017278016500,  0.019462639700, -0.022107866200,  0.026994361100,
-    -0.034597273100,  0.047381154500, -0.076238222500,  0.285975563800,
-    0.091251439600, -0.026032138000,  0.009103004000, -0.001803039800,
-    -0.001692015100,  0.003052700600, -0.001873935800, -0.001583828300},
-  { -0.017174506000,  0.019350009900, -0.021978862300,  0.026838198900,
-    -0.034430712700,  0.047182370700, -0.076007137400,  0.286112971700,
-    0.090946916500, -0.025990224500,  0.009104300700, -0.001810064900,
-    -0.001690153500,  0.003051424200, -0.001880890400, -0.001573670100},
-  { -0.017077386900,  0.019238909500, -0.021847402400,  0.026693327400,
-    -0.034255105000,  0.046987841400, -0.075788745300,  0.286262228400,
-    0.090639789400, -0.025952532400,  0.009104248700, -0.001814795900,
-    -0.001691600600,  0.003054176700, -0.001894703800, -0.001569153000},
-  { -0.016981596000,  0.019128983200, -0.021720457700,  0.026538690300,
-    -0.034087052200,  0.046799004200, -0.075562967900,  0.286407594900,
-    0.090337279400, -0.025905423200,  0.009096027200, -0.001821529400,
-    -0.001680332600,  0.003064309200, -0.001896839700, -0.001559561500},
-  { -0.016884247400,  0.019017118400, -0.021587898200,  0.026389844800,
-    -0.033919719800,  0.046610354100, -0.075335881700,  0.286552421600,
-    0.090031502000, -0.025867448300,  0.009095852900, -0.001826242300,
-    -0.001681411600,  0.003066530900, -0.001910366600, -0.001555232200},
-  { -0.016783704800,  0.018907663300, -0.021462324800,  0.026239733700,
-    -0.033746731200,  0.046405855900, -0.075110245000,  0.286693376000,
-    0.089731283500, -0.025821879500,  0.009092452800, -0.001825134600,
-    -0.001676528000,  0.003070488600, -0.001910937800, -0.001546377000},
-  { -0.016688282800,  0.018797704300, -0.021331826000,  0.026093533900,
-    -0.033581867500,  0.046219477100, -0.074884840400,  0.286843179800,
-    0.089429913200, -0.025781349400,  0.009085971800, -0.001835675000,
-    -0.001676580800,  0.003072425300, -0.001924344300, -0.001542197500},
-  { -0.016594569100,  0.018690756000, -0.021207672000,  0.025943420100,
-    -0.033404937000,  0.046023517900, -0.074664683000,  0.286977836300,
-    0.089126683900, -0.025743532000,  0.009086549100, -0.001841296500,
-    -0.001676983800,  0.003074065100, -0.001937151500, -0.001538275800},
-  { -0.016498716200,  0.018580469200, -0.021077164200,  0.025796245500,
-    -0.033239161900,  0.045835202700, -0.074435467900,  0.287119707900,
-    0.088817903900, -0.025695953100,  0.009088750200, -0.001840528300,
-    -0.001672419000,  0.003078214900, -0.001938044200, -0.001529263800},
-  { -0.016399128000,  0.018471685500, -0.020951717000,  0.025642665600,
-    -0.033070898400,  0.045645401700, -0.074204448300,  0.287263294400,
-    0.088518791800, -0.025655699800,  0.009083077500, -0.001851968500,
-    -0.001671519700,  0.003079287600, -0.001950784000, -0.001525545100},
-  { -0.016303461100,  0.018361514000, -0.020820608400,  0.025497283800,
-    -0.032893481400,  0.045445650100, -0.073974168600,  0.287398826600,
-    0.088215611900, -0.025616230100,  0.009082036700, -0.001853404200,
-    -0.001663416900,  0.003076434500, -0.001956698100, -0.001516114100},
-  { -0.016215838300,  0.018247246600, -0.020690412400,  0.025351871200,
-    -0.032729171400,  0.045259152900, -0.073748515200,  0.287535419700,
-    0.087916911500, -0.025573878100,  0.009073875600, -0.001862252200,
-    -0.001665725900,  0.003083968700, -0.001963597200, -0.001513327100},
-  { -0.016122658700,  0.018140302000, -0.020565897500,  0.025198358100,
-    -0.032563221800,  0.045054475300, -0.073516228400,  0.287669639200,
-    0.087611730400, -0.025527589100,  0.009078560600, -0.001864713500,
-    -0.001657013000,  0.003080858100, -0.001969379300, -0.001503969900},
-  { -0.016030164800,  0.018033299200, -0.020438589400,  0.025057752300,
-    -0.032390709200,  0.044862930000, -0.073281372400,  0.287808844900,
-    0.087312662900, -0.025484515600,  0.009070381000, -0.001873996900,
-    -0.001658952100,  0.003088203600, -0.001976310900, -0.001501262300},
-  { -0.015931594800,  0.017925901000, -0.020314095600,  0.024903471000,
-    -0.032220613500,  0.044666232000, -0.073051883700,  0.287948850700,
-    0.087007865500, -0.025444714700,  0.009076396600, -0.001876815400,
-    -0.001650306000,  0.003085015800, -0.001981877500, -0.001492305300},
-  { -0.015837646000,  0.017817156300, -0.020183755000,  0.024755980300,
-    -0.032052144100,  0.044470365700, -0.072825294900,  0.288078851000,
-    0.086711998100, -0.025403194900,  0.009070080400, -0.001888369000,
-    -0.001648979900,  0.003085609100, -0.001993991000, -0.001488858500},
-  { -0.015745786000,  0.017710651600, -0.020057087700,  0.024614982500,
-    -0.031879037500,  0.044276425800, -0.072585572700,  0.288212217900,
-    0.086414765800, -0.025357212300,  0.009074959300, -0.001891836000,
-    -0.001636592700,  0.003094108300, -0.001994653500, -0.001480767400},
-  { -0.015654004700,  0.017605115800, -0.019933041100,  0.024461035300,
-    -0.031707875300,  0.044077625700, -0.072351635400,  0.288347603800,
-    0.086112304400, -0.025320844800,  0.009069894600, -0.001903992100,
-    -0.001634855100,  0.003094518400, -0.002006818100, -0.001477449400},
-  { -0.015556426100,  0.017497985500, -0.019805930700,  0.024316777100,
-    -0.031543979900,  0.043889313200, -0.072118967800,  0.288475887700,
-    0.085809125600, -0.025278532500,  0.009073340000, -0.001904355000,
-    -0.001629128000,  0.003097408700, -0.002006309300, -0.001469685300},
-  { -0.015464035900,  0.017390367400, -0.019676404700,  0.024169673500,
-    -0.031375546100,  0.043691563100, -0.071884560100,  0.288613216300,
-    0.085517904200, -0.025234780000,  0.009063993200, -0.001909503200,
-    -0.001621883700,  0.003096710200, -0.002018075200, -0.001466497000},
-  { -0.015372811900,  0.017282467800, -0.019563622700,  0.024025743900,
-    -0.031201529400,  0.043494252000, -0.071653858800,  0.288739140200,
-    0.085215783300, -0.025192315000,  0.009065729600, -0.001924642300,
-    -0.001617413500,  0.003093622800, -0.002023130000, -0.001457861300},
-  { -0.015281581500,  0.017176704600, -0.019436707600,  0.023880818700,
-    -0.031035919800,  0.043302468300, -0.071411887600,  0.288870320800,
-    0.084911325500, -0.025147413900,  0.009067220900, -0.001923185400,
-    -0.001613820700,  0.003099574200, -0.002029502500, -0.001455518600},
-  { -0.015190068200,  0.017070271400, -0.019307909900,  0.023733865500,
-    -0.030866540700,  0.043102902900, -0.071173336500,  0.289002944200,
-    0.084617972200, -0.025112304400,  0.009063501400, -0.001937412700,
-    -0.001609315800,  0.003096284800, -0.002034312100, -0.001447330000},
-  { -0.015095192700,  0.016966497900, -0.019187203800,  0.023583328300,
-    -0.030698827600,  0.042906585900, -0.070941485100,  0.289127389400,
-    0.084313384800, -0.025064553400,  0.009058701400, -0.001941756600,
-    -0.001604479400,  0.003101858000, -0.002040355800, -0.001445044100},
-  { -0.015005498900,  0.016861988700, -0.019061283500,  0.023439043400,
-    -0.030533338900,  0.042714039500, -0.070696301300,  0.289257793800,
-    0.084018453400, -0.025022964500,  0.009063774800, -0.001944654100,
-    -0.001595199500,  0.003097508000, -0.002044866400, -0.001436913900},
-  { -0.014917519700,  0.016759937100, -0.018938392400,  0.023301552900,
-    -0.030361552500,  0.042516727200, -0.070462608200,  0.289383840200,
-    0.083722905800, -0.024979066000,  0.009063562600, -0.001958070000,
-    -0.001592655700,  0.003097143300, -0.002056302800, -0.001434061400},
-  { -0.014829329300,  0.016657963500, -0.018818329000,  0.023150063400,
-    -0.030188546200,  0.042326526200, -0.070230755300,  0.289510095600,
-    0.083425985400, -0.024932767200,  0.009060147700, -0.001964069200,
-    -0.001585752700,  0.003099557300, -0.002055331700, -0.001426747600},
-  { -0.014740487700,  0.016554974400, -0.018693430700,  0.023006696000,
-    -0.030022736600,  0.042129344000, -0.069991474400,  0.289643060400,
-    0.083121682100, -0.024891262300,  0.009057517500, -0.001970699600,
-    -0.001577810900,  0.003098336700, -0.002066861800, -0.001423747700},
-  { -0.014646034300,  0.016450370300, -0.018567891400,  0.022863023200,
-    -0.029856412200,  0.041932542200, -0.069755255200,  0.289764874500,
-    0.082826383600, -0.024845070000,  0.009054717400, -0.001980678900,
-    -0.001582625700,  0.003096053600, -0.002064831500, -0.001416907600},
-  { -0.014559627800,  0.016349891900, -0.018449559000,  0.022713561300,
-    -0.029689051900,  0.041737590700, -0.069503998900,  0.289888685100,
-    0.082532448100, -0.024801087800,  0.009058174200, -0.001982046700,
-    -0.001575159300,  0.003094262100, -0.002075770200, -0.001414337900},
-  { -0.014471061400,  0.016243913500, -0.018334760000,  0.022579662500,
-    -0.029519935000,  0.041541189800, -0.069267292000,  0.290011569200,
-    0.082230235800, -0.024758694700,  0.009055155500, -0.001988704700,
-    -0.001567128600,  0.003092724100, -0.002086898100, -0.001411478900},
-  { -0.014383790400,  0.016142525900, -0.018211358000,  0.022437490000,
-    -0.029354488900,  0.041343948500, -0.069028755000,  0.290131292800,
-    0.081930443400, -0.024718526100,  0.009055027000, -0.002001893100,
-    -0.001564993600,  0.003095765300, -0.002085806300, -0.001404564500},
-  { -0.014297586900,  0.016042263500, -0.018092816300,  0.022287585300,
-    -0.029185104300,  0.041142095700, -0.068780397800,  0.290253164200,
-    0.081635398000, -0.024670766100,  0.009051397000, -0.002008669700,
-    -0.001556387000,  0.003093691000, -0.002096680100, -0.001401882300},
-  { -0.014206281900,  0.015941116300, -0.017970542200,  0.022146976500,
-    -0.029021815100,  0.040946718000, -0.068542945900,  0.290377478100,
-    0.081340267800, -0.024629081800,  0.009048347000, -0.002014963700,
-    -0.001548946600,  0.003095699600, -0.002095226400, -0.001395190900},
-  { -0.014118938600,  0.015839406100, -0.017846481100,  0.022002842700,
-    -0.028850387900,  0.040754474000, -0.068302308800,  0.290494347700,
-    0.081040072300, -0.024586190700,  0.009045183800, -0.002021575300,
-    -0.001540744900,  0.003093740800, -0.002106039500, -0.001392505100},
-  { -0.014033359700,  0.015739387800, -0.017724211200,  0.021861411400,
-    -0.028685336800,  0.040555731500, -0.068055928700,  0.290621547300,
-    0.080744453800, -0.024543547500,  0.009041815800, -0.002027861900,
-    -0.001533174400,  0.003095698800, -0.002104702000, -0.001385829000},
-  { -0.013950756900,  0.015643569600, -0.017610720400,  0.021716480000,
-    -0.028520619600,  0.040359106100, -0.067815030400,  0.290742857900,
-    0.080448884900, -0.024496193000,  0.009046978300, -0.002042499600,
-    -0.001529706600,  0.003094623000, -0.002115681000, -0.001383359700},
-  { -0.013857978600,  0.015536744300, -0.017494757400,  0.021577567700,
-    -0.028357551400,  0.040162405000, -0.067572563200,  0.290861113600,
-    0.080155270500, -0.024453193600,  0.009043386000, -0.002048697200,
-    -0.001522077700,  0.003096377800, -0.002113994500, -0.001376849300},
-  { -0.013773229200,  0.015437926100, -0.017374226900,  0.021440417100,
-    -0.028180320800,  0.039967168700, -0.067326482200,  0.290971758300,
-    0.079856769100, -0.024409237700,  0.009039889200, -0.002055553100,
-    -0.001513509600,  0.003093955600, -0.002124476100, -0.001374342300},
-  { -0.013689059900,  0.015339335300, -0.017253688600,  0.021300179900,
-    -0.028015676300,  0.039767446600, -0.067075438600,  0.291093788100,
-    0.079560972200, -0.024359858000,  0.009042893100, -0.002064956100,
-    -0.001502425900,  0.003088564100, -0.002128108700, -0.001366787300},
-  { -0.013608286800,  0.015245837400, -0.017142104300,  0.021157264500,
-    -0.027853162500,  0.039572395400, -0.066833494600,  0.291213669600,
-    0.079258669800, -0.024318259900,  0.009036431600, -0.002066451500,
-    -0.001504139700,  0.003088416900, -0.002132688700, -0.001365518600},
-  { -0.013526024300,  0.015149195700, -0.017023199600,  0.021019023100,
-    -0.027690881700,  0.039375542700, -0.066588317200,  0.291332516600,
-    0.078972791400, -0.024276630700,  0.009034254800, -0.002074639200,
-    -0.001493462900,  0.003082938500, -0.002135814900, -0.001358430400},
-  { -0.013436720300,  0.015049535100, -0.016902143900,  0.020877384400,
-    -0.027520351800,  0.039182293600, -0.066341740000,  0.291445410400,
-    0.078678890800, -0.024226476800,  0.009036993800, -0.002087255200,
-    -0.001492702300,  0.003088470800, -0.002141367000, -0.001357082800},
-  { -0.013351892900,  0.014946715800, -0.016789045200,  0.020740566100,
-    -0.027358305900,  0.038984672800, -0.066093324400,  0.291557196100,
-    0.078381474100, -0.024188073400,  0.009035188200, -0.002095570400,
-    -0.001481921800,  0.003082911700, -0.002144524900, -0.001349842500},
-  { -0.013270943900,  0.014852276800, -0.016672927800,  0.020605326600,
-    -0.027198631300,  0.038789809200, -0.065848400700,  0.291673553600,
-    0.078077054200, -0.024136747400,  0.009027973200, -0.002105937200,
-    -0.001475208500,  0.003087524600, -0.002150215500, -0.001348116400},
-  { -0.013190641200,  0.014758176300, -0.016560228700,  0.020459538900,
-    -0.027027766200,  0.038596149400, -0.065599338300,  0.291786795400,
-    0.077792721000, -0.024094239400,  0.009025651700, -0.002114130700,
-    -0.001464447200,  0.003081710900, -0.002153019500, -0.001341225900},
-  { -0.013110011800,  0.014663919000, -0.016444050200,  0.020323488600,
-    -0.026866946500,  0.038399388600, -0.065350608700,  0.291898436700,
-    0.077491289100, -0.024045414700,  0.009025408000, -0.002119522600,
-    -0.001458535300,  0.003086316400, -0.002158494200, -0.001339767200},
-  { -0.013025077600,  0.014569262800, -0.016328233200,  0.020188140300,
-    -0.026707041800,  0.038203933500, -0.065102449400,  0.292014040700,
-    0.077196425000, -0.023998381000,  0.009026360900, -0.002125747900,
-    -0.001454699900,  0.003075666900, -0.002160549700, -0.001332912300},
-  { -0.012943770500,  0.014473806100, -0.016209483700,  0.020047933100,
-    -0.026536730800,  0.038005130000, -0.064858733100,  0.292129090700,
-    0.076903557900, -0.023957398700,  0.009021448800, -0.002130265600,
-    -0.001449188900,  0.003080409800, -0.002165817700, -0.001331821400},
-  { -0.012862479300,  0.014374613700, -0.016100609100,  0.019915634000,
-    -0.026378597000,  0.037810235300, -0.064609585900,  0.292243989500,
-    0.076607212500, -0.023906702500,  0.009015226300, -0.002142422000,
-    -0.001439416300,  0.003077588100, -0.002176246500, -0.001329411400},
-  { -0.012776898100,  0.014287400700, -0.015987370400,  0.019781456700,
-    -0.026218842900,  0.037613307800, -0.064357589600,  0.292354833000,
-    0.076314227000, -0.023860018100,  0.009017528200, -0.002151344500,
-    -0.001428408900,  0.003071783900, -0.002179145600, -0.001322405100},
-  { -0.012699499300,  0.014196955700, -0.015878862800,  0.019639469300,
-    -0.026050975100,  0.037421391100, -0.064106762900,  0.292466530500,
-    0.076019700600, -0.023810871100,  0.009017151300, -0.002156670200,
-    -0.001422547300,  0.003076233500, -0.002184458600, -0.001321218400},
-  { -0.012616476800,  0.014104155900, -0.015764904400,  0.019506037600,
-    -0.025892093800,  0.037225319700, -0.063853917500,  0.292576319400,
-    0.075724712100, -0.023759323400,  0.009010001600, -0.002167557500,
-    -0.001417698000,  0.003065150800, -0.002186268300, -0.001314354900},
-  { -0.012537078000,  0.014007257400, -0.015657767200,  0.019375159900,
-    -0.025735481500,  0.037031767000, -0.063607547900,  0.292680753800,
-    0.075427591700, -0.023721555300,  0.009004937300, -0.002171714300,
-    -0.001412157700,  0.003069674600, -0.002191380800, -0.001313321900},
-  { -0.012457823800,  0.013913853300, -0.015541317500,  0.019236546600,
-    -0.025565504100,  0.036831074500, -0.063356530800,  0.292786821600,
-    0.075136252200, -0.023673990600,  0.009007040500, -0.002180765400,
-    -0.001401081300,  0.003063717500, -0.002193998000, -0.001306486000},
-  { -0.012381206600,  0.013823584100, -0.015429059800,  0.019104315500,
-    -0.025407276700,  0.036634397500, -0.063101285300,  0.292893802300,
-    0.074841359700, -0.023620522900,  0.008998337100, -0.002190657800,
-    -0.001393998700,  0.003067771800, -0.002199287800, -0.001305173000},
-  { -0.012304800000,  0.013733603800, -0.015316494200,  0.018970177400,
-    -0.025242884300,  0.036443834300, -0.062848029800,  0.293006277700,
-    0.074548400000, -0.023577987000,  0.009001070400, -0.002199540200,
-    -0.001383193600,  0.003061911500, -0.002201990500, -0.001298486200},
-  { -0.012231594800,  0.013648384700, -0.015213765300,  0.018835062100,
-    -0.025085987100,  0.036250520900, -0.062599496300,  0.293108050300,
-    0.074248575600, -0.023530332000,  0.008998523600, -0.002201711800,
-    -0.001384640400,  0.003061515200, -0.002206188900, -0.001297565000},
-  { -0.012146903000,  0.013548919900, -0.015104288800,  0.018700312600,
-    -0.024918766800,  0.036051519300, -0.062347556700,  0.293216599600,
-    0.073961694600, -0.023479470700,  0.008992759700, -0.002215250000,
-    -0.001372665000,  0.003055268400, -0.002208668300, -0.001290828100},
-  { -0.012072689000,  0.013461432300, -0.014994590500,  0.018570057000,
-    -0.024762400200,  0.035856112000, -0.062091368600,  0.293326498300,
-    0.073667719600, -0.023433472500,  0.008991998000, -0.002220358400,
-    -0.001366666100,  0.003059661400, -0.002213970900, -0.001289852900},
-  { -0.011998777300,  0.013374412100, -0.014885760000,  0.018440114900,
-    -0.024601980400,  0.035669418700, -0.061843667600,  0.293431988400,
-    0.073372194300, -0.023379395200,  0.008991178300, -0.002234495000,
-    -0.001354819600,  0.003053533900, -0.002216603000, -0.001282913700},
-  { -0.011922344800,  0.013284279500, -0.014771995300,  0.018300582900,
-    -0.024446846900,  0.035466290700, -0.061588331200,  0.293533527800,
-    0.073072951600, -0.023330451200,  0.008988073400, -0.002236664600,
-    -0.001356054900,  0.003053154500, -0.002220878800, -0.001282008300},
-  { -0.011845461600,  0.013189357000, -0.014666643200,  0.018169987600,
-    -0.024284154200,  0.035275317400, -0.061329463600,  0.293638750200,
-    0.072780111500, -0.023282772800,  0.008982191000, -0.002249832100,
-    -0.001344236100,  0.003046802300, -0.002223339400, -0.001275293500},
-  { -0.011769115200,  0.013103666900, -0.014559744600,  0.018043115400,
-    -0.024131925000,  0.035084175400, -0.061079622500,  0.293746271400,
-    0.072492005600, -0.023234912400,  0.008978152700, -0.002247134700,
-    -0.001333772300,  0.003050212200, -0.002228201400, -0.001274483600},
-  { -0.011694882200,  0.013015910500, -0.014448925000,  0.017910112100,
-    -0.023966290300,  0.034885265900, -0.060823698800,  0.293850684700,
-    0.072198731500, -0.023185828700,  0.008970913900, -0.002258841200,
-    -0.001323837000,  0.003046799700, -0.002238111400, -0.001272408000},
-  { -0.011623815900,  0.012932068300, -0.014343601700,  0.017784544000,
-    -0.023814273900,  0.034693878200, -0.060571265600,  0.293950616300,
-    0.071902922400, -0.023127290700,  0.008965455900, -0.002267675400,
-    -0.001322245300,  0.003043324900, -0.002234895800, -0.001266776300},
-  { -0.011540516700,  0.012843156400, -0.014239964400,  0.017653808300,
-    -0.023649793700,  0.034495386400, -0.060314068800,  0.294053570900,
-    0.071604519400, -0.023084721700,  0.008966178100, -0.002274742400,
-    -0.001313420800,  0.003040255700, -0.002244873300, -0.001264793200},
-  { -0.011472239700,  0.012762833200, -0.014142299300,  0.017523724800,
-    -0.023496551600,  0.034302863600, -0.060059835200,  0.294155332000,
-    0.071318036600, -0.023035573000,  0.008958134900, -0.002285404200,
-    -0.001304581400,  0.003041364800, -0.002242376300, -0.001259366100},
-  { -0.011396549400,  0.012678155200, -0.014036439400,  0.017396575200,
-    -0.023338009400,  0.034116321500, -0.059806163900,  0.294253594500,
-    0.071016115000, -0.022981051800,  0.008953591700, -0.002294842900,
-    -0.001302187900,  0.003033306900, -0.002251340000, -0.001257327400},
-  { -0.011323121700,  0.012586727200, -0.013934406600,  0.017269467600,
-    -0.023182283200,  0.033913734300, -0.059546703200,  0.294357625700,
-    0.070729691900, -0.022931857800,  0.008949854300, -0.002293460500,
-    -0.001289637300,  0.003033725600, -0.002248666800, -0.001252011800},
-  { -0.011252540100,  0.012503092200, -0.013827892600,  0.017136721300,
-    -0.023029828700,  0.033729073000, -0.059293518700,  0.294460157000,
-    0.070434097200, -0.022879051900,  0.008946945700, -0.002305315700,
-    -0.001279931900,  0.003030359000, -0.002258640400, -0.001249868500},
-  { -0.011182377900,  0.012419958100, -0.013722251500,  0.017009920100,
-    -0.022874644300,  0.033527611400, -0.059037642400,  0.294550501800,
-    0.070143346800, -0.022826323700,  0.008936004500, -0.002312971700,
-    -0.001278495600,  0.003026834400, -0.002255007200, -0.001244616700},
-  { -0.011112979600,  0.012337731100, -0.013617730300,  0.016882921900,
-    -0.022715294600,  0.033338099000, -0.058774188400,  0.294654140800,
-    0.069848353600, -0.022774221100,  0.008938942400, -0.002318660300,
-    -0.001272367300,  0.003031143500, -0.002260491700, -0.001243631400},
-  { -0.011036494600,  0.012247285200, -0.013517704400,  0.016757477900,
-    -0.022556496100,  0.033144550900, -0.058521997300,  0.294752983200,
-    0.069553175900, -0.022719357000,  0.008933910800, -0.002324464800,
-    -0.001256128400,  0.003023848100, -0.002262428500, -0.001237037300},
-  { -0.010969358900,  0.012167754700, -0.013416137200,  0.016635331800,
-    -0.022407065400,  0.032953544400, -0.058263509000,  0.294849437700,
-    0.069259760100, -0.022670102300,  0.008922281200, -0.002330427000,
-    -0.001256945700,  0.003023412200, -0.002266647300, -0.001236321600},
-  { -0.010900887700,  0.012086623000, -0.013312472500,  0.016509174100,
-    -0.022247384700,  0.032758671600, -0.058008634000,  0.294944915100,
-    0.068966542100, -0.022616489300,  0.008919626500, -0.002343674400,
-    -0.001245178500,  0.003017029900, -0.002268726500, -0.001229834600},
-  { -0.010824042300,  0.012004282000, -0.013216314100,  0.016383459600,
-    -0.022105269700,  0.032570797200, -0.057751817000,  0.295047141500,
-    0.068676416600, -0.022561101300,  0.008913972000, -0.002352971000,
-    -0.001238353400,  0.003021279300, -0.002274200700, -0.001228791200},
-  { -0.010755431700,  0.011922721200, -0.013111568500,  0.016255565900,
-    -0.021943625600,  0.032372518000, -0.057486437700,  0.295142943400,
-    0.068385169700, -0.022513896200,  0.008909637200, -0.002350338500,
-    -0.001230956100,  0.003009550000, -0.002274839200, -0.001222885000},
-  { -0.010688812000,  0.011843615700, -0.013010433300,  0.016132334200,
-    -0.021787511700,  0.032185366300, -0.057225248100,  0.295234898600,
-    0.068091568200, -0.022457194700,  0.008903658200, -0.002359880400,
-    -0.001223949400,  0.003013484800, -0.002280163100, -0.001221768100},
-  { -0.010616490000,  0.011757803200, -0.012915294700,  0.016012759800,
-    -0.021638667600,  0.031988588100, -0.056969680800,  0.295335292700,
-    0.067795719500, -0.022406367600,  0.008900068000, -0.002371512600,
-    -0.001214114500,  0.003010061800, -0.002290053700, -0.001219729000},
-  { -0.010551509800,  0.011680400300, -0.012815991100,  0.015891596000,
-    -0.021485136600,  0.031804218000, -0.056710441700,  0.295433201300,
-    0.067505660900, -0.022347745200,  0.008890402300, -0.002371663200,
-    -0.001208867400,  0.003006011700, -0.002286436600, -0.001214616000},
-  { -0.010484290500,  0.011600637200, -0.012712731400,  0.015760653300,
-    -0.021331865900,  0.031610777900, -0.056451724100,  0.295523834300,
-    0.067206178800, -0.022295584100,  0.008886317900, -0.002383054500,
-    -0.001199058000,  0.003002379300, -0.002296230600, -0.001212436700},
-  { -0.010418126800,  0.011517277400, -0.012619826700,  0.015643456400,
-    -0.021185866100,  0.031421091300, -0.056188447800,  0.295617466000,
-    0.066918218000, -0.022237804200,  0.008878791700, -0.002390705100,
-    -0.001198036500,  0.002999278000, -0.002292788000, -0.001207424300},
-  { -0.010353664500,  0.011440787900, -0.012520884000,  0.015521915600,
-    -0.021030519400,  0.031228731500, -0.055930893500,  0.295714067400,
-    0.066622310400, -0.022183982500,  0.008871703300, -0.002394208300,
-    -0.001184119100,  0.002994763100, -0.002302348400, -0.001205321400},
-  { -0.010290103500,  0.011365248300, -0.012423245400,  0.015401999100,
-    -0.020877200500,  0.031043216800, -0.055667568800,  0.295807177000,
-    0.066328312100, -0.022131427200,  0.008866742900, -0.002404798200,
-    -0.001175466100,  0.002996071300, -0.002300011200, -0.001200034300},
-  { -0.010212808300,  0.011286215600, -0.012331974000,  0.015285837100,
-    -0.020731638800,  0.030848876200, -0.055414282300,  0.295894792100,
-    0.066040074000, -0.022070359700,  0.008854931500, -0.002403060700,
-    -0.001172180300,  0.002994947800, -0.002303988400, -0.001199255200},
-  { -0.010148001100,  0.011208895700, -0.012231165800,  0.015157088900,
-    -0.020580030600,  0.030655950200, -0.055152663300,  0.295985303100,
-    0.065747514100, -0.022018328800,  0.008851064800, -0.002415287100,
-    -0.001160745800,  0.002988510300, -0.002305832600, -0.001193029800},
-  { -0.010085579200,  0.011134601100, -0.012134860100,  0.015038441400,
-    -0.020427698700,  0.030471019600, -0.054887446700,  0.296075847400,
-    0.065452832100, -0.021962597300,  0.008842662600, -0.002421544800,
-    -0.001161750800,  0.002988338000, -0.002310334400, -0.001192214700},
-  { -0.010020900500,  0.011052809300, -0.012042691300,  0.014920355400,
-    -0.020274570600,  0.030279417600, -0.054626925700,  0.296172290700,
-    0.065163770900, -0.021908764800,  0.008835761000, -0.002425750100,
-    -0.001146354300,  0.002981060500, -0.002311933800, -0.001186088400},
-  { -0.009959891000,  0.010980172100, -0.011948361700,  0.014804636400,
-    -0.020129945500,  0.030089125800, -0.054357841800,  0.296258886800,
-    0.064870816200, -0.021853498100,  0.008828516100, -0.002434510900,
-    -0.001139351300,  0.002984984200, -0.002317376800, -0.001185031900},
-  { -0.009898260300,  0.010906814900, -0.011851836600,  0.014680546000,
-    -0.019983871100,  0.029902690900, -0.054105959400,  0.296352017200,
-    0.064574678500, -0.021802440100,  0.008820504400, -0.002435747100,
-    -0.001132168000,  0.002973757000, -0.002317979100, -0.001179124900},
-  { -0.009829464000,  0.010824029000, -0.011759300000,  0.014562038800,
-    -0.019829369800,  0.029708485400, -0.053839700800,  0.296436562600,
-    0.064282383100, -0.021746613300,  0.008813206900, -0.002444614700,
-    -0.001125189300,  0.002977740500, -0.002323403700, -0.001178072500},
-  { -0.009762586000,  0.010757748000, -0.011668677900,  0.014449006700,
-    -0.019682702400,  0.029529044900, -0.053581877800,  0.296526171200,
-    0.063990447900, -0.021679886200,  0.008799692100, -0.002450355900,
-    -0.001116909400,  0.002966009600, -0.002323961500, -0.001171914500},
-  { -0.009702145300,  0.010685674300, -0.011573598100,  0.014326849900,
-    -0.019542481200,  0.029334344500, -0.053317589600,  0.296618745800,
-    0.063695013000, -0.021628522100,  0.008793030100, -0.002459004700,
-    -0.001110081400,  0.002970330900, -0.002329660800, -0.001170874500},
-  { -0.009639674100,  0.010606181300, -0.011483842100,  0.014211122400,
-    -0.019391070400,  0.029143138800, -0.053052763700,  0.296709109200,
-    0.063405648500, -0.021569686100,  0.008780917600, -0.002456863700,
-    -0.001107234800,  0.002969450300, -0.002333956200, -0.001170125300},
-  { -0.009581441000,  0.010536858700, -0.011393027300,  0.014097865300,
-    -0.019243677500,  0.028962045800, -0.052791038800,  0.296794244500,
-    0.063110931400, -0.021511634200,  0.008780017100, -0.002469118700,
-    -0.001096137300,  0.002963079500, -0.002335754800, -0.001163895700},
-  { -0.009515365500,  0.010456770600, -0.011303346500,  0.013982426200,
-    -0.019092348700,  0.028770277400, -0.052523860000,  0.296881395600,
-    0.062822494300, -0.021452275300,  0.008767593500, -0.002466860000,
-    -0.001093302800,  0.002962141700, -0.002339996800, -0.001163170100},
-  { -0.009457035400,  0.010387174600, -0.011211408300,  0.013863735500,
-    -0.018955461900,  0.028578727400, -0.052264429900,  0.296965665500,
-    0.062526684700, -0.021390879000,  0.008758231200, -0.002482874600,
-    -0.001081090900,  0.002955577100, -0.002341776700, -0.001156792500},
-  { -0.009400556800,  0.010319669900, -0.011122203700,  0.013752383900,
-    -0.018810443800,  0.028400005500, -0.052003778300,  0.297056151300,
-    0.062236110400, -0.021336172300,  0.008746430300, -0.002480260300,
-    -0.001078834400,  0.002954987600, -0.002346166500, -0.001156099600},
-  { -0.009332105500,  0.010246624400, -0.011036161100,  0.013639306600,
-    -0.018660250400,  0.028208189500, -0.051734216700,  0.297140614200,
-    0.061941420000, -0.021276152500,  0.008744611200, -0.002492352100,
-    -0.001067597300,  0.002948573300, -0.002347967100, -0.001149887200},
-  { -0.009272360200,  0.010174446400, -0.010935538100,  0.013522491900,
-    -0.018517173300,  0.028021068000, -0.051473353600,  0.297221172300,
-    0.061647632000, -0.021220051600,  0.008732236600, -0.002489611700,
-    -0.001065202900,  0.002947918700, -0.002352278400, -0.001149066000},
-  { -0.009213325600,  0.010098901500, -0.010850127500,  0.013411298100,
-    -0.018369198800,  0.027831555500, -0.051205897900,  0.297312718800,
-    0.061355453400, -0.021156852500,  0.008721014300, -0.002503786900,
-    -0.001055769400,  0.002949420200, -0.002350196200, -0.001143817000},
-  { -0.009154686400,  0.010032437200, -0.010762989400,  0.013303147900,
-    -0.018232338700,  0.027647756700, -0.050939241800,  0.297396279600,
-    0.061067211800, -0.021101691400,  0.008709501200, -0.002502402100,
-    -0.001050877900,  0.002940699400, -0.002358437400, -0.001142165600},
-  { -0.009098345900,  0.009964812300, -0.010672807300,  0.013184994200,
-    -0.018090535100,  0.027462057700, -0.050678910500,  0.297482132700,
-    0.060775711600, -0.021036808600,  0.008695284800, -0.002507997500,
-    -0.001037794300,  0.002941289900, -0.002355925500, -0.001136940000},
-  { -0.009040073800,  0.009890164700, -0.010588375400,  0.013074472100,
-    -0.017943142100,  0.027273058500, -0.050413365200,  0.297557115100,
-    0.060482529200, -0.020973444000,  0.008689737800, -0.002515641700,
-    -0.001036539700,  0.002933528900, -0.002364533600, -0.001134965700},
-  { -0.008978175500,  0.009829858100, -0.010503877000,  0.012966752800,
-    -0.017800540400,  0.027094554000, -0.050147624100,  0.297640606500,
-    0.060185287000, -0.020914048900,  0.008683823800, -0.002517293800,
-    -0.001024611700,  0.002934410200, -0.002362132000, -0.001129829700},
-  { -0.008920174300,  0.009755024700, -0.010418098600,  0.012849997300,
-    -0.017658755900,  0.026908098600, -0.049883464500,  0.297721129900,
-    0.059897161500, -0.020855847900,  0.008665084700, -0.002525885700,
-    -0.001025446300,  0.002934650000, -0.002366817000, -0.001128974000},
-  { -0.008866407500,  0.009690722000, -0.010331978800,  0.012740654600,
-    -0.017513336800,  0.026720176000, -0.049613614700,  0.297814833400,
-    0.059603377300, -0.020796619900,  0.008659451000, -0.002528098100,
-    -0.001012468200,  0.002930143500, -0.002376553600, -0.001126794900},
-  { -0.008809499600,  0.009626161500, -0.010246944100,  0.012634266200,
-    -0.017376589500,  0.026529402400, -0.049347375400,  0.297893741900,
-    0.059312998000, -0.020728754500,  0.008642272200, -0.002530568000,
-    -0.001007501500,  0.002926808400, -0.002372946000, -0.001121930300},
-  { -0.008753278600,  0.009553595700, -0.010164038100,  0.012520217600,
-    -0.017238147400,  0.026350960600, -0.049076921100,  0.297970747600,
-    0.059018701600, -0.020669669800,  0.008638257800, -0.002540198000,
-    -0.000998529900,  0.002922998700, -0.002382694100, -0.001119665800},
-  { -0.008700892600,  0.009490588100, -0.010079579700,  0.012413140100,
-    -0.017095016200,  0.026165585800, -0.048812541600,  0.298055673800,
-    0.058732787100, -0.020602200500,  0.008620998100, -0.002542420300,
-    -0.000993979200,  0.002919927800, -0.002379174400, -0.001114931100},
-  { -0.008636872000,  0.009421764400, -0.009992841500,  0.012312002500,
-    -0.016954362300,  0.025981636800, -0.048553232900,  0.298128451900,
-    0.058438067100, -0.020540206700,  0.008612798400, -0.002542224400,
-    -0.000983932400,  0.002923485400, -0.002384780000, -0.001113605200},
-  { -0.008584316600,  0.009358594600, -0.009907251900,  0.012198085900,
-    -0.016816027500,  0.025797833300, -0.048288066300,  0.298212478700,
-    0.058145551600, -0.020476810000,  0.008597199400, -0.002545865100,
-    -0.000977036900,  0.002912420300, -0.002385153400, -0.001107825500},
-  { -0.008530542400,  0.009288917500, -0.009827928200,  0.012092889000,
-    -0.016673561700,  0.025612282700, -0.048021033600,  0.298294423300,
-    0.057854601300, -0.020415253900,  0.008590004000, -0.002551352000,
-    -0.000978876700,  0.002913287000, -0.002390253900, -0.001106899300},
-  { -0.008478483800,  0.009226377800, -0.009743311000,  0.011980096900,
-    -0.016536709400,  0.025434302500, -0.047747110700,  0.298365825000,
-    0.057560244000, -0.020351243300,  0.008574970900, -0.002557026600,
-    -0.000963826400,  0.002905602300, -0.002391414300, -0.001100755900},
-  { -0.008424799700,  0.009165535000, -0.009662092200,  0.011877441200,
-    -0.016403414400,  0.025245702300, -0.047478375000,  0.298446320200,
-    0.057267599400, -0.020285138500,  0.008556551400, -0.002557753000,
-    -0.000960917900,  0.002905172800, -0.002396213700, -0.001099661700},
-  { -0.008372136900,  0.009097353100, -0.009584221800,  0.011773596800,
-    -0.016261962900,  0.025060099400, -0.047209041900,  0.298525257700,
-    0.056970953100, -0.020227896300,  0.008551918400, -0.002566762900,
-    -0.000953100600,  0.002907384900, -0.002394239600, -0.001094674000},
-  { -0.008313510700,  0.009040315200, -0.009502392800,  0.011662794000,
-    -0.016126306100,  0.024878475500, -0.046947568800,  0.298599300000,
-    0.056680564700, -0.020162388700,  0.008534249200, -0.002568479900,
-    -0.000948207200,  0.002898882600, -0.002402600100, -0.001092599200},
-  { -0.008261904500,  0.008972850800, -0.009425383800,  0.011560009200,
-    -0.015986171300,  0.024693755800, -0.046677919500,  0.298682066000,
-    0.056395501800, -0.020100315900,  0.008526039100, -0.002568721700,
-    -0.000936969600,  0.002900157200, -0.002400214400, -0.001087840400},
-  { -0.008211115400,  0.008911303700, -0.009336453400,  0.011454721200,
-    -0.015854163900,  0.024519846800, -0.046405144200,  0.298759763600,
-    0.056094866900, -0.020029308800,  0.008512218400, -0.002571374100,
-    -0.000931811500,  0.002891576300, -0.002408972300, -0.001085440200},
-  { -0.008160197200,  0.008844778800, -0.009260656400,  0.011353693700,
-    -0.015715846500,  0.024337335900, -0.046141044500,  0.298830136900,
-    0.055805182500, -0.019961847400,  0.008492748700, -0.002571357000,
-    -0.000929480500,  0.002891307200, -0.002413690800, -0.001084311600},
-  { -0.008112103700,  0.008787159000, -0.009181661000,  0.011251768000,
-    -0.015576602500,  0.024153171400, -0.045870162900,  0.298911585300,
-    0.055512440700, -0.019901475900,  0.008478936300, -0.002583378800,
-    -0.000920943200,  0.002893394800, -0.002411773500, -0.001079321400},
-  { -0.008048876900,  0.008722251100, -0.009104537200,  0.011142744200,
-    -0.015441580200,  0.023970548200, -0.045602981800,  0.298977325900,
-    0.055225670900, -0.019836708300,  0.008468413700, -0.002580907300,
-    -0.000917271300,  0.002885109500, -0.002420012800, -0.001077376400},
-  { -0.008001667100,  0.008665715200, -0.009027145700,  0.011042483200,
-    -0.015304227600,  0.023788158500, -0.045332341000,  0.299058734900,
-    0.054929607400, -0.019764945900,  0.008453838100, -0.002582942100,
-    -0.000913301400,  0.002882721100, -0.002416975800, -0.001072495600},
-  { -0.007952339000,  0.008600802500, -0.008952392000,  0.010937108800,
-    -0.015174084700,  0.023616380100, -0.045064497900,  0.299132742800,
-    0.054637916200, -0.019701857900,  0.008436057700, -0.002584785900,
-    -0.000903092500,  0.002886222600, -0.002422944100, -0.001071045600},
-  { -0.007904789100,  0.008543139300, -0.008868051200,  0.010841905100,
-    -0.015039485700,  0.023436300800, -0.044799707800,  0.299207159000,
-    0.054344370000, -0.019630506300,  0.008421815400, -0.002587760600,
-    -0.000897083200,  0.002875630100, -0.002423263600, -0.001065244000},
-  { -0.007858185900,  0.008487210700, -0.008790859100,  0.010741407000,
-    -0.014901532300,  0.023251997700, -0.044524238300,  0.299282071600,
-    0.054053355000, -0.019568733800,  0.008411993400, -0.002586331800,
-    -0.000887586200,  0.002879382200, -0.002429340400, -0.001063908000},
-  { -0.007801564500,  0.008427026200, -0.008718424600,  0.010638181300,
-    -0.014777689900,  0.023068158700, -0.044255915700,  0.299351847700,
-    0.053763206500, -0.019505511500,  0.008395133400, -0.002594827000,
-    -0.000887696700,  0.002878112600, -0.002426308700, -0.001059278600},
-  { -0.007752716200,  0.008371567300, -0.008642947600,  0.010540183700,
-    -0.014642563600,  0.022887494700, -0.043988296500,  0.299422575400,
-    0.053470206400, -0.019432499100,  0.008379552700, -0.002596486400,
-    -0.000883216200,  0.002869839900, -0.002434904100, -0.001056944400},
-  { -0.007704528800,  0.008307898100, -0.008569545100,  0.010435528000,
-    -0.014511589100,  0.022707641400, -0.043720040800,  0.299491463500,
-    0.053178429700, -0.019359975400,  0.008364846400, -0.002599735200,
-    -0.000871418100,  0.002871064200, -0.002432661800, -0.001051839000},
-  { -0.007660450500,  0.008255099600, -0.008496004600,  0.010339539800,
-    -0.014379049200,  0.022534686200, -0.043441724600,  0.299571471100,
-    0.052882824900, -0.019298671600,  0.008346423900, -0.002600374000,
-    -0.000867444000,  0.002862933200, -0.002441463500, -0.001049660900},
-  { -0.007603296800,  0.008193382200, -0.008416132400,  0.010239585900,
-    -0.014249993700,  0.022355720200, -0.043172229900,  0.299637947900,
-    0.052591247500, -0.019224621200,  0.008329727400, -0.002600981100,
-    -0.000864181800,  0.002860802800, -0.002438248600, -0.001044875200},
-  { -0.007559512700,  0.008140629300, -0.008342511600,  0.010143265600,
-    -0.014116237900,  0.022175330800, -0.042902559300,  0.299710502400,
-    0.052305586800, -0.019159837900,  0.008310446500, -0.002602041500,
-    -0.000854285500,  0.002864501800, -0.002444344500, -0.001043455200},
-  { -0.007513280300,  0.008079345200, -0.008271562400,  0.010041094600,
-    -0.013987692600,  0.021997806500, -0.042634176100,  0.299784559000,
-    0.052010247800, -0.019090033000,  0.008295552500, -0.002604044700,
-    -0.000848986600,  0.002854305800, -0.002444743300, -0.001037730800},
-  { -0.007466532300,  0.008026496300, -0.008198836000,  0.009945759200,
-    -0.013854742200,  0.021817938400, -0.042362922600,  0.299849767900,
-    0.051710800600, -0.019017700500,  0.008278482500, -0.002603834000,
-    -0.000847135700,  0.002854590200, -0.002450114700, -0.001036184000},
-  { -0.007421596100,  0.007966615900, -0.008130314500,  0.009852191300,
-    -0.013722881700,  0.021638799100, -0.042091828500,  0.299919862100,
-    0.051423553400, -0.018942531200,  0.008260465800, -0.002603155800,
-    -0.000845516700,  0.002854963900, -0.002455432800, -0.001034829400},
-  { -0.007368637400,  0.007915606500, -0.008049069000,  0.009753117800,
-    -0.013595099000,  0.021460165700, -0.041819414400,  0.299987943200,
-    0.051132245200, -0.018881182900,  0.008242689200, -0.002605985800,
-    -0.000832295700,  0.002848095500, -0.002456559500, -0.001029015400},
-  { -0.007324914900,  0.007857386900, -0.007982526900,  0.009661947700,
-    -0.013466505100,  0.021290236500, -0.041544493000,  0.300056546100,
-    0.050837682400, -0.018808660100,  0.008224995500, -0.002605154700,
-    -0.000830876200,  0.002848515400, -0.002462055200, -0.001027526900},
-  { -0.007282763500,  0.007806632000, -0.007910621800,  0.009561255200,
-    -0.013339966800,  0.021114682600, -0.041280619200,  0.300121126000,
-    0.050544717400, -0.018736947600,  0.008207999600, -0.002605038900,
-    -0.000828329300,  0.002846963800, -0.002458999000, -0.001022805800},
-  { -0.007239595400,  0.007748911800, -0.007844275500,  0.009469910200,
-    -0.013210161600,  0.020936736300, -0.041008289300,  0.300195390400,
-    0.050254997100, -0.018666130300,  0.008192356500, -0.002607611600,
-    -0.000816356100,  0.002842431500, -0.002468794900, -0.001020138600},
-  { -0.007189132600,  0.007701593500, -0.007773543100,  0.009369503200,
-    -0.013083002200,  0.020758957600, -0.040734108300,  0.300260370700,
-    0.049961784800, -0.018593391800,  0.008174805900, -0.002607328400,
-    -0.000813752200,  0.002840812400, -0.002465827800, -0.001015410900},
-  { -0.007142203300,  0.007641451600, -0.007699103200,  0.009282076700,
-    -0.012954925100,  0.020581902400, -0.040460854200,  0.300332528600,
-    0.049672014200, -0.018520619000,  0.008156499100, -0.002606187400,
-    -0.000812553500,  0.002841559200, -0.002471464900, -0.001013982200},
-  { -0.007101149600,  0.007591957300, -0.007628580400,  0.009182604800,
-    -0.012829151000,  0.020406004000, -0.040192877300,  0.300391149900,
-    0.049381202700, -0.018448182600,  0.008139326600, -0.002606745200,
-    -0.000808105100,  0.002831584800, -0.002471553400, -0.001008355200},
-  { -0.007059152000,  0.007535511600, -0.007563628700,  0.009092708900,
-    -0.012700466400,  0.020228151600, -0.039917450300,  0.300460428800,
-    0.049092597200, -0.018375427900,  0.008121814200, -0.002607487200,
-    -0.000798497500,  0.002835512200, -0.002478145100, -0.001006580300},
-  { -0.007009147900,  0.007482806700, -0.007499733800,  0.008997547100,
-    -0.012579180400,  0.020062891600, -0.039647806700,  0.300525821900,
-    0.048797495500, -0.018306252700,  0.008105184800, -0.002607855100,
-    -0.000794439900,  0.002825789700, -0.002478474500, -0.001000945500},
-  { -0.006968240600,  0.007433072000, -0.007423567800,  0.008910574100,
-    -0.012451522700,  0.019885022200, -0.039369675200,  0.300585104500,
-    0.048504934800, -0.018229228000,  0.008077029200, -0.002609247300,
-    -0.000792419400,  0.002826100200, -0.002484009500, -0.000999231800},
-  { -0.006926866100,  0.007377316500, -0.007358544200,  0.008814417700,
-    -0.012328366300,  0.019710850400, -0.039101469100,  0.300648793200,
-    0.048210544400, -0.018159587600,  0.008060409500, -0.002610430800,
-    -0.000781936000,  0.002828146400, -0.002482150700, -0.000994223400},
-  { -0.006888043700,  0.007330615400, -0.007291803100,  0.008724921800,
-    -0.012200346800,  0.019533132300, -0.038822537300,  0.300712721600,
-    0.047923413800, -0.018085444700,  0.008041528500, -0.002609670800,
-    -0.000778976000,  0.002820404900, -0.002490903500, -0.000991790800},
-  { -0.006839293900,  0.007279247200, -0.007229475600,  0.008630964100,
-    -0.012079179200,  0.019361129300, -0.038555831700,  0.300783801700,
-    0.047630120500, -0.018006655200,  0.008026572200, -0.002609399200,
-    -0.000777006200,  0.002819585000, -0.002488366700, -0.000987006200},
-  { -0.006798540800,  0.007233149500, -0.007164042200,  0.008543197100,
-    -0.011953311100,  0.019186232700, -0.038285177900,  0.300844278100,
-    0.047335766700, -0.017934700400,  0.008007388400, -0.002607418500,
-    -0.000776398500,  0.002820679000, -0.002494154700, -0.000985371100},
-  { -0.006756891400,  0.007176317300, -0.007091540900,  0.008451307000,
-    -0.011831617600,  0.019011206000, -0.038005599900,  0.300906624700,
-    0.047040567000, -0.017860728900,  0.007980042300, -0.002609428000,
-    -0.000772729700,  0.002812783500, -0.002503047600, -0.000982640700},
-  { -0.006720561000,  0.007132703000, -0.007028371700,  0.008366076000,
-    -0.011709400800,  0.018846008900, -0.037732212300,  0.300971836600,
-    0.046750583700, -0.017789132800,  0.007960205400, -0.002601193300,
-    -0.000759764200,  0.002814043200, -0.002500954000, -0.000977775800},
-  { -0.006672404900,  0.007082025300, -0.006966950500,  0.008272917200,
-    -0.011588469400,  0.018672889900, -0.037460064500,  0.301029284000,
-    0.046455528400, -0.017707594600,  0.007943302900, -0.002599558300,
-    -0.000759066900,  0.002815167300, -0.002506921900, -0.000975884100},
-  { -0.006636191300,  0.007038598500, -0.006903834600,  0.008187619300,
-    -0.011464768800,  0.018499388000, -0.037187988000,  0.301092874000,
-    0.046165570800, -0.017634207100,  0.007916113200, -0.002601855100,
-    -0.000754783900,  0.002805563000, -0.002507180900, -0.000970271500},
-  { -0.006596465200,  0.006983825400, -0.006833460100,  0.008097770300,
-    -0.011345476800,  0.018327200500, -0.036915500100,  0.301155082000,
-    0.045876647100, -0.017561716500,  0.007895994400, -0.002599054600,
-    -0.000754654000,  0.002806943500, -0.002513137500, -0.000968652300},
-  { -0.006560412300,  0.006940658100, -0.006770837100,  0.008012401600,
-    -0.011221145500,  0.018151488300, -0.036633262700,  0.301219274700,
-    0.045585787000, -0.017480905500,  0.007880162200, -0.002600023100,
-    -0.000744270100,  0.002809097600, -0.002511606900, -0.000963551800},
-  { -0.006513718100,  0.006891483500, -0.006710841700,  0.007921089700,
-    -0.011101909300,  0.017979361500, -0.036359405400,  0.301279455500,
-    0.045296336600, -0.017405665400,  0.007850982300, -0.002599865500,
-    -0.000743330300,  0.002810197300, -0.002517572500, -0.000961768900},
-  { -0.006474304300,  0.006840684600, -0.006652924700,  0.007839125400,
-    -0.010981524900,  0.017809064300, -0.036093943200,  0.301337182700,
-    0.044998869000, -0.017326384300,  0.007833242200, -0.002591035300,
-    -0.000737232300,  0.002800277200, -0.002517691400, -0.000956035500},
-  { -0.006438009700,  0.006796203400, -0.006581589800,  0.007750585800,
-    -0.010864711900,  0.017645387000, -0.035815202400,  0.301393202700,
-    0.044711874800, -0.017252787500,  0.007812074200, -0.002587518900,
-    -0.000737454900,  0.002801635500, -0.002523680400, -0.000954362300},
-  { -0.006401639200,  0.006746574400, -0.006524338300,  0.007669196200,
-    -0.010743983400,  0.017473398600, -0.035540053600,  0.301451854500,
-    0.044413545900, -0.017171090300,  0.007786312500, -0.002588925400,
-    -0.000735266600,  0.002800927700, -0.002521316700, -0.000949359500},
-  { -0.006357778700,  0.006707002900, -0.006462535400,  0.007577627400,
-    -0.010624650100,  0.017300143900, -0.035261474700,  0.301505220000,
-    0.044127692000, -0.017097850700,  0.007766585900, -0.002588324800,
-    -0.000724851500,  0.002796544700, -0.002531073000, -0.000946421000},
-  { -0.006322346100,  0.006658344700, -0.006406316800,  0.007497394200,
-    -0.010505114500,  0.017129209400, -0.034986501900,  0.301569791200,
-    0.043833061900, -0.017016393700,  0.007740582000, -0.002589426200,
-    -0.000722919300,  0.002796070900, -0.002528823500, -0.000941518100},
-  { -0.006287412000,  0.006615790600, -0.006337047100,  0.007410503600,
-    -0.010389329800,  0.016959520500, -0.034711193400,  0.301633352100,
-    0.043538995400, -0.016935463200,  0.007720653400, -0.002578087200,
-    -0.000720236600,  0.002796975700, -0.002534998100, -0.000939577700},
-  { -0.006252289300,  0.006567502700, -0.006281032900,  0.007330632700,
-    -0.010270201400,  0.016788863600, -0.034440183200,  0.301682214200,
-    0.043245651300, -0.016861993700,  0.007691723300, -0.002578831000,
-    -0.000716968300,  0.002787827800, -0.002535183000, -0.000933911800},
-  { -0.006205898400,  0.006520927200, -0.006224969100,  0.007243536900,
-    -0.010155742500,  0.016627163700, -0.034159645200,  0.301741305700,
-    0.042953309700, -0.016781259600,  0.007673144100, -0.002575750000,
-    -0.000717300000,  0.002789556600, -0.002541677100, -0.000931902700},
-  { -0.006172693900,  0.006480627500, -0.006158957400,  0.007167086900,
-    -0.010038799500,  0.016458330300, -0.033890060300,  0.301797671500,
-    0.042661393000, -0.016699057600,  0.007646012100, -0.002576064600,
-    -0.000715860200,  0.002789348200, -0.002539353500, -0.000927029000},
-  { -0.006137812800,  0.006432255400, -0.006101996500,  0.007079130900,
-    -0.009922951400,  0.016287909800, -0.033610088700,  0.301854227800,
-    0.042371265900, -0.016625851600,  0.007623115300, -0.002564257200,
-    -0.000711981100,  0.002781648600, -0.002548160800, -0.000924334400},
-  { -0.006096934600,  0.006396695800, -0.006045818500,  0.007000329800,
-    -0.009804671800,  0.016116562300, -0.033329631800,  0.301910604800,
-    0.042079113900, -0.016542771000,  0.007595979900, -0.002565562900,
-    -0.000702731900,  0.002785897700, -0.002555562000, -0.000921807000},
-  { -0.006062933900,  0.006349328800, -0.005990311300,  0.006913942100,
-    -0.009690267000,  0.015948108300, -0.033057262400,  0.301962237800,
-    0.041789551900, -0.016461435000,  0.007576990700, -0.002562617900,
-    -0.000702405400,  0.002786094000, -0.002553292100, -0.000917048000},
-  { -0.006030707600,  0.006310258300, -0.005925655500,  0.006838885700,
-    -0.009574791300,  0.015779698800, -0.032784352400,  0.302013593200,
-    0.041498813500, -0.016377089100,  0.007547123000, -0.002553821800,
-    -0.000697783700,  0.002778180000, -0.002562081100, -0.000914005100},
-  { -0.005997784800,  0.006264360200, -0.005871819500,  0.006754676200,
-    -0.009463128500,  0.015620155600, -0.032502060800,  0.302075447000,
-    0.041202514700, -0.016296539100,  0.007519854200, -0.002553495700,
-    -0.000696753300,  0.002778219800, -0.002560158500, -0.000909073800},
-  { -0.005953802600,  0.006220559900, -0.005819558300,  0.006678209600,
-    -0.009346907400,  0.015450858700, -0.032226770800,  0.302123085100,
-    0.040913759200, -0.016213682700,  0.007499502500, -0.002549585000,
-    -0.000697575600,  0.002780297700, -0.002566684400, -0.000906938700},
-  { -0.005922781400,  0.006183472900, -0.005762778500,  0.006591765300,
-    -0.009226118300,  0.015287200700, -0.031955488100,  0.302181358200,
-    0.040618118300, -0.016132038300,  0.007470292100, -0.002540354300,
-    -0.000694252800,  0.002779793900, -0.002564399000, -0.000902066000},
-  { -0.005890136500,  0.006137124600, -0.005702277700,  0.006519185100,
-    -0.009112249200,  0.015119563200, -0.031680564700,  0.302235443400,
-    0.040332527300, -0.016048205900,  0.007441443200, -0.002539675700,
-    -0.000692720800,  0.002772999400, -0.002573622600, -0.000899005400},
-  { -0.005850311400,  0.006102867800, -0.005646959300,  0.006433987600,
-    -0.008998513600,  0.014949546000, -0.031394934700,  0.302282936600,
-    0.040036207000, -0.015967839100,  0.007422582300, -0.002538011700,
-    -0.000683794500,  0.002775953500, -0.002572520300, -0.000893764400},
-  { -0.005818964100,  0.006058727200, -0.005595185800,  0.006352081900,
-    -0.008889397700,  0.014792369000, -0.031117719900,  0.302336098600,
-    0.039742056100, -0.015884752000,  0.007391840300, -0.002527331400,
-    -0.000681709200,  0.002777178000, -0.002579042300, -0.000891447000},
-  { -0.005787145500,  0.006013604000, -0.005535923100,  0.006280742400,
-    -0.008776679900,  0.014625338400, -0.030841085500,  0.302387399600,
-    0.039449376300, -0.015802899000,  0.007363441100, -0.002527024400,
-    -0.000679473400,  0.002768808300, -0.002579613300, -0.000885670100},
-  { -0.005757587300,  0.005978394700, -0.005481519600,  0.006197183700,
-    -0.008665183400,  0.014458560600, -0.030564097400,  0.302437909100,
-    0.039157112000, -0.015721824200,  0.007342861000, -0.002522537800,
-    -0.000680774600,  0.002771330800, -0.002586549000, -0.000883371200},
-  { -0.005718682200,  0.005938417900, -0.005432964900,  0.006124864000,
-    -0.008553225900,  0.014292583100, -0.030288050400,  0.302496054000,
-    0.038866667200, -0.015638780000,  0.007312074800, -0.002512230800,
-    -0.000678044400,  0.002771222400, -0.002584426900, -0.000878577700},
-  { -0.005689051600,  0.005902462900, -0.005370854200,  0.006045352000,
-    -0.008444322900,  0.014128120100, -0.030018298000,  0.302541430200,
-    0.038575785600, -0.015556232000,  0.007282648600, -0.002510659300,
-    -0.000677160100,  0.002764759200, -0.002593729700, -0.000875301600},
-  { -0.005657037700,  0.005859684300, -0.005321845400,  0.005973581100,
-    -0.008333790400,  0.013970133000, -0.029736435400,  0.302587106700,
-    0.038284268000, -0.015471874400,  0.007250951700, -0.002499759200,
-    -0.000674653700,  0.002764455200, -0.002591465700, -0.000870433100},
-  { -0.005618333200,  0.005819685000, -0.005272906200,  0.005893724000,
-    -0.008225058800,  0.013805185000, -0.029458517200,  0.302642069200,
-    0.037993797900, -0.015379756300,  0.007223193600, -0.002497981300,
-    -0.000675186800,  0.002766900000, -0.002598670200, -0.000867828800},
-  { -0.005590368200,  0.005786648100, -0.005221758100,  0.005820627000,
-    -0.008112433600,  0.013637747600, -0.029176984600,  0.302685277400,
-    0.037704094600, -0.015297293000,  0.007201598200, -0.002493386100,
-    -0.000675974400,  0.002767923100, -0.002596834100, -0.000863002200},
-  { -0.005560237100,  0.005743450200, -0.005163726600,  0.005743489200,
-    -0.008005370600,  0.013473662100, -0.028897800000,  0.302738295200,
-    0.037407381800, -0.015215522800,  0.007170544900, -0.002482718300,
-    -0.000672918600,  0.002760875300, -0.002606209100, -0.000859635800},
-  { -0.005523266400,  0.005705570200, -0.005118090200,  0.005674706600,
-    -0.007897426600,  0.013318487200, -0.028623546600,  0.302785848400,
-    0.037119392900, -0.015122696500,  0.007141770500, -0.002480246400,
-    -0.000673963700,  0.002763436900, -0.002613369900, -0.000856978400},
-  { -0.005495962500,  0.005673345500, -0.005067111000,  0.005594863000,
-    -0.007789506200,  0.013153651000, -0.028342627700,  0.302836038100,
-    0.036823681900, -0.015040742100,  0.007110968900, -0.002470535200,
-    -0.000662984200,  0.002766079600, -0.002612329100, -0.000851700900},
-  { -0.005466715000,  0.005630853800, -0.005009907900,  0.005518700600,
-    -0.007683264800,  0.012990451100, -0.028068772200,  0.302880652200,
-    0.036538564300, -0.014956855300,  0.007079958900, -0.002467783200,
-    -0.000662808200,  0.002759921300, -0.002621758400, -0.000848374500},
-  { -0.005431440200,  0.005602376800, -0.004962376800,  0.005449141300,
-    -0.007574066800,  0.012825587300, -0.027786579600,  0.302928958400,
-    0.036241695300, -0.014864692500,  0.007050007700, -0.002456982100,
-    -0.000660605900,  0.002760230300, -0.002620023800, -0.000843220100},
-  { -0.005403790100,  0.005562631500, -0.004915494200,  0.005372340600,
-    -0.007469387600,  0.012671612300, -0.027509888900,  0.302972042600,
-    0.035948446100, -0.014782113000,  0.007018769500, -0.002453253700,
-    -0.000662228600,  0.002763058500, -0.002627331400, -0.000840529300},
-  { -0.005375829600,  0.005521878400, -0.004861076400,  0.005306264800,
-    -0.007362011400,  0.012507686500, -0.027226932800,  0.303024793500,
-    0.035664170800, -0.014687960800,  0.006987700700, -0.002441798600,
-    -0.000660398000,  0.002763550700, -0.002625576200, -0.000835595400},
-  { -0.005338761500,  0.005492759000, -0.004812448700,  0.005228310500,
-    -0.007255591100,  0.012344296500, -0.026950110700,  0.303065098100,
-    0.035372382500, -0.014606652200,  0.006965471700, -0.002436456100,
-    -0.000661304500,  0.002757890500, -0.002635253900, -0.000832149000},
-  { -0.005312372600,  0.005454664900, -0.004768172600,  0.005161314600,
-    -0.007148973700,  0.012182095400, -0.026675115000,  0.303114481500,
-    0.035080728500, -0.014514347800,  0.006934810400, -0.002424890300,
-    -0.000659803100,  0.002758707300, -0.002633626200, -0.000827077700},
-  { -0.005284879700,  0.005414457900, -0.004713545300,  0.005088017800,
-    -0.007046166400,  0.012028731400, -0.026395378600,  0.303152032300,
-    0.034789552300, -0.014430720500,  0.006902452300, -0.002420492700,
-    -0.000661736600,  0.002761659300, -0.002641015800, -0.000824295400},
-  { -0.005260165300,  0.005385875600, -0.004667616900,  0.005020650000,
-    -0.006939263300,  0.011865377600, -0.026110236100,  0.303202188800,
-    0.034489243800, -0.014340074900,  0.006872439200, -0.002409717000,
-    -0.000658712000,  0.002753575300, -0.002641882000, -0.000818255300},
-  { -0.005224926800,  0.005349893100, -0.004623184600,  0.004945699400,
-    -0.006835218200,  0.011703557800, -0.025832407000,  0.303246711500,
-    0.034200612800, -0.014256420100,  0.006840045300, -0.002405245800,
-    -0.000660759200,  0.002756849600, -0.002649463500, -0.000815493900},
-  { -0.005200360700,  0.005320551900, -0.004569322900,  0.004882070200,
-    -0.006731633300,  0.011550770700, -0.025552150000,  0.303289891500,
-    0.033911264900, -0.014163218900,  0.006808149800, -0.002392746100,
-    -0.000659822800,  0.002757788100, -0.002647879500, -0.000810410400},
-  { -0.005174599300,  0.005283024100, -0.004525112200,  0.004808058900,
-    -0.006628580100,  0.011389660100, -0.025273538400,  0.303332931800,
-    0.033621534300, -0.014068603800,  0.006768397200, -0.002390857100,
-    -0.000660917000,  0.002760752200, -0.002655561700, -0.000807307300},
-  { -0.005138134800,  0.005247478500, -0.004481928500,  0.004734510300,
-    -0.006526058700,  0.011228843600, -0.024994140700,  0.303374972100,
-    0.033324125700, -0.013977140000,  0.006737428400, -0.002379104500,
-    -0.000658573800,  0.002752971400, -0.002656330700, -0.000801279400},
-  { -0.005114783000,  0.005220209500, -0.004437547500,  0.004669293700,
-    -0.006421881700,  0.011075401800, -0.024710885300,  0.303413510200,
-    0.033037596300, -0.013892349300,  0.006703786000, -0.002373851700,
-    -0.000661054500,  0.002756297000, -0.002663989900, -0.000798421400},
-  { -0.005089678500,  0.005182927100, -0.004386048500,  0.004598983100,
-    -0.006321772900,  0.010917290800, -0.024440923300,  0.303460194300,
-    0.032743987500, -0.013801224500,  0.006672169900, -0.002360988600,
-    -0.000660639200,  0.002757935000, -0.002662733600, -0.000793256200},
-  { -0.005056179700,  0.005149409700, -0.004345436200,  0.004535552600,
-    -0.006218141400,  0.010756094800, -0.024159306200,  0.303498774900,
-    0.032447376800, -0.013708092900,  0.006639524200, -0.002347647400,
-    -0.000660699900,  0.002760669100, -0.002670435300, -0.000790060900},
-  { -0.005033354700,  0.005122582000, -0.004301162100,  0.004462875900,
-    -0.006117430000,  0.010604498100, -0.023875417200,  0.303542329100,
-    0.032163622800, -0.013614934700,  0.006608303400, -0.002343698500,
-    -0.000661193300,  0.002753849700, -0.002671460600, -0.000784186200},
-  { -0.005008967600,  0.005086442900, -0.004251580600,  0.004402065400,
-    -0.006015436800,  0.010444472000, -0.023593760200,  0.303587200300,
-    0.031870307600, -0.013522135600,  0.006575368200, -0.002330048900,
-    -0.000661553700,  0.002756838700, -0.002679339200, -0.000781019600},
-  { -0.004976115300,  0.005053314100, -0.004210712400,  0.004331218000,
-    -0.005916048600,  0.010294044300, -0.023316437000,  0.303617696900,
-    0.031578389200, -0.013438640200,  0.006541662700, -0.002324484400,
-    -0.000663934100,  0.002759243400, -0.002678215700, -0.000775874300},
-  { -0.004954054600,  0.005027973800, -0.004168660700,  0.004268203300,
-    -0.005813434400,  0.010133649800, -0.023032853100,  0.303659766600,
-    0.031285977700, -0.013345456800,  0.006508681700, -0.002311137900,
-    -0.000663161200,  0.002753279200, -0.002688143900, -0.000771897700},
-  { -0.004928421800,  0.004991603200, -0.004118619000,  0.004199827500,
-    -0.005715080300,  0.009976047300, -0.022758266200,  0.303698508100,
-    0.030994692400, -0.013251271900,  0.006466426100, -0.002299129500,
-    -0.000662665200,  0.002754921900, -0.002686928900, -0.000766591100},
-  { -0.004896598000,  0.004959857600, -0.004080198200,  0.004139136400,
-    -0.005614528900,  0.009824735600, -0.022471040100,  0.303736794400,
-    0.030703785700, -0.013157852400,  0.006433708500, -0.002293624700,
-    -0.000665508700,  0.002758724400, -0.002695207900, -0.000763249100},
-  { -0.004875341600,  0.004935181400, -0.004038259800,  0.004068687500,
-    -0.005515687900,  0.009667243000, -0.022195988700,  0.303781885400,
-    0.030415689700, -0.013065059600,  0.006400355600, -0.002279366500,
-    -0.000666054000,  0.002760975500, -0.002694258700, -0.000758084800},
-  { -0.004852436300,  0.004901022400, -0.003990905800,  0.004010497500,
-    -0.005416881700,  0.009517056100, -0.021907914800,  0.303818672700,
-    0.030116858700, -0.012972784600,  0.006366843000, -0.002265346200,
-    -0.000665839200,  0.002755157700, -0.002704376900, -0.000753869400},
-  { -0.004820883700,  0.004869373400, -0.003952016200,  0.003941798300,
-    -0.005318693300,  0.009359170900, -0.021629843300,  0.303851724000,
-    0.029827673100, -0.012877926700,  0.006324791000, -0.002261575500,
-    -0.000667691900,  0.002757747500, -0.002703558700, -0.000748453500},
-  { -0.004800157600,  0.004845423900, -0.003911010800,  0.003872318000,
-    -0.005220680700,  0.009201932100, -0.021352478200,  0.303893044500,
-    0.029540755700, -0.012784037700,  0.006290380500, -0.002246404800,
-    -0.000669147800,  0.002761387900, -0.002711729700, -0.000745150400},
-  { -0.004769350200,  0.004814396600, -0.003865951000,  0.003816203000,
-    -0.005123937600,  0.009054063500, -0.021072898700,  0.303933574300,
-    0.029244511900, -0.012682582100,  0.006257946300, -0.002231939800,
-    -0.000670457700,  0.002764997300, -0.002720193100, -0.000741467200},
-  { -0.004747416400,  0.004781502000, -0.003827110500,  0.003747768000,
-    -0.005026132300,  0.008896179300, -0.020792099600,  0.303962072700,
-    0.028957720600, -0.012588365800,  0.006224450200, -0.002226292500,
-    -0.000672109200,  0.002758959300, -0.002721352900, -0.000735386100},
-  { -0.004727789800,  0.004759315900, -0.003788813700,  0.003689348800,
-    -0.004928785800,  0.008748066500, -0.020511012600,  0.304000013700,
-    0.028662906200, -0.012494169800,  0.006180633900, -0.002212588700,
-    -0.000673225600,  0.002762428000, -0.002729709100, -0.000731741100},
-  { -0.004696972400,  0.004728140600, -0.003742729000,  0.003624215600,
-    -0.004833255700,  0.008591834800, -0.020230886000,  0.304036328200,
-    0.028369440400, -0.012401276400,  0.006146021300, -0.002197280000,
-    -0.000674502100,  0.002765145400, -0.002729093500, -0.000726338700},
-  { -0.004676431900,  0.004696952300, -0.003706438500,  0.003566616300,
-    -0.004736314300,  0.008443532900, -0.019947475400,  0.304069875300,
-    0.028085420100, -0.012305860200,  0.006110074200, -0.002181080700,
-    -0.000676615300,  0.002768917300, -0.002737400900, -0.000722876700},
-  { -0.004656297500,  0.004673640000, -0.003658751600,  0.003501561200,
-    -0.004641076300,  0.008287779500, -0.019666250900,  0.304104283300,
-    0.027791528800, -0.012202678300,  0.006068547500, -0.002176335900,
-    -0.000686846600,  0.002761221600, -0.002738242600, -0.000716707400},
-  { -0.004627325000,  0.004645205500, -0.003624168800,  0.003445318600,
-    -0.004545293600,  0.008140437800, -0.019382840700,  0.304145203000,
-    0.027501099300, -0.012109150300,  0.006033055000, -0.002160148400,
-    -0.000689188800,  0.002765358600, -0.002746934500, -0.000713093800},
-  { -0.004606892100,  0.004614320900, -0.003587618200,  0.003379587100,
-    -0.004450296100,  0.007984496700, -0.019099860600,  0.304176499000,
-    0.027209072700, -0.012013907400,  0.005988351400, -0.002145830400,
-    -0.000690246800,  0.002768039100, -0.002746360600, -0.000707548200},
-  { -0.004586402700,  0.004592039500, -0.003542025400,  0.003325426100,
-    -0.004364128800,  0.007835360000, -0.018813366000,  0.304205403100,
-    0.026918136600, -0.011919323000,  0.005951839900, -0.002129046300,
-    -0.000692658900,  0.002772071700, -0.002754968200, -0.000703804500},
-  { -0.004557731900,  0.004563753700, -0.003507314200,  0.003260984500,
-    -0.004270140400,  0.007680828300, -0.018538518600,  0.304240989200,
-    0.026629304300, -0.011817129000,  0.005919133800, -0.002122896500,
-    -0.000695192900,  0.002766964300, -0.002756676800, -0.000697463600},
-  { -0.004538643100,  0.004534730300, -0.003473370900,  0.003206136100,
-    -0.004175833600,  0.007534408900, -0.018252857000,  0.304277893000,
-    0.026331338900, -0.011723107400,  0.005874142700, -0.002107933500,
-    -0.000697223600,  0.002771073600, -0.002765610600, -0.000693472400},
-  { -0.004519537900,  0.004512855100, -0.003427404600,  0.003142614000,
-    -0.004082281200,  0.007379100700, -0.017967050900,  0.304303942000,
-    0.026040879100, -0.011618952200,  0.005839096700, -0.002091778900,
-    -0.000699143000,  0.002774214900, -0.002765299300, -0.000687773900},
-  { -0.004491807700,  0.004485759300, -0.003394540900,  0.003088733700,
-    -0.003988893700,  0.007233613500, -0.017688142300,  0.304334966200,
-    0.025753901000, -0.011523237400,  0.005793241800, -0.002076469800,
-    -0.000700635700,  0.002769352400, -0.002775689300, -0.000683225000},
-  { -0.004473209500,  0.004457105300, -0.003360743400,  0.003025836900,
-    -0.003897094200,  0.007088896400, -0.017409498600,  0.304365892000,
-    0.025458149700, -0.011421394400,  0.005759636500, -0.002069178100,
-    -0.000704737500,  0.002773610300, -0.002775967700, -0.000677353300},
-  { -0.004444717000,  0.004428620600, -0.003317850200,  0.002964408100,
-    -0.003805137400,  0.006934475400, -0.017122233300,  0.304396703900,
-    0.025171340700, -0.011324954000,  0.005713078000, -0.002053187900,
-    -0.000707171500,  0.002777897100, -0.002784864800, -0.000673385900},
-  { -0.004427971200,  0.004410227500, -0.003284178700,  0.002910777700,
-    -0.003712463600,  0.006789868500, -0.016843034600,  0.304434316000,
-    0.024877740200, -0.011222628000,  0.005678048700, -0.002036501400,
-    -0.000709968500,  0.002781813700, -0.002785075900, -0.000667608000},
-  { -0.004408351500,  0.004381556100, -0.003250508600,  0.002848323700,
-    -0.003620768300,  0.006636493100, -0.016563520800,  0.304461685600,
-    0.024583535100, -0.011127576100,  0.005631997300, -0.002020750200,
-    -0.000711766400,  0.002777270600, -0.002795722300, -0.000662778500},
-  { -0.004380801100,  0.004354269100, -0.003209814400,  0.002797300300,
-    -0.003529018000,  0.006491186300, -0.016272419800,  0.304487711300,
-    0.024298095100, -0.011022085400,  0.005594924600, -0.002002390300,
-    -0.000723818600,  0.002779372400, -0.002795073400, -0.000657344200},
-  { -0.004364270700,  0.004336078200, -0.003175763900,  0.002735447600,
-    -0.003438518800,  0.006347319100, -0.015991075000,  0.304521224900,
-    0.024006627800, -0.010927513200,  0.005549280000, -0.001994892300,
-    -0.000728568200,  0.002784856700, -0.002804663400, -0.000653083600},
-  { -0.004346993300,  0.004309182300, -0.003144467600,  0.002683321200,
-    -0.003346361400,  0.006194068900, -0.015710304400,  0.304553789700,
-    0.023714956500, -0.010823907600,  0.005513183700, -0.001977598200,
-    -0.000731700400,  0.002789105500, -0.002805014900, -0.000647228100},
-  { -0.004320158000,  0.004282770700, -0.003104379700,  0.002625535200,
-    -0.003266869300,  0.006049293000, -0.015425894300,  0.304574941900,
-    0.023422456600, -0.010718772800,  0.005467201200, -0.001961254600,
-    -0.000733852000,  0.002784613800, -0.002815797600, -0.000642092900},
-  { -0.004304236600,  0.004265540900, -0.003072014700,  0.002573489500,
-    -0.003175720900,  0.005905217400, -0.015142040300,  0.304603952900,
-    0.023132882500, -0.010623938900,  0.005429023200, -0.001942767200,
-    -0.000737686400,  0.002789011800, -0.002816103900, -0.000636395600},
-  { -0.004276818000,  0.004239878600, -0.003041041300,  0.002513598800,
-    -0.003086221600,  0.005753037200, -0.014859275700,  0.304632697600,
-    0.022842239000, -0.010518612100,  0.005382887800, -0.001926054500,
-    -0.000740960500,  0.002794055000, -0.002825655200, -0.000631862500},
-  { -0.004260008200,  0.004213047800, -0.003001761400,  0.002464760300,
-    -0.002997005100,  0.005609909000, -0.014574287100,  0.304659243200,
-    0.022552838800, -0.010413292700,  0.005336339900, -0.001909172200,
-    -0.000744164300,  0.002798242800, -0.002826051900, -0.000625856800},
-  { -0.004243542100,  0.004187192800, -0.002971287100,  0.002405494900,
-    -0.002908733500,  0.005467214000, -0.014288738100,  0.304685251500,
-    0.022254934400, -0.010309931700,  0.005299546400, -0.001891056000,
-    -0.000747532900,  0.002794490100, -0.002837320300, -0.000620567900},
-  { -0.004219310800,  0.004172433300, -0.002940735300,  0.002355245100,
-    -0.002818772700,  0.005315723700, -0.014013384600,  0.304717226400,
-    0.021968758500, -0.010213985000,  0.005251545400, -0.001873340800,
-    -0.000751378700,  0.002799287100, -0.002837812200, -0.000614775300},
-  { -0.004202808100,  0.004145912600, -0.002901375100,  0.002298070200,
-    -0.002731549500,  0.005173599700, -0.013726605300,  0.304740017400,
-    0.021680873600, -0.010108070800,  0.005204656900, -0.001863954900,
-    -0.000765887200,  0.002803718400, -0.002847187000, -0.000610304100},
-  { -0.004186959300,  0.004120956700, -0.002872462400,  0.002248900100,
-    -0.002642744000,  0.005030699900, -0.013438827400,  0.304761759800,
-    0.021384603000, -0.010003738700,  0.005166831300, -0.001845151700,
-    -0.000770115000,  0.002808540700, -0.002847973400, -0.000604129100},
-  { -0.004163246800,  0.004106712900, -0.002842615100,  0.002191690700,
-    -0.002565148700,  0.004888119300, -0.013159535100,  0.304789228200,
-    0.021099553600, -0.009897966800,  0.005119292900, -0.001827130700,
-    -0.000773711900,  0.002804989100, -0.002859183800, -0.000598855700},
-  { -0.004147500100,  0.004081504200, -0.002805006000,  0.002144535400,
-    -0.002477149500,  0.004737013500, -0.012872591200,  0.304818061900,
-    0.020805308800, -0.009792977800,  0.005071968700, -0.001809457700,
-    -0.000777559700,  0.002809924700, -0.002860138800, -0.000592610900},
-  { -0.004123192100,  0.004058501200, -0.002776914700,  0.002087605700,
-    -0.002391051400,  0.004596104100, -0.012592772900,  0.304843748500,
-    0.020512328500, -0.009688643500,  0.005033655500, -0.001789823800,
-    -0.000782738000,  0.002816043200, -0.002870343700, -0.000587752000},
-  { -0.004107894100,  0.004034016500, -0.002748740500,  0.002039760600,
-    -0.002303557800,  0.004453794800, -0.012301966200,  0.304859324200,
-    0.020227247700, -0.009581223300,  0.004984922000, -0.001771208200,
-    -0.000787003500,  0.002820817600, -0.002871029700, -0.000581575700},
-  { -0.004093587400,  0.004018650800, -0.002710135300,  0.001984116400,
-    -0.002218448800,  0.004313763100, -0.012021363400,  0.304882818800,
-    0.019935070200, -0.009475750900,  0.004936537800, -0.001751710900,
-    -0.000801110200,  0.002825556300, -0.002880712200, -0.000576816700},
-  { -0.004070086100,  0.003996648800, -0.002683625100,  0.001937624600,
-    -0.002132234200,  0.004173020900, -0.011739650400,  0.304913195700,
-    0.019645015200, -0.009370571700,  0.004888539700, -0.001733255400,
-    -0.000805210900,  0.002821862700, -0.002883172300, -0.000569990700},
-  { -0.004055549600,  0.003973130000, -0.002656075600,  0.001882018300,
-    -0.002055659400,  0.004022181900, -0.011457786400,  0.304933847400,
-    0.019354083600, -0.009265048200,  0.004849033400, -0.001712856100,
-    -0.000810671500,  0.002828266400, -0.002893561300, -0.000564955500},
-  { -0.004032488300,  0.003959785900, -0.002619434800,  0.001836677600,
-    -0.001970197900,  0.003881652600, -0.011174339100,  0.304952581400,
-    0.019063780300, -0.009158923400,  0.004800033700, -0.001693616200,
-    -0.000815677100,  0.002833775600, -0.002894695900, -0.000558583500},
-  { -0.004018305800,  0.003936717300, -0.002592340800,  0.001781462400,
-    -0.001885730400,  0.003741264500, -0.010881885600,  0.304980747200,
-    0.018774565100, -0.009052649800,  0.004751033800, -0.001674129700,
-    -0.000820954500,  0.002840026900, -0.002905324000, -0.000553421000},
-  { -0.004004119100,  0.003913332400, -0.002556816600,  0.001736945200,
-    -0.001801009400,  0.003601134500, -0.010596860500,  0.304996474100,
-    0.018485752400, -0.008946113900,  0.004701589700, -0.001654657700,
-    -0.000825608000,  0.002836444100, -0.002907704700, -0.000546470300},
-  { -0.003981307700,  0.003892381100, -0.002531656000,  0.001692059700,
-    -0.001716342200,  0.003461182700, -0.010312015500,  0.305021093200,
-    0.018188790800, -0.008840558000,  0.004652450700, -0.001634950600,
-    -0.000831250300,  0.002843043800, -0.002918541200, -0.000541059600},
-  { -0.003968435100,  0.003879253900, -0.002504378200,  0.001637657900,
-    -0.001641796500,  0.003321126400, -0.010034991200,  0.305033298300,
-    0.017901410200, -0.008734196000,  0.004611510300, -0.001612810100,
-    -0.000846731600,  0.002848150100, -0.002919339300, -0.000534931600},
-  { -0.003945651400,  0.003857769000, -0.002470181000,  0.001594324200,
-    -0.001558137300,  0.003181615900, -0.009748599800,  0.305054496900,
-    0.017615006900, -0.008627194900,  0.004561274000, -0.001592429500,
-    -0.000852704600,  0.002854820400, -0.002930099600, -0.000529601300},
-  { -0.003932401200,  0.003836006300, -0.002444849800,  0.001541005000,
-    -0.001475450400,  0.003042687600, -0.009461842200,  0.305074913300,
-    0.017319625600, -0.008512038500,  0.004512760300, -0.001572829300,
-    -0.000857749800,  0.002851744600, -0.002933011700, -0.000522254800},
-  { -0.003919897700,  0.003823612700, -0.002418783000,  0.001496396500,
-    -0.001391517800,  0.002903186600, -0.009174192300,  0.305093771700,
-    0.017034066400, -0.008404468200,  0.004462029400, -0.001552015500,
-    -0.000863995200,  0.002858545300, -0.002943863500, -0.000516831700},
-  { -0.003898001300,  0.003803145000, -0.002385302500,  0.001445432500,
-    -0.001319345500,  0.002764325800, -0.008895401800,  0.305119193600,
-    0.016741989300, -0.008298811000,  0.004411842900, -0.001531072000,
-    -0.000870352000,  0.002865288500, -0.002945799600, -0.000510187200},
-  { -0.003884434400,  0.003781771800, -0.002360832800,  0.001401956000,
-    -0.001236297400,  0.002625496200, -0.008606633700,  0.305135746300,
-    0.016448378400, -0.008191697200,  0.004360886000, -0.001509538700,
-    -0.000886061100,  0.002871262500, -0.002956450800, -0.000504731900},
-  { -0.003862439200,  0.003761723500, -0.002336945300,  0.001350046400,
-    -0.001154788900,  0.002487086200, -0.008316860100,  0.305150388000,
-    0.016155288200, -0.008075516000,  0.004311149200, -0.001488975800,
-    -0.000891753800,  0.002868512700, -0.002959470700, -0.000497291200},
-  { -0.003850712800,  0.003749888800, -0.002302777900,  0.001307766700,
-    -0.001072739500,  0.002349092100, -0.008036267100,  0.305171969300,
-    0.015873669900, -0.007967928800,  0.004259593600, -0.001467267200,
-    -0.000898797900,  0.002875940200, -0.002970642300, -0.000491739700},
-  { -0.003838542900,  0.003729366300, -0.002278849600,  0.001256255000,
-    -0.001000782800,  0.002210354400, -0.007754203600,  0.305182829200,
-    0.015582827100, -0.007861128300,  0.004217388300, -0.001444400500,
-    -0.000906121000,  0.002883075100, -0.002972661400, -0.000485004200},
-  { -0.003816509300,  0.003709864100, -0.002256106400,  0.001214479000,
-    -0.000919168800,  0.002072061100, -0.007462776200,  0.305202709200,
-    0.015292286200, -0.007744430700,  0.004166752200, -0.001423103300,
-    -0.000912804200,  0.002890024200, -0.002974973900, -0.000478005400},
-  { -0.003804721500,  0.003689540000, -0.002223798900,  0.001173609200,
-    -0.000838292300,  0.001934852000, -0.007180134300,  0.305220409100,
-    0.015003290600, -0.007637074700,  0.004114765900, -0.001400660100,
-    -0.000929037200,  0.002887514500, -0.002986971300, -0.000471906600},
-  { -0.003784248300,  0.003679910900, -0.002200335400,  0.001122795500,
-    -0.000758115600,  0.001797689700, -0.006896906600,  0.305236860000,
-    0.014714266400, -0.007520350800,  0.004063782200, -0.001378788100,
-    -0.000936224300,  0.002894831400, -0.002989337500, -0.000464860200},
-  { -0.003772222700,  0.003660354300, -0.002177942800,  0.001082013300,
-    -0.000686657100,  0.001659411900, -0.006612456400,  0.305252141100,
-    0.014416934300, -0.007413160700,  0.004011606300, -0.001356286200,
-    -0.000943766600,  0.002902744400, -0.003001127800, -0.000458704700},
-  { -0.003751272400,  0.003641224700, -0.002146282400,  0.001032856600,
-    -0.000607494800,  0.001522406400, -0.006318495400,  0.305266353700,
-    0.014129397200, -0.007305163600,  0.003959036100, -0.001333568200,
-    -0.000951286800,  0.002910117000, -0.003003554800, -0.000451769900},
-  { -0.003740453600,  0.003631277700, -0.002123501700,  0.000991980200,
-    -0.000527217900,  0.001385321000, -0.006032900700,  0.305278786000,
-    0.013842019100, -0.007187486600,  0.003906976500, -0.001311089600,
-    -0.000958623000,  0.002908760100, -0.003016231600, -0.000445068000},
-  { -0.003729050600,  0.003612350900, -0.002101520100,  0.000942775500,
-    -0.000457538900,  0.001248307000, -0.005747166800,  0.305299153300,
-    0.013547492500, -0.007080269600,  0.003854346300, -0.001287607700,
-    -0.000975892700,  0.002915881100, -0.003018644300, -0.000438154800},
-  { -0.003708956400,  0.003594054000, -0.002071214100,  0.000903979800,
-    -0.000378641900,  0.001112105700, -0.005469551400,  0.305307792800,
-    0.013261923500, -0.006962423800,  0.003801673700, -0.001264499500,
-    -0.000984066100,  0.002924143600, -0.003030515100, -0.000431795400},
-  { -0.003698495600,  0.003575779100, -0.002050276300,  0.000864607400,
-    -0.000299850300,  0.000984943000, -0.005181636100,  0.305325129100,
-    0.012968326800, -0.006845375400,  0.003749292200, -0.001241358200,
-    -0.000992319500,  0.002932209100, -0.003033543100, -0.000424402600},
-  { -0.003678810800,  0.003567216600, -0.002028355600,  0.000815922500,
-    -0.000231056700,  0.000848238100, -0.004893293600,  0.305331925800,
-    0.012683638900, -0.006736106600,  0.003694939000, -0.001207958100,
-    -0.000999989700,  0.002940099300, -0.003045285600, -0.000418160500},
-  { -0.003668399300,  0.003548917800, -0.001998535200,  0.000778065700,
-    -0.000153154100,  0.000712646300, -0.004604878800,  0.305346710600,
-    0.012391231100, -0.006618462800,  0.003632680800, -0.001185043200,
-    -0.001017024400,  0.002938122000, -0.003048768800, -0.000410416700},
-  { -0.003658356000,  0.003531138400, -0.001977775600,  0.000729983100,
-    -0.000075620500,  0.000577290600, -0.004325205000,  0.305359759100,
-    0.012099735200, -0.006510233800,  0.003578931400, -0.001160855500,
-    -0.001026023300,  0.002947019900, -0.003061151700, -0.000403882200},
-  { -0.003638938800,  0.003514164000, -0.001958085100,  0.000692151600,
-    -0.000007068200,  0.000440667500, -0.004034754500,  0.305371538600,
-    0.011808326800, -0.006392102100,  0.003525266500, -0.001136761300,
-    -0.001034693000,  0.002955492900, -0.003064410600, -0.000396332400},
-  { -0.003629223000,  0.003505495000, -0.001927947000,  0.000654411200,
-    0.000070163400,  0.000314498600, -0.003743576500,  0.305382025700,
-    0.011526826700, -0.006273264800,  0.003470974700, -0.001112218000,
-    -0.001043813600,  0.002964194700, -0.003076842200, -0.000389669200},
-  { -0.003610639600,  0.003489057800, -0.001908316200,  0.000607413700,
-    0.000146785300,  0.000179544400, -0.003461481100,  0.305390383500,
-    0.011237344100, -0.006164483000,  0.003416433800, -0.001087365200,
-    -0.001053001800,  0.002963790800, -0.003080805300, -0.000381874300},
-  { -0.003601269100,  0.003472094500, -0.001888981300,  0.000570197700,
-    0.000214496100,  0.000043993500, -0.003178921900,  0.305407159000,
-    0.010948594500, -0.006046137200,  0.003362096800, -0.001062345400,
-    -0.001071720100,  0.002972423700, -0.003093318200, -0.000375146000},
-  { -0.003582656500,  0.003455849400, -0.001860858600,  0.000524745900,
-    0.000290078700, -0.000090648300, -0.002886387300,  0.305413750100,
-    0.010650492300, -0.005928189500,  0.003307938500, -0.001037636700,
-    -0.001081004600,  0.002981370000, -0.003096989400, -0.000367260100},
-  { -0.003573744000,  0.003448505600, -0.001841238600,  0.000487681400,
-    0.000357013800, -0.000216601600, -0.002601772700,  0.305427509700,
-    0.010362986600, -0.005809448800,  0.003252789700, -0.001002860000,
-    -0.001090243800,  0.002990478200, -0.003109808600, -0.000360263700},
-  { -0.003564774200,  0.003431922800, -0.001822254600,  0.000451135800,
-    0.000433003700, -0.000351097200, -0.002316996000,  0.305430485400,
-    0.010075840400, -0.005699440100,  0.003187647900, -0.000977716300,
-    -0.001099777400,  0.002990283900, -0.003113898000, -0.000352248700},
-  { -0.003546870600,  0.003416172000, -0.001794658100,  0.000406472900,
-    0.000498512700, -0.000485477300, -0.002031776000,  0.305441562500,
-    0.009789706100, -0.005580569300,  0.003132334500, -0.000951776200,
-    -0.001119130300,  0.002999325200, -0.003126683700, -0.000345274700},
-  { -0.003538373300,  0.003400302700, -0.001776549100,  0.000370535700,
-    0.000573925900, -0.000610465300, -0.001745336100,  0.305451127000,
-    0.009494961400, -0.005461903400,  0.003077019500, -0.000925937200,
-    -0.001129494000,  0.003009011500, -0.003130746200, -0.000337260000},
-  { -0.003520921500,  0.003394346200, -0.001758288700,  0.000334721100,
-    0.000649268300, -0.000744677800, -0.001458744900,  0.305459744400,
-    0.009209557400, -0.005342285700,  0.003021134300, -0.000899901500,
-    -0.001139831400,  0.003018842400, -0.003144017200, -0.000329970400},
-  { -0.003512573100,  0.003378711000, -0.001740435500,  0.000290089600,
-    0.000714234800, -0.000869571200, -0.001170623500,  0.305466205000,
-    0.008916237200, -0.005223260400,  0.002965177700, -0.000873315500,
-    -0.001150412500,  0.003019394800, -0.003148759600, -0.000321551300},
-  { -0.003495167000,  0.003363569600, -0.001713789300,  0.000255669300,
-    0.000788301700, -0.001002806300, -0.000882964600,  0.305471690900,
-    0.008632676200, -0.005103588900,  0.002908698000, -0.000837361100,
-    -0.001169925400,  0.003028499400, -0.003152349500, -0.000313813200},
-  { -0.003486840300,  0.003348178400, -0.001696380900,  0.000211810600,
-    0.000852586500, -0.001136564500, -0.000594272800,  0.305476029500,
-    0.008340196300, -0.004983911700,  0.002842935600, -0.000811096700,
-    -0.001180375200,  0.003038511100, -0.003165955700, -0.000306075200},
-  { -0.003469765900,  0.003343036000, -0.001679160000,  0.000177135000,
-    0.000926754800, -0.001260861000, -0.000304469600,  0.305487970600,
-    0.008048797600, -0.004864404400,  0.002786310700, -0.000784087900,
-    -0.001191632000,  0.003048908400, -0.003170531700, -0.000297868500},
-  { -0.003461774600,  0.003327682700, -0.001652648300,  0.000143244500,
-    0.000990953800, -0.001394377600, -0.000023525100,  0.305488765700,
-    0.007767318900, -0.004744017700,  0.002728774500, -0.000756520300,
-    -0.001202902100,  0.003050026400, -0.003184579100, -0.000289997500},
-  { -0.003454137100,  0.003313035200, -0.001636003800,  0.000099881700,
-    0.001063982400, -0.001517720800,  0.000267125500,  0.305498083700,
-    0.007477414500, -0.004624290900,  0.002671831100, -0.000729004800,
-    -0.001223831900,  0.003060168000, -0.003188993500, -0.000281862900},
-  { -0.003437037600,  0.003298773100, -0.001619778200,  0.000066556300,
-    0.001127390700, -0.001650952000,  0.000558741700,  0.305505931400,
-    0.007187871700, -0.004503987800,  0.002604895500, -0.000692451500,
-    -0.001234554400,  0.003070451600, -0.003202910800, -0.000273917600},
-  { -0.003429250800,  0.003293434500, -0.001593584100,  0.000033135500,
-    0.001200242700, -0.001774239400,  0.000841583200,  0.305502674600,
-    0.006898956800, -0.004383683600,  0.002546976200, -0.000664350300,
-    -0.001246591800,  0.003081283900, -0.003207541700, -0.000265507200},
-  { -0.003412490900,  0.003279564200, -0.001577770500, -0.000009313800,
-    0.001263167800, -0.001906951100,  0.001124928200,  0.305507531700,
-    0.006610834100, -0.004263249000,  0.002489119800, -0.000636159800,
-    -0.001267872500,  0.003091948000, -0.003221504300, -0.000257636700},
-  { -0.003404731400,  0.003265175300, -0.001561789400, -0.000042083300,
-    0.001335330400, -0.002029953100,  0.001418764600,  0.305510887600,
-    0.006323528600, -0.004142487600,  0.002421344900, -0.000607985400,
-    -0.001279946600,  0.003093528500, -0.003226864100, -0.000248796500},
-  { -0.003388377600,  0.003251864100, -0.001537100900, -0.000074381800,
-    0.001397822300, -0.002153295800,  0.001704243000,  0.305521780500,
-    0.006027997600, -0.004022334800,  0.002362991000, -0.000569919800,
-    -0.001292085400,  0.003104789400, -0.003241453500, -0.000240501100},
-  { -0.003380795000,  0.003247258700, -0.001521319900, -0.000116373400,
-    0.001469413800, -0.002285243100,  0.001989240500,  0.305522735200,
-    0.005741703600, -0.003901387700,  0.002304368000, -0.000541061900,
-    -0.001304684500,  0.003116275100, -0.003246569900, -0.000231910300},
-  { -0.003373394500,  0.003233233200, -0.001505753800, -0.000148571000,
-    0.001531547700, -0.002407952000,  0.002275511400,  0.305521935800,
-    0.005456280000, -0.003780111100,  0.002235803700, -0.000512158000,
-    -0.001326570100,  0.003127233900, -0.003260822600, -0.000223661700},
-  { -0.003356689400,  0.003220032300, -0.001491017200, -0.000180271600,
-    0.001602837600, -0.002530584900,  0.002572382100,  0.305528831700,
-    0.005162307100, -0.003658974500,  0.002176562700, -0.000482746700,
-    -0.001339690600,  0.003129659400, -0.003266806700, -0.000214552200},
-  { -0.003349458000,  0.003206380900, -0.001466550800, -0.000211731900,
-    0.001663994200, -0.002662171400,  0.002859642300,  0.305525209100,
-    0.004878336100, -0.003537488300,  0.002116848800, -0.000443644700,
-    -0.001352471400,  0.003141260600, -0.003272003200, -0.000205837900},
-  { -0.003332926300,  0.003202823300, -0.001452058900, -0.000252375300,
-    0.001725095700, -0.002784621900,  0.003148416400,  0.305529242100,
-    0.004585797400, -0.003406922200,  0.002048118400, -0.000414183100,
-    -0.001365477700,  0.003153111900, -0.003287185700, -0.000196877000},
-  { -0.003326162500,  0.003189613400, -0.001437413900, -0.000283721000,
-    0.001795892300, -0.002906671400,  0.003427783000,  0.305532062500,
-    0.004303401100, -0.003285234700,  0.001988112900, -0.000384077600,
-    -0.001388720100,  0.003165263500, -0.003292642400, -0.000188174200},
-  { -0.003309959200,  0.003176999800, -0.001413956600, -0.000314280200,
-    0.001856478200, -0.003038205600,  0.003717851500,  0.305533321300,
-    0.004012019600, -0.003163333400,  0.001927602200, -0.000353662500,
-    -0.001402398400,  0.003168136400, -0.003308169600, -0.000179151700}
-};
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvertedStationPPFWeights.h b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvertedStationPPFWeights.h
deleted file mode 100644
index 8417f7205c5e477b9a1705f7f29eb2850944c97f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/InvertedStationPPFWeights.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//# InvertedStationPPFWeights.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_INVERTED_STATION_PPF_WEIGHTS_H
-#define LOFAR_GPUPROC_INVERTED_STATION_PPF_WEIGHTS_H
-
-extern int reverseSubbandMapping[512];
-extern const float invertedStationPPFWeights[1024][16] __attribute__ ((aligned(32)));
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Transpose.cl b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Transpose.cl
deleted file mode 100644
index 11ab07ec679d8a5fbbc8f9b46c245949a07e0575..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Transpose.cl
+++ /dev/null
@@ -1,64 +0,0 @@
-//# Transpose.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-typedef __global float2 (*TransposedDataType)[NR_TABS][NR_POLARIZATIONS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1][512];
-typedef __global float4 (*ComplexVoltagesType)[NR_SUBBANDS][NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1][NR_TABS];
-
-
-__kernel void UHEP_Transpose(__global void *restrict transposedDataPtr,
-                             __global const void *restrict complexVoltagesPtr,
-                             __global int reverseSubbandMapping[512])
-{
-  TransposedDataType transposedData = (TransposedDataType) transposedDataPtr;
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-
-  __local float4 tmp[16][17];
-
-  uint tabBase = 16 * get_global_id(1);
-  uint sbBase = 16 * get_global_id(2);
-
-  uint tabOffsetR = get_local_id(0) & 15;
-  uint tabR = tabBase + tabOffsetR;
-  uint sbOffsetR = get_local_id(0) >> 4;
-  int sbSourceR = reverseSubbandMapping[sbBase + sbOffsetR];
-  bool doR = (NR_TABS % 16 == 0 || tabR < NR_TABS) && sbSourceR >= 0;
-
-  uint tabOffsetW = get_local_id(0) >> 4;
-  uint tabW = tabBase + tabOffsetW;
-  uint sbOffsetW = get_local_id(0) & 15;
-  int sbSourceW = reverseSubbandMapping[sbBase + sbOffsetW];
-  bool doW = NR_TABS % 16 == 0 || tabW < NR_TABS;
-
-  for (int time = 0; time < NR_SAMPLES_PER_SUBBAND + NR_STATION_FILTER_TAPS - 1; time++) {
-    if (doR)
-      tmp[tabOffsetR][sbOffsetR] = (*complexVoltages)[sbSourceR][time][tabR];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (doW) {
-      float4 sample = sbSourceW >= 0 ? tmp[tabOffsetW][sbOffsetW] : 0;
-      (*transposedData)[tabW][0][time][sbBase + sbOffsetW] = sample.xy;
-      (*transposedData)[tabW][1][time][sbBase + sbOffsetW] = sample.zw;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Transpose.cl.ok b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Transpose.cl.ok
deleted file mode 100644
index ee69f40aa438d01e9a8007cb22c4aff8768d93c5..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Transpose.cl.ok
+++ /dev/null
@@ -1,36 +0,0 @@
-typedef __global float2 (*TransposedDataType)[NR_TABS][NR_POLARIZATIONS][NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1][512];
-typedef __global float2 (*ComplexVoltagesType)[NR_SUBBANDS][NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1][NR_TABS][NR_POLARIZATIONS];
-
-
-__kernel void UHEP_Transpose(__global void *restrict transposedDataPtr,
-                             __global const void *restrict complexVoltagesPtr,
-                             __global int reverseSubbandMapping[512])
-{
-  TransposedDataType transposedData = (TransposedDataType) transposedDataPtr;
-  ComplexVoltagesType complexVoltages = (ComplexVoltagesType) complexVoltagesPtr;
-
-  __local float2 tmp[16][17][2];
-
-  uint base_tab = 16 * get_group_id(1);
-  uint base_sb = 16 * get_group_id(2);
-  uint pol = get_global_id(0);
-  uint id_1 = get_local_id(1);
-  uint id_2 = get_local_id(2);
-  int source_sb_1 = reverseSubbandMapping[base_sb + id_1];
-  int source_sb_2 = reverseSubbandMapping[base_sb + id_2];
-
-  for (int time = 0; time < NR_TIMES_PER_BLOCK + NR_STATION_FILTER_TAPS - 1; time++) {
-    if (NR_TABS % 16 == 0 || base_tab + id_1 < NR_TABS)
-      if (source_sb_2 >= 0)
-        tmp[id_2][id_1][pol] = (*complexVoltages)[source_sb_2][time][base_tab + id_1][pol];
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (NR_TABS % 16 == 0 || base_tab + id_2 < NR_TABS) {
-      float2 sample = source_sb_1 >= 0 ? tmp[id_1][id_2][pol] : 0;
-      (*transposedData)[base_tab + id_2][pol][time][base_sb + id_1] = sample;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl
deleted file mode 100644
index 602a0b0ce2752503fac37f19d1640860444aefa7..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl
+++ /dev/null
@@ -1,174 +0,0 @@
-//# Trigger.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-typedef __global struct {
-  float mean, variance, bestValue;
-  uint bestApproxIndex;
-} (*TriggerInfoType)[NR_TABS];
-
-typedef __global float (*InvFIRfilteredDataType)[NR_TABS][NR_POLARIZATIONS][16][16][NR_SAMPLES_PER_SUBBAND / 4][16];
-
-
-#if 0
-float2 computeThreshold(__global const float *invFIRfilteredDataPtr)
-{
-  float M = 0, S = 0;
-  uint count = 0;
-
-  for (uint i = get_local_id(0); i < sizeof(InvFIRfilteredDataType) / sizeof(float); i += get_local_size(0)) {
-    ++count;
-    float sample = invFIRfilteredDataPtr[i];
-    float t = sample - M;
-    M += t / count;
-    S += t * (sample - M);
-  }
-
-  barrier(CLK_GLOBAL_MEM_FENCE);
-
-  __local float2 local_MS[256];
-
-  local_MS[get_local_id(0)] = (float2) (M, S);
-
-  for (uint i = get_local_size(0); (i >>= 1) != 0; ) {
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (get_local_id(0) < i)
-      local_MS[get_local_id(0)] += local_MS[get_local_id(0) + i];
-  }
-
-  if (get_local_id(0) == 0)
-    local_MS[0].y = native_sqrt(local_MS[0].y);
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-  return local_MS[0];
-}
-#endif
-
-
-__kernel void trigger(__global const void *triggerInfoPtr,
-                      __global const float *invFIRfilteredDataPtr)
-{
-  TriggerInfoType triggerInfo = (TriggerInfoType) triggerInfoPtr;
-  InvFIRfilteredDataType invFIRfilteredData = (InvFIRfilteredDataType) invFIRfilteredDataPtr;
-
-  uint minor = get_local_id(0);
-  uint major = get_local_id(1);
-  uint me = 16 * major + minor;
-  uint tab = get_global_id(2);
-
-  float mean = 0, sumsqdiff = 0;
-  float count = 0;
-
-  __local union {
-    float f[16][16][16];
-    float16 f16[16][16];
-    struct {
-      float means[256], sumsqdiffs[256], values[256];
-      uint approxIndices[256];
-    } best;
-  } tmp;
-
-  float16 h0, h1;
-  h1 /*.s789ABCDEF*/ = 0;
-  float16 sum_0;
-  float bestValue = 0;
-  uint bestApproxIndex = 0;
-
-  for (uint time = 0; time < 1024 * NR_SAMPLES_PER_SUBBAND / 4096; time++) {
-    for (uint i = 0; i < 16; i++) {
-      float sampleX = (*invFIRfilteredData)[tab][0][i][major][time][minor];
-      float sampleY = (*invFIRfilteredData)[tab][1][i][major][time][minor];
-      float power = sampleX * sampleX + sampleY * sampleY;
-      tmp.f[i][major][minor] = power;
-
-      count += 1.0f;
-      float delta = power - mean;
-      mean += delta / count;
-      sumsqdiff += delta * (power - mean);
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    h0 = tmp.f16[major][minor];
-
-    sum_0.s0 = sum_0.sF + h0.s0 - h1.s5;
-    sum_0.s1 = sum_0.s0 + h0.s1 - h1.s6;
-    sum_0.s2 = sum_0.s1 + h0.s2 - h1.s7;
-    sum_0.s3 = sum_0.s2 + h0.s3 - h1.s8;
-    sum_0.s4 = sum_0.s3 + h0.s4 - h1.s9;
-    sum_0.s5 = sum_0.s4 + h0.s5 - h1.sA;
-    sum_0.s6 = sum_0.s5 + h0.s6 - h1.sB;
-    sum_0.s7 = sum_0.s6 + h0.s7 - h1.sC;
-    sum_0.s8 = sum_0.s7 + h0.s8 - h1.sD;
-    sum_0.s9 = sum_0.s8 + h0.s9 - h1.sE;
-    sum_0.sA = sum_0.s9 + h0.sA - h1.sF;
-    sum_0.sB = sum_0.sA + h0.sB - h0.s0;
-    sum_0.sC = sum_0.sB + h0.sC - h0.s1;
-    sum_0.sD = sum_0.sC + h0.sD - h0.s2;
-    sum_0.sE = sum_0.sD + h0.sE - h0.s3;
-    sum_0.sF = sum_0.sE + h0.sF - h0.s4;
-
-    float m0 = max(max(sum_0.s0, sum_0.s1), max(sum_0.s2, sum_0.s3));
-    float m1 = max(max(sum_0.s4, sum_0.s5), max(sum_0.s6, sum_0.s7));
-    float m2 = max(max(sum_0.s8, sum_0.s9), max(sum_0.sA, sum_0.sB));
-    float m3 = max(max(sum_0.sC, sum_0.sD), max(sum_0.sE, sum_0.sF));
-    float m = max(max(m0, m1), max(m2, m3));
-
-    if (m >= bestValue) {
-      bestValue = m;
-      bestApproxIndex = me * 1024 * NR_SAMPLES_PER_SUBBAND / 256 + time * 16;
-    }
-
-    h1 /*.s56789ABCDEF*/ = h0 /*.s56789ABCDEF*/;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-  tmp.best.means[me] = mean;
-  tmp.best.sumsqdiffs[me] = sumsqdiff;
-  tmp.best.values[me] = bestValue;
-  tmp.best.approxIndices[me] = bestApproxIndex;
-
-  for (uint i = 256; (i >>= 1) != 0; ) {
-    if (me < i) {
-      float meanA = tmp.best.means[me], meanB = tmp.best.means[me + i];
-      float sumsqdiffA = tmp.best.sumsqdiffs[me], sumsqdiffB = tmp.best.sumsqdiffs[me + i];
-      float delta = meanB - meanA;
-      tmp.best.means[me] = (meanA + meanB) / 2;
-      tmp.best.sumsqdiffs[me] = sumsqdiffA + sumsqdiffB + delta * delta * count / 2;
-      count *= 2;
-
-      if (tmp.best.values[me] < tmp.best.values[me + i]) {
-        tmp.best.values[me] = tmp.best.values[me + i];
-        tmp.best.approxIndices[me] = tmp.best.approxIndices[me + i];
-      }
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-  if (me == 0) {
-    (*triggerInfo)[tab].mean = tmp.best.means[0];
-    (*triggerInfo)[tab].variance = tmp.best.sumsqdiffs[0] / (count - 1);
-    (*triggerInfo)[tab].bestValue = tmp.best.values[0];
-    (*triggerInfo)[tab].bestApproxIndex = tmp.best.approxIndices[0];
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl.8 b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl.8
deleted file mode 100644
index c0503a6eda5481cf12f4db098f1ac124f7d180a8..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl.8
+++ /dev/null
@@ -1,125 +0,0 @@
-typedef __global struct {
-  float bestValue;
-  uint bestApproxIndex;
-} (*TriggerInfoType)[NR_TABS];
-
-typedef __global float (*InvFIRfilteredDataType)[NR_TABS][NR_POLARIZATIONS][8][32][NR_TIMES_PER_BLOCK / 2][8];
-
-
-float2 computeThreshold(__global const float *invFIRfilteredDataPtr)
-{
-  float M = 0, S = 0;
-  uint count = 0;
-
-  for (uint i = get_local_id(0); i < sizeof(InvFIRfilteredDataType) / sizeof(float); i += get_local_size(0)) {
-    ++count;
-    float sample = invFIRfilteredDataPtr[i];
-    float t = sample - M;
-    M += t / count;
-    S += t * (sample - M);
-  }
-
-  barrier(CLK_GLOBAL_MEM_FENCE);
-
-  __local float2 local_MS[256];
-
-  local_MS[get_local_id(0)] = (float2) (M, S);
-
-  for (uint i = get_local_size(0); (i >>= 1) != 0; ) {
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (get_local_id(0) < i)
-      local_MS[get_local_id(0)] += local_MS[get_local_id(0) + i];
-  }
-
-  if (get_local_id(0) == 0)
-    local_MS[0].y = native_sqrt(local_MS[0].y);
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-  return local_MS[0];
-}
-
-
-__kernel void trigger(__global const void *triggerInfoPtr,
-                      __global const float *invFIRfilteredDataPtr)
-{
-  TriggerInfoType triggerInfo = (TriggerInfoType) triggerInfoPtr;
-  InvFIRfilteredDataType invFIRfilteredData = (InvFIRfilteredDataType) invFIRfilteredDataPtr;
-
-  uint minor = get_local_id(0);
-  uint major = get_local_id(1);
-  uint me = 8 * major + minor;
-  uint tab = get_global_id(2);
-
-  __local union {
-    float f[8][32][8];
-    float8 f8[32][8];
-    struct {
-      float values[256];
-      uint approxIndices[256];
-    } best;
-  } tmp;
-
-  float8 h0, h1, h2;
-  h1 = 0;
-  h2.s567 = 0;
-  float8 sum_0;
-  float bestValue = 0;
-  uint bestApproxIndex = 0;
-
-  for (uint time = 0; time < 1024 * NR_TIMES_PER_BLOCK / 2048; time++) {
-    for (uint i = 0; i < 8; i++) {
-      float sampleX = (*invFIRfilteredData)[tab][0][i][major][time][minor];
-      float sampleY = (*invFIRfilteredData)[tab][1][i][major][time][minor];
-      float power = sampleX * sampleX + sampleY * sampleY;
-      tmp.f[i][major][minor] = power;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    h0 = tmp.f8[major][minor];
-
-    sum_0.s0 = sum_0.s7 + h0.s0 - h2.s5;
-    sum_0.s1 = sum_0.s0 + h0.s1 - h2.s6;
-    sum_0.s2 = sum_0.s1 + h0.s2 - h2.s7;
-    sum_0.s3 = sum_0.s2 + h0.s3 - h1.s0;
-    sum_0.s4 = sum_0.s3 + h0.s4 - h1.s1;
-    sum_0.s5 = sum_0.s4 + h0.s5 - h1.s2;
-    sum_0.s6 = sum_0.s5 + h0.s6 - h1.s3;
-    sum_0.s7 = sum_0.s6 + h0.s7 - h1.s4;
-
-    float m0 = max(max(sum_0.s0, sum_0.s1), max(sum_0.s2, sum_0.s3));
-    float m1 = max(max(sum_0.s4, sum_0.s5), max(sum_0.s6, sum_0.s7));
-    float m = max(m0, m1);
-
-    if (m >= bestValue) {
-      bestValue = m;
-      bestApproxIndex = me * 1024 * NR_TIMES_PER_BLOCK / 256 + time * 8;
-    }
-
-    h2.s567 = h1.s567;
-    h1 = h0;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-
-  tmp.best.values[me] = bestValue;
-  tmp.best.approxIndices[me] = bestApproxIndex;
-
-  for (uint i = 256; (i >>= 1) != 0; ) {
-    if (me < i) {
-      if (tmp.best.values[me] < tmp.best.values[me + i]) {
-        tmp.best.values[me] = tmp.best.values[me + i];
-        tmp.best.approxIndices[me] = tmp.best.approxIndices[me + i];
-      }
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-  if (me == 0) {
-    (*triggerInfo)[tab].bestValue = tmp.best.values[0];
-    (*triggerInfo)[tab].bestApproxIndex = tmp.best.approxIndices[0];
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl.ok b/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl.ok
deleted file mode 100644
index 9d15d28152f6d9cb448b5cc7005c1d7defa91e03..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/UHEP/Trigger.cl.ok
+++ /dev/null
@@ -1,133 +0,0 @@
-typedef __global struct {
-  float bestValue;
-  uint bestApproxIndex;
-} (*TriggerInfoType)[NR_TABS];
-
-typedef __global float (*InvFIRfilteredDataType)[NR_TABS][NR_POLARIZATIONS][16][16][NR_TIMES_PER_BLOCK / 4][16];
-
-
-float2 computeThreshold(__global const float *invFIRfilteredDataPtr)
-{
-  float M = 0, S = 0;
-  uint count = 0;
-
-  for (uint i = get_local_id(0); i < sizeof(InvFIRfilteredDataType) / sizeof(float); i += get_local_size(0)) {
-    ++count;
-    float sample = invFIRfilteredDataPtr[i];
-    float t = sample - M;
-    M += t / count;
-    S += t * (sample - M);
-  }
-
-  barrier(CLK_GLOBAL_MEM_FENCE);
-
-  __local float2 local_MS[256];
-
-  local_MS[get_local_id(0)] = (float2) (M, S);
-
-  for (uint i = get_local_size(0); (i >>= 1) != 0; ) {
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    if (get_local_id(0) < i)
-      local_MS[get_local_id(0)] += local_MS[get_local_id(0) + i];
-  }
-
-  if (get_local_id(0) == 0)
-    local_MS[0].y = native_sqrt(local_MS[0].y);
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-  return local_MS[0];
-}
-
-
-__kernel void trigger(__global const void *triggerInfoPtr,
-                      __global const float *invFIRfilteredDataPtr)
-{
-  TriggerInfoType triggerInfo = (TriggerInfoType) triggerInfoPtr;
-  InvFIRfilteredDataType invFIRfilteredData = (InvFIRfilteredDataType) invFIRfilteredDataPtr;
-
-  uint minor = get_local_id(0);
-  uint major = get_local_id(1);
-  uint me = 16 * major + minor;
-  uint tab = get_global_id(2);
-
-  __local union {
-    float f[16][16][16];
-    float16 f16[16][16];
-    struct {
-      float values[256];
-      uint approxIndices[256];
-    } best;
-  } tmp;
-
-  float16 h0, h1;
-  h1.s789ABCDEF = 0;
-  float16 sum_0, sum_1;
-  float bestValue = 0;
-  uint bestApproxIndex = 0;
-
-  for (uint time = 0; time < 1024 * NR_TIMES_PER_BLOCK / 4096; time++) {
-    for (uint i = 0; i < 16; i++) {
-      float sampleX = (*invFIRfilteredData)[tab][0][i][major][time][minor];
-      float sampleY = (*invFIRfilteredData)[tab][1][i][major][time][minor];
-      float power = sampleX * sampleX + sampleY * sampleY;
-      tmp.f[i][major][minor] = power;
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-
-    h0 = tmp.f16[major][minor];
-
-    sum_0.s0 = sum_0.sF + h0.s0 - h1.s5;
-    sum_0.s1 = sum_0.s0 + h0.s1 - h1.s6;
-    sum_0.s2 = sum_0.s1 + h0.s2 - h1.s7;
-    sum_0.s3 = sum_0.s2 + h0.s3 - h1.s8;
-    sum_0.s4 = sum_0.s3 + h0.s4 - h1.s9;
-    sum_0.s5 = sum_0.s4 + h0.s5 - h1.sA;
-    sum_0.s6 = sum_0.s5 + h0.s6 - h1.sB;
-    sum_0.s7 = sum_0.s6 + h0.s7 - h1.sC;
-    sum_0.s8 = sum_0.s7 + h0.s8 - h1.sD;
-    sum_0.s9 = sum_0.s8 + h0.s9 - h1.sE;
-    sum_0.sA = sum_0.s9 + h0.sA - h1.sF;
-    sum_0.sB = sum_0.sA + h0.sB - h0.s0;
-    sum_0.sC = sum_0.sB + h0.sC - h0.s1;
-    sum_0.sD = sum_0.sC + h0.sD - h0.s2;
-    sum_0.sE = sum_0.sD + h0.sE - h0.s3;
-    sum_0.sF = sum_0.sE + h0.sF - h0.s4;
-
-    float m0 = max(max(sum_0.s0, sum_0.s1), max(sum_0.s2, sum_0.s3));
-    float m1 = max(max(sum_0.s4, sum_0.s5), max(sum_0.s6, sum_0.s7));
-    float m2 = max(max(sum_0.s8, sum_0.s9), max(sum_0.sA, sum_0.sB));
-    float m3 = max(max(sum_0.sC, sum_0.sD), max(sum_0.sE, sum_0.sF));
-    float m = max(max(m0, m1), max(m2, m3));
-
-    if (m >= bestValue) {
-      bestValue = m;
-      bestApproxIndex = me * 1024 * NR_TIMES_PER_BLOCK / 256 + time * 16;
-    }
-
-    h1.s56789ABCDEF = h0.s56789ABCDEF;
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-
-  tmp.best.values[me] = bestValue;
-  tmp.best.approxIndices[me] = bestApproxIndex;
-
-  for (uint i = 256; (i >>= 1) != 0; ) {
-    if (me < i) {
-      if (tmp.best.values[me] < tmp.best.values[me + i]) {
-        tmp.best.values[me] = tmp.best.values[me + i];
-        tmp.best.approxIndices[me] = tmp.best.approxIndices[me + i];
-      }
-    }
-
-    barrier(CLK_LOCAL_MEM_FENCE);
-  }
-
-  if (me == 0) {
-    (*triggerInfo)[tab].bestValue = tmp.best.values[0];
-    (*triggerInfo)[tab].bestApproxIndex = tmp.best.approxIndices[0];
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/BeamFormerWorkQueue.cc b/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/BeamFormerWorkQueue.cc
deleted file mode 100644
index ff75c20445fb35ef0439520c077bc47fc4b3f754..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/BeamFormerWorkQueue.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-//# BeamFormerSubbandProc.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "BeamFormerSubbandProc.h"
-
-#include <Common/LofarLogger.h>
-#include <ApplCommon/PosixTime.h>
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/OpenMP_Lock.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    BeamFormerSubbandProc::BeamFormerSubbandProc(BeamFormerPipeline &pipeline, unsigned gpuNumber)
-      :
-      SubbandProc( pipeline.context,pipeline.devices[gpuNumber], gpuNumber, pipeline.ps),
-      pipeline(pipeline),
-      inputSamples(boost::extents[ps.settings.antennaFields.size()][ps.nrSamplesPerChannel() * ps.nrChannelsPerSubband()][NR_POLARIZATIONS][ps.nrBytesPerComplexSample()], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY),
-      devFilteredData(queue, CL_MEM_READ_WRITE, ps.settings.antennaFields.size() * NR_POLARIZATIONS * ps.nrSamplesPerChannel() * ps.nrChannelsPerSubband() * sizeof(std::complex<float>)),
-      bandPassCorrectionWeights(boost::extents[ps.nrChannelsPerSubband()], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY),
-      delaysAtBegin(boost::extents[ps.nrBeams()][ps.settings.antennaFields.size()][NR_POLARIZATIONS], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY),
-      delaysAfterEnd(boost::extents[ps.nrBeams()][ps.settings.antennaFields.size()][NR_POLARIZATIONS], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY),
-      phaseOffsets(boost::extents[ps.nrBeams()][NR_POLARIZATIONS], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY),
-      devCorrectedData(queue, CL_MEM_READ_WRITE, ps.settings.antennaFields.size() * ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * NR_POLARIZATIONS * sizeof(std::complex<float>)),
-      beamFormerWeights(boost::extents[ps.settings.antennaFields.size()][ps.nrChannelsPerSubband()][ps.nrTABs(0)], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY),
-      devComplexVoltages(queue, CL_MEM_READ_WRITE, ps.nrChannelsPerSubband() * ps.nrSamplesPerChannel() * ps.nrTABs(0) * NR_POLARIZATIONS * sizeof(std::complex<float>)),
-      //transposedComplexVoltages(boost::extents[ps.nrTABs(0)][NR_POLARIZATIONS][ps.nrSamplesPerChannel()][ps.nrChannelsPerSubband()], queue, CL_MEM_READ_ONLY, CL_MEM_READ_WRITE)
-      transposedComplexVoltages(boost::extents[ps.nrTABs(0)][NR_POLARIZATIONS][ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()], queue, CL_MEM_READ_ONLY, CL_MEM_READ_WRITE),
-      DMs(boost::extents[ps.nrTABs(0)], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY),
-
-      intToFloatKernel(ps, queue, pipeline.intToFloatProgram, devFilteredData, inputSamples),
-      fftKernel(ps, pipeline.context, devFilteredData),
-      delayAndBandPassKernel(ps, pipeline.delayAndBandPassProgram, devCorrectedData, devFilteredData, delaysAtBegin, delaysAfterEnd, phaseOffsets, bandPassCorrectionWeights),
-      beamFormerKernel(ps, pipeline.beamFormerProgram, devComplexVoltages, devCorrectedData, beamFormerWeights),
-      transposeKernel(ps, pipeline.transposeProgram, transposedComplexVoltages, devComplexVoltages),
-      dedispersionForwardFFTkernel(ps, pipeline.context, transposedComplexVoltages),
-      dedispersionBackwardFFTkernel(ps, pipeline.context, transposedComplexVoltages),
-      dedispersionChirpKernel(ps, pipeline.dedispersionChirpProgram, queue, transposedComplexVoltages, DMs)
-
-    {
-      if (ps.correctBandPass()) {
-        BandPass::computeCorrectionFactors(bandPassCorrectionWeights.origin(), ps.nrChannelsPerSubband());
-        bandPassCorrectionWeights.hostToDevice(CL_TRUE);
-      }
-    }
-
-
-    void BeamFormerSubbandProc::doWork()
-    {
-      //queue.enqueueWriteBuffer(devFIRweights, CL_TRUE, 0, firWeightsSize, firFilterWeights);
-      bandPassCorrectionWeights.hostToDevice(CL_TRUE);
-      DMs.hostToDevice(CL_TRUE);
-
-      double startTime = ps.startTime(), currentTime, stopTime = ps.stopTime(), blockTime = ps.CNintegrationTime();
-
-#pragma omp barrier
-
-      double executionStartTime = omp_get_wtime();
-
-      for (unsigned block = 0; (currentTime = startTime + block * blockTime) < stopTime; block++) {
-#pragma omp single nowait
-        LOG_INFO_STR("block = " << block << ", time = " << to_simple_string(from_ustime_t(currentTime)));
-
-        memset(delaysAtBegin.origin(), 0, delaysAtBegin.bytesize());
-        memset(delaysAfterEnd.origin(), 0, delaysAfterEnd.bytesize());
-        memset(phaseOffsets.origin(), 0, phaseOffsets.bytesize());
-
-        // FIXME!!!
-        if (ps.settings.antennaFields.size() >= 3)
-          delaysAtBegin[0][2][0] = 1e-6, delaysAfterEnd[0][2][0] = 1.1e-6;
-
-        delaysAtBegin.hostToDevice(CL_FALSE);
-        delaysAfterEnd.hostToDevice(CL_FALSE);
-        phaseOffsets.hostToDevice(CL_FALSE);
-        beamFormerWeights.hostToDevice(CL_FALSE);
-
-#pragma omp for schedule(dynamic), nowait
-        for (unsigned subband = 0; subband < ps.nrSubbands(); subband++) {
-#if 1
-          {
-#if defined USE_B7015
-            OMP_ScopedLock scopedLock(pipeline.hostToDeviceLock[gpu / 2]);
-#endif
-            inputSamples.hostToDevice(CL_TRUE);
-            pipeline.samplesCounter.doOperation(inputSamples.event, 0, 0, inputSamples.bytesize());
-          }
-#endif
-
-          //#pragma omp critical (GPU)
-          {
-            if (ps.nrChannelsPerSubband() > 1) {
-              intToFloatKernel.enqueue(queue, pipeline.intToFloatCounter);
-              fftKernel.enqueue(queue, pipeline.fftCounter);
-            }
-
-            delayAndBandPassKernel.enqueue(queue, pipeline.delayAndBandPassCounter, subband);
-            beamFormerKernel.enqueue(queue, pipeline.beamFormerCounter);
-            transposeKernel.enqueue(queue, pipeline.transposeCounter);
-            dedispersionForwardFFTkernel.enqueue(queue, pipeline.dedispersionForwardFFTcounter);
-            dedispersionChirpKernel.enqueue(queue, pipeline.dedispersionChirpCounter, ps.subbandToFrequencyMapping()[subband]);
-            dedispersionBackwardFFTkernel.enqueue(queue, pipeline.dedispersionBackwardFFTcounter);
-
-            queue.finish();
-          }
-
-          //queue.enqueueReadBuffer(devComplexVoltages, CL_TRUE, 0, hostComplexVoltages.bytesize(), hostComplexVoltages.origin());
-          //dedispersedData.deviceToHost(CL_TRUE);
-        }
-      }
-
-#pragma omp barrier
-
-#pragma omp master
-      if (!profiling)
-        LOG_INFO_STR("run time = " << omp_get_wtime() - executionStartTime);
-    }
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/BeamFormerWorkQueue.h b/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/BeamFormerWorkQueue.h
deleted file mode 100644
index 312edce089000e1a7eeabf850fcb996a668c524b..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/BeamFormerWorkQueue.h
+++ /dev/null
@@ -1,83 +0,0 @@
-//# BeamFormerSubbandProc.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_BEAM_FORMER_WORKQUEUE_H
-#define LOFAR_GPUPROC_OPENCL_BEAM_FORMER_WORKQUEUE_H
-
-#include <complex>
-
-#include <Common/LofarLogger.h>
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/MultiDimArrayHostBuffer.h>
-#include <GPUProc/BandPass.h>
-#include <GPUProc/Pipelines/BeamFormerPipeline.h>
-
-#include <GPUProc/Kernels/IntToFloatKernel.h>
-#include <GPUProc/Kernels/Filter_FFT_Kernel.h>
-#include <GPUProc/Kernels/DelayAndBandPassKernel.h>
-#include <GPUProc/Kernels/BeamFormerKernel.h>
-#include <GPUProc/Kernels/BeamFormerTransposeKernel.h>
-#include <GPUProc/Kernels/DedispersionForwardFFTkernel.h>
-#include <GPUProc/Kernels/DedispersionBackwardFFTkernel.h>
-#include <GPUProc/Kernels/DedispersionChirpKernel.h>
-
-#include "SubbandProc.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class BeamFormerSubbandProc : public SubbandProc
-    {
-    public:
-      BeamFormerSubbandProc(BeamFormerPipeline &, unsigned queueNumber);
-
-      void doWork();
-
-      BeamFormerPipeline  &pipeline;
-
-      MultiArraySharedBuffer<char, 4>                inputSamples;
-      DeviceBuffer devFilteredData;
-      MultiArraySharedBuffer<float, 1>               bandPassCorrectionWeights;
-      MultiArraySharedBuffer<float, 3>               delaysAtBegin, delaysAfterEnd;
-      MultiArraySharedBuffer<float, 2>               phaseOffsets;
-      DeviceBuffer devCorrectedData;
-      MultiArraySharedBuffer<std::complex<float>, 3> beamFormerWeights;
-      DeviceBuffer devComplexVoltages;
-      MultiArraySharedBuffer<std::complex<float>, 4> transposedComplexVoltages;
-      MultiArraySharedBuffer<float, 1>               DMs;
-
-    private:
-      IntToFloatKernel intToFloatKernel;
-      Filter_FFT_Kernel fftKernel;
-      DelayAndBandPassKernel delayAndBandPassKernel;
-      BeamFormerKernel beamFormerKernel;
-      BeamFormerTransposeKernel transposeKernel;
-      DedispersionForwardFFTkernel dedispersionForwardFFTkernel;
-      DedispersionBackwardFFTkernel dedispersionBackwardFFTkernel;
-      DedispersionChirpKernel dedispersionChirpKernel;
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/CorrelatorWorkQueue.cc b/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/CorrelatorWorkQueue.cc
deleted file mode 100644
index 8b19a58879b2983c556b8f9d735007df7c32e720..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/CorrelatorWorkQueue.cc
+++ /dev/null
@@ -1,516 +0,0 @@
-//# CorrelatorSubbandProc.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "CorrelatorSubbandProc.h"
-
-#include <cstring>
-#include <algorithm>
-
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/OpenMP_Lock.h>
-#include <GPUProc/BandPass.h>
-#include <GPUProc/Pipelines/CorrelatorPipelinePrograms.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    /* The data travels as follows:
-     *
-     * [input]  -> devInput.inputSamples
-     *             -> firFilterKernel
-     *          -> devFilteredData
-     *             -> fftKernel
-     *          -> devFilteredData
-     *             -> delayAndBandPassKernel
-     *          -> devInput.inputSamples
-     *             -> correlatorKernel
-     *          -> devFilteredData = visibilities
-     * [output] <-
-     */
-    CorrelatorSubbandProc::CorrelatorSubbandProc(const Parset       &parset,
-      cl::Context &context, 
-      cl::Device  &device,
-      unsigned gpuNumber,
-                                             CorrelatorPipelinePrograms & programs,
-                                             FilterBank &filterBank
-                                             )
-      :
-    SubbandProc( context, device, gpuNumber, parset),
-      prevBlock(-1),
-      prevSAP(-1),
-      devInput(ps.nrBeams(),
-                ps.settings.antennaFields.size(),
-                NR_POLARIZATIONS,
-                ps.nrHistorySamples() + ps.nrSamplesPerSubband(),
-                ps.nrBytesPerComplexSample(),
-                queue,
-
-                // reserve enough space in inputSamples for the output of
-                // the delayAndBandPassKernel.
-                ps.settings.antennaFields.size() * NR_POLARIZATIONS * ps.nrSamplesPerSubband() * sizeof(std::complex<float>)),
-      devFilteredData(queue,
-                      CL_MEM_READ_WRITE,
-
-                      // reserve enough space for the output of the
-                      // firFilterKernel,
-                      std::max(ps.settings.antennaFields.size() * NR_POLARIZATIONS * ps.nrSamplesPerSubband() * sizeof(std::complex<float>),
-                      // and the correlatorKernel.
-                               ps.nrBaselines() * ps.nrChannelsPerSubband() * NR_POLARIZATIONS * NR_POLARIZATIONS * sizeof(std::complex<float>))),
-      devFIRweights(queue,
-                    CL_MEM_READ_ONLY,
-                    ps.nrChannelsPerSubband() * NR_TAPS * sizeof(float)),
-      firFilterKernel(ps,
-                      queue,
-                      programs.firFilterProgram,
-                      devFilteredData,
-                      devInput.inputSamples,
-                      devFIRweights),
-      fftKernel(ps,
-                context,
-                devFilteredData),
-      bandPassCorrectionWeights(boost::extents[ps.nrChannelsPerSubband()],
-                                queue,
-                                CL_MEM_WRITE_ONLY,
-                                CL_MEM_READ_ONLY),
-      delayAndBandPassKernel(ps,
-                             programs.delayAndBandPassProgram,
-                             devInput.inputSamples,
-                             devFilteredData,
-                             devInput.delaysAtBegin,
-                             devInput.delaysAfterEnd,
-                             devInput.phaseOffsets,
-                             bandPassCorrectionWeights),
-#if defined USE_NEW_CORRELATOR
-      correlateTriangleKernel(ps,
-                              queue,
-                              programs.correlatorProgram,
-                              devFilteredData,
-                              devInput.inputSamples),
-      correlateRectangleKernel(ps,
-                              queue,
-                              programs.correlatorProgram, 
-                              devFilteredData, 
-                              devInput.inputSamples)
-#else
-      correlatorKernel(ps,
-                       queue, 
-                       programs.correlatorProgram, 
-                       devFilteredData, 
-                       devInput.inputSamples)
-#endif
-    {
-      // put enough objects in the inputPool to operate
-      // TODO: Tweak the number of inputPool objects per SubbandProc,
-      // probably something like max(3, nrSubbands/nrSubbandProcs * 2), because
-      // there both need to be enough items to receive all subbands at
-      // once, and enough items to process the same amount in the
-      // mean time.
-      //
-      // At least 3 items are needed for a smooth Pool operation.
-      size_t nrInputDatas = std::max(3UL, ps.nrSubbands());
-      for(size_t i = 0; i < nrInputDatas; ++i) {
-        inputPool.free.append(new SubbandProcInputData(
-                ps.nrBeams(),
-                ps.settings.antennaFields.size(),
-                NR_POLARIZATIONS,
-                ps.nrHistorySamples() + ps.nrSamplesPerSubband(),
-                ps.nrBytesPerComplexSample(),
-                devInput));
-      }
-
-      // put enough objects in the outputPool to operate
-      for(size_t i = 0; i < 3; ++i) {
-        outputPool.free.append(new CorrelatedDataHostBuffer(
-                ps.settings.antennaFields.size(),
-                ps.nrChannelsPerSubband(),
-                ps.integrationSteps(),
-                devFilteredData,
-                *this));
-      }
-
-      // create all the counters
-      // Move the FIR filter weight to the GPU
-#if defined USE_NEW_CORRELATOR
-      addCounter("compute - cor.triangle");
-      addCounter("compute - cor.rectangle");
-#else
-      addCounter("compute - correlator");
-#endif
-
-      addCounter("compute - FIR");
-      addCounter("compute - delay/bp");
-      addCounter("compute - FFT");
-      addCounter("input - samples");
-      addCounter("output - visibilities");
-
-      // CPU timers are set by CorrelatorPipeline
-      addTimer("CPU - read input");
-      addTimer("CPU - process");
-      addTimer("CPU - postprocess");
-      addTimer("CPU - total");
-
-      // GPU timers are set by us
-      addTimer("GPU - total");
-      addTimer("GPU - input");
-      addTimer("GPU - output");
-      addTimer("GPU - compute");
-      addTimer("GPU - wait");
-
-      queue.enqueueWriteBuffer(devFIRweights, CL_TRUE, 0, ps.nrChannelsPerSubband() * NR_TAPS * sizeof(float), filterBank.getWeights().origin());
-
-      if (ps.correctBandPass())
-      {
-        BandPass::computeCorrectionFactors(bandPassCorrectionWeights.origin(), ps.nrChannelsPerSubband());
-        bandPassCorrectionWeights.hostToDevice(CL_TRUE);
-      }
-    }
-
-    // Get the log2 of the supplied number
-    unsigned CorrelatorSubbandProc::flagFunctions::get2LogOfNrChannels(unsigned nrChannels)
-    {
-      ASSERT(powerOfTwo(nrChannels));
-
-      unsigned logNrChannels;
-      for (logNrChannels = 0; 1U << logNrChannels != nrChannels;
-        logNrChannels ++)
-      {;} // do nothing, the creation of the log is a side effect of the for loop
-
-      //Alternative solution snipped:
-      //int targetlevel = 0;
-      //while (index >>= 1) ++targetlevel; 
-      return logNrChannels;
-    }
-
-    void CorrelatorSubbandProc::flagFunctions::propagateFlagsToOutput(
-      Parset const &parset,
-      MultiDimArray<LOFAR::SparseSet<unsigned>, 1>const &inputFlags,
-      CorrelatedData &output)
-    {   
-      unsigned numberOfChannels = parset.nrChannelsPerSubband();
-
-      // Object for storing transformed flags
-      MultiDimArray<SparseSet<unsigned>, 2> flagsPerChannel(
-        boost::extents[numberOfChannels][parset.settings.antennaFields.size()]);
-
-      // First transform the flags to channel flags: taking in account 
-      // reduced resolution in time and the size of the filter
-      convertFlagsToChannelFlags(parset, inputFlags, flagsPerChannel);
-
-      // Calculate the number of flafs per baseline and assign to
-      // output object.
-      switch (output.itsNrBytesPerNrValidSamples) {
-        case 4:
-          calculateAndSetNumberOfFlaggedSamples<uint32_t>(parset, flagsPerChannel, output);
-          break;
-
-        case 2:
-          calculateAndSetNumberOfFlaggedSamples<uint16_t>(parset, flagsPerChannel, output);
-          break;
-
-        case 1:
-          calculateAndSetNumberOfFlaggedSamples<uint8_t>(parset, flagsPerChannel, output);
-          break;
-      }
-    }
-
-    void CorrelatorSubbandProc::flagFunctions::convertFlagsToChannelFlags(Parset const &parset,
-      MultiDimArray<LOFAR::SparseSet<unsigned>, 1>const &inputFlags,
-      MultiDimArray<SparseSet<unsigned>, 2>& flagsPerChannel)
-    {
-      unsigned numberOfChannels = parset.nrChannelsPerSubband();
-      unsigned log2NrChannels = get2LogOfNrChannels(numberOfChannels);
-      //Convert the flags per sample to flags per channel
-      for (unsigned station = 0; station < parset.settings.antennaFields.size(); station ++) 
-      {
-        // get the flag ranges
-        const SparseSet<unsigned>::Ranges &ranges = inputFlags[station].getRanges();
-        for (SparseSet<unsigned>::const_iterator it = ranges.begin();
-          it != ranges.end(); it ++) 
-        {
-          unsigned begin_idx;
-          unsigned end_idx;
-          if (numberOfChannels == 1)  // if number of channels == 1
-          { //do nothing, just take the ranges as supplied
-            begin_idx = it->begin; 
-            end_idx = std::min(parset.nrSamplesPerChannel(), it->end );
-          }
-          else
-          {
-            // Never flag before the start of the time range               
-            // use bitshift to divide to the number of channels. 
-            //
-            // NR_TAPS is the width of the filter: they are
-            // absorbed by the FIR and thus should be excluded
-            // from the original flag set.
-            //
-            // At the same time, every sample is affected by
-            // the NR_TAPS-1 samples before it. So, any flagged
-            // sample in the input flags NR_TAPS samples in
-            // the channel.
-            begin_idx = std::max(0, 
-              (signed) (it->begin >> log2NrChannels) - NR_TAPS + 1);
-
-            // The min is needed, because flagging the last input
-            // samples would cause NR_TAPS subsequent samples to
-            // be flagged, which aren't necessarily part of this block.
-            end_idx = std::min(parset.nrSamplesPerChannel() + 1, 
-              ((it->end - 1) >> log2NrChannels) + 1);
-          }
-
-          // Now copy the transformed ranges to the channelflags
-          for (unsigned ch = 0; ch < numberOfChannels; ch++) {
-            flagsPerChannel[ch][station].include(begin_idx, end_idx);
-          }
-        }
-      }
-    }
-
-
-    namespace {
-      unsigned baseline(unsigned stat1, unsigned stat2)
-      {
-        //baseline(stat1, stat2); This function should be moved to a helper class
-        return stat2 * (stat2 + 1) / 2 + stat1;
-      }
-    }
-
-    template<typename T> void CorrelatorSubbandProc::flagFunctions::calculateAndSetNumberOfFlaggedSamples(
-      Parset const &parset,
-      MultiDimArray<SparseSet<unsigned>, 2>const & flagsPerChannel,
-      CorrelatedData &output)
-    {
-      // loop the stations
-      for (unsigned stat2 = 0; stat2 < parset.settings.antennaFields.size(); stat2 ++) {
-        for (unsigned stat1 = 0; stat1 <= stat2; stat1 ++) {
-          unsigned bl = baseline(stat1, stat2);
-
-          unsigned nrSamplesPerIntegration = parset.nrSamplesPerChannel();
-          // If there is a single channel then the index 0 contains real data
-          if (parset.nrChannelsPerSubband() == 1) 
-          {                                            
-            //The number of invalid (flagged) samples is the union of the flagged samples in the two stations
-            unsigned nrValidSamples = nrSamplesPerIntegration -
-              (flagsPerChannel[0][stat1] | flagsPerChannel[0][stat2]).count();
-
-            // Moet worden toegekend op de correlated dataobject
-            output.nrValidSamples<T>(bl, 0) = nrValidSamples;
-          } 
-          else 
-          {
-            // channel 0 does not contain valid data
-            output.nrValidSamples<T>(bl, 0) = 0; //channel zero, has zero valid samples
-
-            for(unsigned ch = 1; ch < parset.nrChannelsPerSubband(); ch ++) 
-            {
-              // valid samples is total number of samples minus the union of the
-              // Two stations.
-              unsigned nrValidSamples = nrSamplesPerIntegration -
-                (flagsPerChannel[ch][stat1] | flagsPerChannel[ch][stat2]).count();
-
-              output.nrValidSamples<T>(bl, ch) = nrValidSamples;
-            }
-          }
-        }
-      }
-    }
-
-    // Instantiate required templates
-    template void CorrelatorSubbandProc::flagFunctions::calculateAndSetNumberOfFlaggedSamples<uint32_t>(
-      Parset const &parset,
-      MultiDimArray<SparseSet<unsigned>, 2>const & flagsPerChannel,
-      CorrelatedData &output);
-    template void CorrelatorSubbandProc::flagFunctions::calculateAndSetNumberOfFlaggedSamples<uint16_t>(
-      Parset const &parset,
-      MultiDimArray<SparseSet<unsigned>, 2>const & flagsPerChannel,
-      CorrelatedData &output);
-    template void CorrelatorSubbandProc::flagFunctions::calculateAndSetNumberOfFlaggedSamples<uint8_t>(
-      Parset const &parset,
-      MultiDimArray<SparseSet<unsigned>, 2>const & flagsPerChannel,
-      CorrelatedData &output);
-
-    void CorrelatorSubbandProc::flagFunctions::applyWeightingToAllPolarizations(unsigned baseline, 
-      unsigned channel, float weight, CorrelatedData &output)
-    { // TODO: inline???
-      for(unsigned idx_polarization_1 = 0; idx_polarization_1 < NR_POLARIZATIONS; ++idx_polarization_1)
-        for(unsigned idx_polarization_2 = 0; idx_polarization_2 < NR_POLARIZATIONS; ++idx_polarization_2)
-          output.visibilities[baseline][channel][idx_polarization_1][idx_polarization_2] *= weight;
-    }
-
-    template<typename T> void CorrelatorSubbandProc::flagFunctions::applyFractionOfFlaggedSamplesOnVisibilities(Parset const &parset,
-      CorrelatedData &output)
-    {
-      for (unsigned bl = 0; bl < output.itsNrBaselines; ++bl) {
-        // Calculate the weights for the channels
-        //
-        // Channel 0 is already flagged according to specs, so we can simply
-        // include it both for 1 and >1 channels/subband.
-        for(unsigned ch = 0; ch < parset.nrChannelsPerSubband(); ch ++) 
-        {
-          T nrValidSamples = output.nrValidSamples<T>(bl, ch);
-
-          // If all samples flagged weights is zero
-          // TODO: make a lookup table for the expensive division
-          float weight = nrValidSamples ? 1e-6f / nrValidSamples : 0;  
-
-          applyWeightingToAllPolarizations(bl, ch, weight, output);
-        }
-      }
-    }
-
-    // Instantiate required templates
-    template void CorrelatorSubbandProc::flagFunctions::applyFractionOfFlaggedSamplesOnVisibilities<uint32_t>(Parset const &parset,
-      CorrelatedData &output);
-    template void CorrelatorSubbandProc::flagFunctions::applyFractionOfFlaggedSamplesOnVisibilities<uint16_t>(Parset const &parset,
-      CorrelatedData &output);
-    template void CorrelatorSubbandProc::flagFunctions::applyFractionOfFlaggedSamplesOnVisibilities<uint8_t>(Parset const &parset,
-      CorrelatedData &output);
-
-
-    void CorrelatorSubbandProc::processSubband(SubbandProcInputData &input, CorrelatedDataHostBuffer &output)
-    {
-      timers["GPU - total"]->start();
-
-      size_t block = input.block;
-      unsigned subband = input.subband;
-
-      {
-        timers["GPU - input"]->start();
-
-#if defined USE_B7015
-        OMP_ScopedLock scopedLock(pipeline.hostToDeviceLock[gpu / 2]);
-#endif
-        input.inputSamples.hostToDevice(CL_TRUE);
-        counters["input - samples"]->doOperation(input.inputSamples.deviceBuffer.event, 0, 0, input.inputSamples.bytesize());
-
-        timers["GPU - input"]->stop();
-      }
-
-      timers["GPU - compute"]->start();
-
-      // Moved from doWork() The delay data should be available before the kernels start.
-      // Queue processed ordered. This could main that the transfer is not nicely overlapped
-
-      unsigned SAP = ps.settings.subbands[subband].SAP;
-
-      // Only upload delays if they changed w.r.t. the previous subband
-      if ((int)SAP != prevSAP || (ssize_t)block != prevBlock) {
-        input.delaysAtBegin.hostToDevice(CL_FALSE);
-        input.delaysAfterEnd.hostToDevice(CL_FALSE);
-        input.phaseOffsets.hostToDevice(CL_FALSE);
-
-        prevSAP = SAP;
-        prevBlock = block;
-      }
-
-      if (ps.nrChannelsPerSubband() > 1) {
-        firFilterKernel.enqueue(queue, *counters["compute - FIR"]);
-        fftKernel.enqueue(queue, *counters["compute - FFT"]);
-      }
-
-      delayAndBandPassKernel.enqueue(queue, *counters["compute - delay/bp"], subband);
-#if defined USE_NEW_CORRELATOR
-      correlateTriangleKernel.enqueue(queue, *counters["compute - cor.triangle"]);
-      correlateRectangleKernel.enqueue(queue, *counters["compute - cor.rectangle"]);
-#else
-      correlatorKernel.enqueue(queue, *counters["compute - correlator"]);
-#endif
-
-      queue.flush();
-
-      // ***** The GPU will be occupied for a while, do some calculations in the
-      // background.
-
-      // Propagate the flags.
-      flagFunctions::propagateFlagsToOutput(ps, input.inputFlags, output);
-
-      // Wait for the GPU to finish.
-      timers["GPU - wait"]->start();
-      queue.finish();
-      timers["GPU - wait"]->stop();
-
-      timers["GPU - compute"]->stop();
-
-      {
-        timers["GPU - output"]->start();
-
-#if defined USE_B7015
-        OMP_ScopedLock scopedLock(pipeline.deviceToHostLock[gpu / 2]);
-#endif
-        output.deviceToHost(CL_TRUE);
-        // now perform weighting of the data based on the number of valid samples
-
-        counters["output - visibilities"]->doOperation(output.deviceBuffer.event, 0, output.bytesize(), 0);
-
-        timers["GPU - output"]->stop();
-      }
-
-      timers["GPU - total"]->stop();
-    }
-
-
-    void CorrelatorSubbandProc::postprocessSubband(CorrelatedDataHostBuffer &output)
-    {
-      // The flags are alrady copied to the correct location
-      // now the flagged amount should be applied to the visibilities
-      switch (output.itsNrBytesPerNrValidSamples) {
-        case 4:
-          flagFunctions::applyFractionOfFlaggedSamplesOnVisibilities<uint32_t>(ps, output);  
-          break;
-
-        case 2:
-          flagFunctions::applyFractionOfFlaggedSamplesOnVisibilities<uint16_t>(ps, output);  
-          break;
-
-        case 1:
-          flagFunctions::applyFractionOfFlaggedSamplesOnVisibilities<uint8_t>(ps, output);  
-          break;
-      }
-    }
-
-
-    // flag the input samples.
-    void SubbandProcInputData::flagInputSamples(unsigned station,
-                                              const SubbandMetaData& metaData)
-    {
-
-      // Get the size of a sample in bytes.
-      size_t sizeof_sample = sizeof *inputSamples.origin();
-
-      // Calculate the number elements to skip when striding over the second
-      // dimension of inputSamples.
-      size_t stride = inputSamples[station][0].num_elements();
-
-      // Zero the bytes in the input data for the flagged ranges.
-      for(SparseSet<unsigned>::const_iterator it = metaData.flags.getRanges().begin();
-        it != metaData.flags.getRanges().end(); ++it)
-      {
-        void *offset = inputSamples[station][it->begin].origin();
-        size_t size = stride * (it->end - it->begin) * sizeof_sample;
-        memset(offset, 0, size);
-      }
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/CorrelatorWorkQueue.h b/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/CorrelatorWorkQueue.h
deleted file mode 100644
index bd3c937a5e3bf36b8fb163f62c0181ac5eed463a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/CorrelatorWorkQueue.h
+++ /dev/null
@@ -1,285 +0,0 @@
-//# CorrelatorSubbandProc.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_CORRELATOR_WORKQUEUE_H
-#define LOFAR_GPUPROC_OPENCL_CORRELATOR_WORKQUEUE_H
-
-// @file
-#include <complex>
-
-#include <Common/Thread/Queue.h>
-#include <Stream/Stream.h>
-#include <CoInterface/Parset.h>
-#include <CoInterface/CorrelatedData.h>
-#include <CoInterface/SmartPtr.h>
-#include <CoInterface/SparseSet.h>
-#include <CoInterface/SubbandMetaData.h>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/MultiDimArrayHostBuffer.h>
-#include <GPUProc/FilterBank.h>
-#include <GPUProc/Pipelines/CorrelatorPipelinePrograms.h>
-#include <GPUProc/Kernels/FIR_FilterKernel.h>
-#include <GPUProc/Kernels/Filter_FFT_Kernel.h>
-#include <GPUProc/Kernels/DelayAndBandPassKernel.h>
-#include <GPUProc/Kernels/CorrelatorKernel.h>
-
-#include "SubbandProc.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    /*
-     * The CorrelatorSubbandProc does the following transformation:
-     *   SubbandProcInputData -> CorrelatedDataHostBuffer
-     *
-     * The SubbandProcInputData represents one block of one subband
-     * of input data, and the CorrelatedDataHostBuffer the complex
-     * visibilities of such a block.
-     *
-     * For both input and output, a fixed set of objects is created,
-     * tied to the GPU specific for the SubbandProc, for increased
-     * performance. The objects are recycled by using Pool objects.
-     *
-     * The data flows as follows:
-     *
-     *   // Fetch the next input object to fill
-     *   SmartPtr<SubbandProcInputData> input = queue.inputPool.free.remove();
-     *
-     *   // Provide input
-     *   receiveInput(input);
-     *
-     *   // Annotate input
-     *   input->block = block;
-     *   input->subband = subband;
-     *
-     *   // Fetch the next output object to fill
-     *   SmartPtr<CorrelatedDataHostBuffer> output = queue.outputPool.free.remove();
-     *
-     *   // Process block
-     *   queue.doSubband(input, output);
-     *
-     *   // Give back input and output objects to queue
-     *   queue.inputPool.free.append(input);
-     *   queue.outputPool.free.append(output);
-     *
-     *   The queue.inputPool.filled and queue.outputPool.filled can be used to
-     *   temporarily store filled input and output objects. Such is needed to
-     *   obtain parallellism (i.e. read/process/write in separate threads).
-     */
-    class CorrelatorSubbandProc;
-
-    // The pool operates using a 'free' and a 'filled' queue to cycle through buffers. Producers
-    // move elements free->filled, and consumers move elements filled->free.
-    template <typename T>
-    struct Pool
-    {
-      typedef T element_type;
-
-      Queue< SmartPtr<element_type> > free;
-      Queue< SmartPtr<element_type> > filled;
-    };
-
-    // A CorrelatedData object tied to a HostBuffer and SubbandProc. Such links
-    // are needed for performance -- the visibilities are stored in a buffer
-    // directly linked to the GPU output buffer.
-    class CorrelatedDataHostBuffer: public MultiArrayHostBuffer<fcomplex, 4>, public CorrelatedData
-    {
-    public:
-      CorrelatedDataHostBuffer(unsigned nrStations, unsigned nrChannels, unsigned maxNrValidSamples, DeviceBuffer &deviceBuffer, CorrelatorSubbandProc &queue) 
-      :
-        MultiArrayHostBuffer<fcomplex, 4>(boost::extents[nrStations * (nrStations + 1) / 2][nrChannels][NR_POLARIZATIONS][NR_POLARIZATIONS], CL_MEM_WRITE_ONLY, deviceBuffer),
-        CorrelatedData(nrStations, nrChannels, maxNrValidSamples, this->origin(), this->num_elements(), heapAllocator, 1),
-        queue(queue)
-      {
-      }
-
-      // Annotation required, as we'll loose track of the exact order
-      size_t block;
-      unsigned subband;
-
-      CorrelatorSubbandProc &queue;
-
-    private:
-      CorrelatedDataHostBuffer();
-      CorrelatedDataHostBuffer(const CorrelatedDataHostBuffer &);
-    };
-
-    // 
-    //   Collect all inputData for the correlatorSubbandProc item:
-    //    \arg inputsamples
-    //    \arg delays
-    //    \arg phaseOffSets
-    //    \arg flags
-    // It also contains a read function parsing all this data from an input stream.   
-    class SubbandProcInputData
-    {
-    public:
-
-      // The set of GPU buffers to link our HostBuffers to.
-      struct DeviceBuffers
-      {
-        DeviceBuffer delaysAtBegin;
-        DeviceBuffer delaysAfterEnd;
-        DeviceBuffer phaseOffsets;
-        DeviceBuffer inputSamples;
-
-        DeviceBuffers(size_t n_beams, size_t n_stations, size_t n_polarizations,
-                         size_t n_samples, size_t bytes_per_complex_sample,
-                         cl::CommandQueue &queue,
-                         size_t inputSamplesMinSize = 0,
-                         cl_mem_flags deviceBufferFlags = CL_MEM_READ_ONLY)
-        :
-          delaysAtBegin(queue, deviceBufferFlags, n_beams * n_stations * n_polarizations * sizeof(float)),
-          delaysAfterEnd(queue, deviceBufferFlags, n_beams * n_stations * n_polarizations * sizeof(float)),
-          phaseOffsets(queue, deviceBufferFlags, n_stations * n_polarizations * sizeof(float)),
-          inputSamples(queue, CL_MEM_READ_WRITE, std::max(inputSamplesMinSize, n_stations * n_samples * n_polarizations * bytes_per_complex_sample))
-        {
-        }
-      };
-
-      // Relevant block
-      size_t block;
-
-      // Relevant subband
-      unsigned subband;
-
-      MultiArrayHostBuffer<float, 3> delaysAtBegin; //!< Whole sample delays at the start of the workitem      
-      MultiArrayHostBuffer<float, 3> delaysAfterEnd;//!< Whole sample delays at the end of the workitem      
-      MultiArrayHostBuffer<float, 2> phaseOffsets;  //!< Remainder of delays
-
-      // inputdata with flagged data set to zero
-      MultiArrayHostBuffer<char, 4> inputSamples;
-
-      // The input flags
-      MultiDimArray<SparseSet<unsigned>,1> inputFlags;
-
-      // Create the inputData object we need shared host/device memory on the supplied devicequeue
-      SubbandProcInputData(size_t n_beams, size_t n_stations, size_t n_polarizations,
-                         size_t n_samples, size_t bytes_per_complex_sample,
-                         DeviceBuffers &deviceBuffers,
-                         cl_mem_flags hostBufferFlags = CL_MEM_WRITE_ONLY)
-        :
-        delaysAtBegin(boost::extents[n_beams][n_stations][n_polarizations], hostBufferFlags, deviceBuffers.delaysAtBegin),
-        delaysAfterEnd(boost::extents[n_beams][n_stations][n_polarizations], hostBufferFlags, deviceBuffers.delaysAfterEnd),
-        phaseOffsets(boost::extents[n_stations][n_polarizations], hostBufferFlags, deviceBuffers.phaseOffsets),
-        inputSamples(boost::extents[n_stations][n_samples][n_polarizations][bytes_per_complex_sample], hostBufferFlags, deviceBuffers.inputSamples), // TODO: The size of the buffer is NOT validated
-        inputFlags(boost::extents[n_stations])
-      {
-      }
-
-      // set all flagged inputSamples to zero.
-      void flagInputSamples(unsigned station, const SubbandMetaData& metaData);
-    };
-
-    class CorrelatorSubbandProc : public SubbandProc
-    {
-    public:
-      // Collection of functions to tranfer the input flags to the output.
-      // \c propagateFlagsToOutput can be called parallel to the kernels.
-      // After the data is copied from the the shared buffer 
-      // \c applyFractionOfFlaggedSamplesOnVisibilities can be used to weight
-      // the visibilities 
-      class flagFunctions
-      {
-      public:
-        // 1. Convert input flags to channel flags, calculate the amount flagged samples and save this in output
-        static void propagateFlagsToOutput(Parset const & parset,
-          MultiDimArray<LOFAR::SparseSet<unsigned>, 1>const &inputFlags,
-          CorrelatedData &output) ;
-
-        // 2. Calculate the weight based on the number of flags and apply this weighting to all output values
-        template<typename T> static void applyFractionOfFlaggedSamplesOnVisibilities(Parset const &parset,
-          CorrelatedData &output);
-
-        // 1.1Convert the flags per station to channel flags, change time scale if nchannel > 1
-        static void convertFlagsToChannelFlags(Parset const &parset,
-          MultiDimArray<LOFAR::SparseSet<unsigned>, 1>const &inputFlags,
-          MultiDimArray<SparseSet<unsigned>, 2> &flagsPerChannel);
-
-        // 1.2calculate the number of flagged samples and set this on the output dataproduct
-        // This function is aware of the used filter width a corrects for this.
-        template<typename T> static void calculateAndSetNumberOfFlaggedSamples(Parset const &parset,
-          MultiDimArray<SparseSet<unsigned>, 2>const & flagsPerChannel,
-          CorrelatedData &output);
-
-        // 1.3 Get the LOG2 of the input. Used to speed up devisions by 2
-        static unsigned get2LogOfNrChannels(unsigned nrChannels);
-
-        // 2.1 Apply the supplied weight to the complex values in the channel and baseline
-        static void applyWeightingToAllPolarizations(unsigned baseline, 
-          unsigned channel, float weight, CorrelatedData &output);
-      };
-
-    public:
-      CorrelatorSubbandProc(const Parset &parset,cl::Context &context,
-                          cl::Device &device, unsigned queueNumber,
-                          CorrelatorPipelinePrograms &programs,
-                          FilterBank &filterBank);
-
-      // Correlate the data found in the input data buffer
-      void processSubband(SubbandProcInputData &input, CorrelatedDataHostBuffer &output);
-
-      // Do post processing on the CPU
-      void postprocessSubband(CorrelatedDataHostBuffer &output);
-      
-    private:
-      // The previously processed SAP/block, or -1 if nothing has been
-      // processed yet. Used in order to determine if new delays have
-      // to be uploaded.
-      ssize_t prevBlock;
-      signed int prevSAP;
-
-      // Raw buffers, these are mapped with boost multiarrays 
-      // in the InputData class
-      SubbandProcInputData::DeviceBuffers devInput;
-
-      DeviceBuffer devFilteredData;
-
-    public:
-      // A pool of input data, to allow items to be filled and
-      // computed on in parallel.
-      Pool<SubbandProcInputData> inputPool;
-
-      // A pool of output data, to allow items to be filled
-      // and written in parallel.
-      Pool<CorrelatedDataHostBuffer> outputPool;
-
-    private:
-      // Compiled kernels
-      DeviceBuffer devFIRweights;
-      FIR_FilterKernel firFilterKernel;
-      Filter_FFT_Kernel fftKernel;
-      MultiArraySharedBuffer<float, 1> bandPassCorrectionWeights;
-      DelayAndBandPassKernel delayAndBandPassKernel;
-#if defined USE_NEW_CORRELATOR
-      CorrelateTriangleKernel correlateTriangleKernel;
-      CorrelateRectangleKernel correlateRectangleKernel;
-#else
-      CorrelatorKernel correlatorKernel;
-#endif
-
-      friend class SubbandProcInputData;
-    };
-
-  }
-}
-#endif
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/UHEP_WorkQueue.cc b/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/UHEP_WorkQueue.cc
deleted file mode 100644
index 9d52e1a29049aef962f9b1e1849ebad54cc73f0f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/UHEP_WorkQueue.cc
+++ /dev/null
@@ -1,137 +0,0 @@
-//# UHEP_SubbandProc.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "UHEP_SubbandProc.h"
-
-#include <Common/LofarLogger.h>
-#include <ApplCommon/PosixTime.h>
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/OpenMP_Lock.h>
-
-#include <GPUProc/UHEP/InvertedStationPPFWeights.h>
-#include <GPUProc/Kernels/UHEP_TransposeKernel.h>
-#include <GPUProc/Kernels/UHEP_InvFFT_Kernel.h>
-#include <GPUProc/Kernels/UHEP_InvFIR_Kernel.h>
-#include <GPUProc/Kernels/UHEP_TriggerKernel.h>
-#include <GPUProc/Kernels/UHEP_BeamFormerKernel.h>
-
-#include "SubbandProc.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    UHEP_SubbandProc::UHEP_SubbandProc(UHEP_Pipeline &pipeline, unsigned gpuNumber)
-      :
-      SubbandProc( pipeline.context, pipeline.devices[gpuNumber], gpuNumber, pipeline.ps),
-      pipeline(pipeline),
-      hostInputSamples(boost::extents[ps.settings.antennaFields.size()][ps.nrSubbands()][ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1][NR_POLARIZATIONS][ps.nrBytesPerComplexSample()], queue, CL_MEM_WRITE_ONLY),
-      hostBeamFormerWeights(boost::extents[ps.settings.antennaFields.size()][ps.nrSubbands()][ps.nrTABs(0)], queue, CL_MEM_WRITE_ONLY),
-      hostTriggerInfo(boost::extents[ps.nrTABs(0)], queue, CL_MEM_READ_ONLY)
-    {
-      size_t inputSamplesSize = ps.settings.antennaFields.size() * ps.nrSubbands() * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) * NR_POLARIZATIONS * ps.nrBytesPerComplexSample();
-      size_t complexVoltagesSize = ps.nrSubbands() * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) * ps.nrTABs(0) * NR_POLARIZATIONS * sizeof(std::complex<float>);
-      size_t transposedDataSize = ps.nrTABs(0) * NR_POLARIZATIONS * (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) * 512 * sizeof(std::complex<float>);
-      size_t invFIRfilteredDataSize = ps.nrTABs(0) * NR_POLARIZATIONS * ps.nrSamplesPerChannel() * 512 * sizeof(std::complex<float>);
-
-      size_t buffer0size = std::max(inputSamplesSize, transposedDataSize);
-      size_t buffer1size = std::max(complexVoltagesSize, invFIRfilteredDataSize);
-
-      devBuffers[0] = cl::Buffer(pipeline.context, CL_MEM_READ_WRITE, buffer0size);
-      devBuffers[1] = cl::Buffer(pipeline.context, CL_MEM_READ_WRITE, buffer1size);
-
-      size_t beamFormerWeightsSize = ps.settings.antennaFields.size() * ps.nrSubbands() * ps.nrTABs(0) * sizeof(std::complex<float>);
-      devBeamFormerWeights = cl::Buffer(pipeline.context, CL_MEM_READ_ONLY, beamFormerWeightsSize);
-
-      devInputSamples = devBuffers[0];
-      devComplexVoltages = devBuffers[1];
-
-      devReverseSubbandMapping = cl::Buffer(pipeline.context, CL_MEM_READ_ONLY, 512 * sizeof(int));
-      devInvFIRfilterWeights = cl::Buffer(pipeline.context, CL_MEM_READ_ONLY, 1024 * NR_STATION_FILTER_TAPS * sizeof(float));
-      devFFTedData = devBuffers[0];
-      devInvFIRfilteredData = devBuffers[1];
-
-      devTriggerInfo = cl::Buffer(pipeline.context, CL_MEM_WRITE_ONLY, ps.nrTABs(0) * sizeof(TriggerInfo));
-    }
-
-
-    void UHEP_SubbandProc::doWork(const float * /*delaysAtBegin*/, const float * /*delaysAfterEnd*/, const float * /*phaseOffsets*/)
-    {
-      UHEP_BeamFormerKernel beamFormer(ps, pipeline.beamFormerProgram, devComplexVoltages, devInputSamples, devBeamFormerWeights);
-      UHEP_TransposeKernel transpose(ps, pipeline.transposeProgram, devFFTedData, devComplexVoltages, devReverseSubbandMapping);
-      UHEP_InvFFT_Kernel invFFT(ps, pipeline.invFFTprogram, devFFTedData);
-      UHEP_InvFIR_Kernel invFIR(ps, queue, pipeline.invFIRfilterProgram, devInvFIRfilteredData, devFFTedData, devInvFIRfilterWeights);
-      UHEP_TriggerKernel trigger(ps, pipeline.triggerProgram, devTriggerInfo, devInvFIRfilteredData);
-      double startTime = ps.startTime(), stopTime = ps.stopTime(), blockTime = ps.CNintegrationTime();
-      unsigned nrBlocks = (stopTime - startTime) / blockTime;
-
-      queue.enqueueWriteBuffer(devInvFIRfilterWeights, CL_FALSE, 0, sizeof invertedStationPPFWeights, invertedStationPPFWeights);
-      queue.enqueueWriteBuffer(devReverseSubbandMapping, CL_TRUE, 0, 512 * sizeof(int), reverseSubbandMapping);
-
-#pragma omp barrier
-
-      double executionStartTime = omp_get_wtime();
-
-#pragma omp for schedule(dynamic), nowait
-      for (unsigned block = 0; block < nrBlocks; block++) {
-        double currentTime = startTime + block * blockTime;
-
-        //#pragma omp single nowait // FIXME: why does the compiler complain here???
-        LOG_INFO_STR("block = " << block << ", time = " << to_simple_string(from_ustime_t(currentTime)));
-
-#if 0
-        {
-#if defined USE_B7015
-          OMP_ScopedLock scopedLock(pipeline.hostToDeviceLock[gpu / 2]);
-#endif
-          queue.enqueueWriteBuffer(devInputSamples, CL_TRUE, 0, sampledDataSize, hostInputSamples.origin(), 0, &samplesEvent);
-        }
-#endif
-
-        queue.enqueueWriteBuffer(devBeamFormerWeights, CL_FALSE, 0, hostBeamFormerWeights.bytesize(), hostBeamFormerWeights.origin(), 0, &beamFormerWeightsEvent);
-        pipeline.beamFormerWeightsCounter.doOperation(beamFormerWeightsEvent, 0, 0, hostBeamFormerWeights.bytesize());
-
-        queue.enqueueWriteBuffer(devInputSamples, CL_FALSE, 0, hostInputSamples.bytesize(), hostInputSamples.origin(), 0, &inputSamplesEvent);
-        pipeline.samplesCounter.doOperation(inputSamplesEvent, 0, 0, hostInputSamples.bytesize());
-
-        beamFormer.enqueue(queue, pipeline.beamFormerCounter);
-        transpose.enqueue(queue, pipeline.transposeCounter);
-        invFFT.enqueue(queue, pipeline.invFFTcounter);
-        invFIR.enqueue(queue, pipeline.invFIRfilterCounter);
-        trigger.enqueue(queue, pipeline.triggerCounter);
-        queue.finish();             // necessary to overlap I/O & computations ???
-        queue.enqueueReadBuffer(devTriggerInfo, CL_TRUE, 0, hostTriggerInfo.bytesize(), hostTriggerInfo.origin());
-      }
-
-#pragma omp barrier
-
-#pragma omp master
-      if (!profiling)
-        LOG_INFO_STR("run time = " << omp_get_wtime() - executionStartTime);
-    }
-
-
-
-  }
-}
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/UHEP_WorkQueue.h b/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/UHEP_WorkQueue.h
deleted file mode 100644
index 5fb7452f663f8f6d1daa9e97cd5e54817d4665db..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/UHEP_WorkQueue.h
+++ /dev/null
@@ -1,69 +0,0 @@
-//# UHEP_SubbandProc.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_UHEP_WORKQUEUE_H
-#define LOFAR_GPUPROC_OPENCL_UHEP_WORKQUEUE_H
-
-#include <complex>
-
-#include <Common/LofarLogger.h>
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/MultiDimArrayHostBuffer.h>
-#include <GPUProc/Pipelines/UHEP_Pipeline.h>
-#include <GPUProc/Kernels/UHEP_TriggerKernel.h>
-#include "SubbandProc.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UHEP_SubbandProc : public SubbandProc
-    {
-    public:
-      UHEP_SubbandProc(UHEP_Pipeline &, unsigned queueNumber);
-
-      void doWork(const float *delaysAtBegin, const float *delaysAfterEnd, const float *phaseOffsets);
-
-      UHEP_Pipeline       &pipeline;
-      cl::Event inputSamplesEvent, beamFormerWeightsEvent;
-
-      cl::Buffer devBuffers[2];
-      cl::Buffer devInputSamples;
-      MultiArrayHostBuffer<char, 5> hostInputSamples;
-
-      cl::Buffer devBeamFormerWeights;
-      MultiArrayHostBuffer<std::complex<float>, 3> hostBeamFormerWeights;
-
-      cl::Buffer devComplexVoltages;
-      cl::Buffer devReverseSubbandMapping;
-      cl::Buffer devFFTedData;
-      cl::Buffer devInvFIRfilteredData;
-      cl::Buffer devInvFIRfilterWeights;
-
-      cl::Buffer devTriggerInfo;
-      MultiArraySharedBuffer<TriggerInfo, 1> hostTriggerInfo;
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/WorkQueue.cc b/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/WorkQueue.cc
deleted file mode 100644
index b020c6ecca18753b944dc1d5dcec4247d2442800..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/WorkQueue.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-//# SubbandProc.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "SubbandProc.h"
-
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    SubbandProc::SubbandProc(cl::Context &context, cl::Device &device, unsigned gpuNumber, const Parset &ps)
-      :
-      gpu(gpuNumber),
-      device(device),
-      ps(ps)
-    {
-#ifdef USE_B7015
-      set_affinity(gpu);
-#endif
-
-      queue = cl::CommandQueue(context, device, profiling ? CL_QUEUE_PROFILING_ENABLE : 0);
-    }
-
-
-    void SubbandProc::addCounter(const std::string &name)
-    {
-      counters[name] = new PerformanceCounter(name, profiling);
-    }
-
-
-    void SubbandProc::addTimer(const std::string &name)
-    {
-      timers[name] = new NSTimer(name, false, false);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/WorkQueue.h b/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/WorkQueue.h
deleted file mode 100644
index 516022016fc3617d013982fe2ca65ff4af555b68..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/WorkQueues/WorkQueue.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//# SubbandProc.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_WORKQUEUE_H
-#define LOFAR_GPUPROC_OPENCL_WORKQUEUE_H
-
-#include <string>
-#include <map>
-
-#include <Common/Timer.h>
-#include <CoInterface/Parset.h>
-#include <CoInterface/SmartPtr.h>
-#include <GPUProc/PerformanceCounter.h>
-#include <GPUProc/gpu_incl.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class SubbandProc
-    {
-    public:
-      SubbandProc(cl::Context &context, cl::Device &device, unsigned gpuNumber, const Parset &ps);
-
-      const unsigned gpu;
-      cl::Device &device;
-      cl::CommandQueue queue;
-
-      std::map<std::string, SmartPtr<PerformanceCounter> > counters;
-      std::map<std::string, SmartPtr<NSTimer> > timers;
-
-    protected:
-      const Parset &ps;
-
-      void addCounter(const std::string &name);
-      void addTimer(const std::string &name);
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/fft2.cl b/RTCP/Cobalt/GPUProc/src/opencl/fft2.cl
deleted file mode 100644
index d768d66ecf611272f16ec9eacb9d89015b7e3197..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/fft2.cl
+++ /dev/null
@@ -1,362 +0,0 @@
-
-
-// Copyright (C) 2010-2012 Advanced Micro Devices, Inc. All Rights Reserved.
-
-
-__constant float2 twiddles[7] = {
-  (float2)(1.0000000000000000000000000000000000f, -0.0000000000000000000000000000000000f),
-  (float2)(1.0000000000000000000000000000000000f, -0.0000000000000000000000000000000000f),
-  (float2)(1.0000000000000000000000000000000000f, -0.0000000000000000000000000000000000f),
-  (float2)(1.0000000000000000000000000000000000f, -0.0000000000000000000000000000000000f),
-  (float2)(0.7071067811865475727373109293694142f, -0.7071067811865474617150084668537602f),
-  (float2)(0.0000000000000000612323399573676604f, -1.0000000000000000000000000000000000f),
-  (float2)(-0.7071067811865474617150084668537602f, -0.7071067811865475727373109293694142f),
-};
-
-
-#define fvect2 float2
-
-#define C8Q  0.70710678118654752440084436210485f
-#define C5QA 0.30901699437494742410229341718282f
-#define C5QB 0.95105651629515357211643933337938f
-#define C5QC 0.50000000000000000000000000000000f
-#define C5QD 0.58778525229247312916870595463907f
-#define C5QE 0.80901699437494742410229341718282f
-#define C3QA 0.50000000000000000000000000000000f
-#define C3QB 0.86602540378443864676372317075294f
-
-__attribute__((always_inline)) void
-FwdRad2B1(float2 *R0, float2 *R1)
-{
-
-  float2 T;
-
-  (*R1) = (*R0) - (*R1);
-  (*R0) = 2.0f * (*R0) - (*R1);
-
-
-}
-
-__attribute__((always_inline)) void
-InvRad2B1(float2 *R0, float2 *R1)
-{
-
-  float2 T;
-
-  (*R1) = (*R0) - (*R1);
-  (*R0) = 2.0f * (*R0) - (*R1);
-
-
-}
-
-__attribute__((always_inline)) void
-FwdRad4B1(float2 *R0, float2 *R2, float2 *R1, float2 *R3)
-{
-
-  float2 T;
-
-  (*R1) = (*R0) - (*R1);
-  (*R0) = 2.0f * (*R0) - (*R1);
-  (*R3) = (*R2) - (*R3);
-  (*R2) = 2.0f * (*R2) - (*R3);
-
-  (*R2) = (*R0) - (*R2);
-  (*R0) = 2.0f * (*R0) - (*R2);
-  (*R3) = (*R1) + (fvect2)(-(*R3).y, (*R3).x);
-  (*R1) = 2.0f * (*R1) - (*R3);
-
-  T = (*R1);
-  (*R1) = (*R2);
-  (*R2) = T;
-
-}
-
-__attribute__((always_inline)) void
-InvRad4B1(float2 *R0, float2 *R2, float2 *R1, float2 *R3)
-{
-
-  float2 T;
-
-  (*R1) = (*R0) - (*R1);
-  (*R0) = 2.0f * (*R0) - (*R1);
-  (*R3) = (*R2) - (*R3);
-  (*R2) = 2.0f * (*R2) - (*R3);
-
-  (*R2) = (*R0) - (*R2);
-  (*R0) = 2.0f * (*R0) - (*R2);
-  (*R3) = (*R1) + (fvect2)((*R3).y, -(*R3).x);
-  (*R1) = 2.0f * (*R1) - (*R3);
-
-  T = (*R1);
-  (*R1) = (*R2);
-  (*R2) = T;
-
-}
-
-__attribute__((always_inline)) void
-FwdPass0(uint rw, uint b, uint me, uint inOffset, uint outOffset, __global float2 *bufIn, __local float *bufOutRe, __local float *bufOutIm, float2 *R0, float2 *R1, float2 *R2, float2 *R3)
-{
-
-
-  if(rw)
-  {
-    (*R0) = bufIn[inOffset + ( 0 + me * 1 + 0 + 0 ) * 1];
-    (*R1) = bufIn[inOffset + ( 0 + me * 1 + 0 + 2 ) * 1];
-    (*R2) = bufIn[inOffset + ( 0 + me * 1 + 0 + 4 ) * 1];
-    (*R3) = bufIn[inOffset + ( 0 + me * 1 + 0 + 6 ) * 1];
-  }
-
-
-  FwdRad4B1(R0, R1, R2, R3);
-
-
-  if(rw)
-  {
-    bufOutRe[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 0 ) * 1] = (*R0).x;
-    bufOutRe[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 1 ) * 1] = (*R1).x;
-    bufOutRe[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 2 ) * 1] = (*R2).x;
-    bufOutRe[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 3 ) * 1] = (*R3).x;
-  }
-
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  if(rw)
-  {
-    (*R0).x = bufOutRe[outOffset + ( 0 + me * 2 + 0 + 0 ) * 1];
-    (*R1).x = bufOutRe[outOffset + ( 0 + me * 2 + 0 + 4 ) * 1];
-    (*R2).x = bufOutRe[outOffset + ( 0 + me * 2 + 1 + 0 ) * 1];
-    (*R3).x = bufOutRe[outOffset + ( 0 + me * 2 + 1 + 4 ) * 1];
-  }
-
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  if(rw)
-  {
-    bufOutIm[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 0 ) * 1] = (*R0).y;
-    bufOutIm[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 1 ) * 1] = (*R1).y;
-    bufOutIm[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 2 ) * 1] = (*R2).y;
-    bufOutIm[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 3 ) * 1] = (*R3).y;
-  }
-
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  if(rw)
-  {
-    (*R0).y = bufOutIm[outOffset + ( 0 + me * 2 + 0 + 0 ) * 1];
-    (*R1).y = bufOutIm[outOffset + ( 0 + me * 2 + 0 + 4 ) * 1];
-    (*R2).y = bufOutIm[outOffset + ( 0 + me * 2 + 1 + 0 ) * 1];
-    (*R3).y = bufOutIm[outOffset + ( 0 + me * 2 + 1 + 4 ) * 1];
-  }
-
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-}
-
-__attribute__((always_inline)) void
-FwdPass1(uint rw, uint b, uint me, uint inOffset, uint outOffset, __local float *bufInRe, __local float *bufInIm, __global float2 *bufOut, float2 *R0, float2 *R1, float2 *R2, float2 *R3)
-{
-
-
-
-  {
-    float2 W = twiddles[3 + 1 * ((2 * me + 0) % 4) + 0];
-    float TR, TI;
-    TR = (W.x * (*R1).x) - (W.y * (*R1).y);
-    TI = (W.y * (*R1).x) + (W.x * (*R1).y);
-    (*R1).x = TR;
-    (*R1).y = TI;
-  }
-
-  {
-    float2 W = twiddles[3 + 1 * ((2 * me + 1) % 4) + 0];
-    float TR, TI;
-    TR = (W.x * (*R3).x) - (W.y * (*R3).y);
-    TI = (W.y * (*R3).x) + (W.x * (*R3).y);
-    (*R3).x = TR;
-    (*R3).y = TI;
-  }
-
-  FwdRad2B1(R0, R1);
-  FwdRad2B1(R2, R3);
-
-
-  if(rw)
-  {
-    __global float4 *buff4g = bufOut;
-
-    buff4g[ 1 * me + 0 + 0 ] = (float4)((*R0).x, (*R0).y, (*R2).x, (*R2).y);
-    buff4g[ 1 * me + 0 + 2 ] = (float4)((*R1).x, (*R1).y, (*R3).x, (*R3).y);
-  }
-
-}
-
-__attribute__((always_inline)) void
-InvPass0(uint rw, uint b, uint me, uint inOffset, uint outOffset, __global float2 *bufIn, __local float *bufOutRe, __local float *bufOutIm, float2 *R0, float2 *R1, float2 *R2, float2 *R3)
-{
-
-
-  if(rw)
-  {
-    (*R0) = bufIn[inOffset + ( 0 + me * 1 + 0 + 0 ) * 1];
-    (*R1) = bufIn[inOffset + ( 0 + me * 1 + 0 + 2 ) * 1];
-    (*R2) = bufIn[inOffset + ( 0 + me * 1 + 0 + 4 ) * 1];
-    (*R3) = bufIn[inOffset + ( 0 + me * 1 + 0 + 6 ) * 1];
-  }
-
-
-  InvRad4B1(R0, R1, R2, R3);
-
-
-  if(rw)
-  {
-    bufOutRe[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 0 ) * 1] = (*R0).x;
-    bufOutRe[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 1 ) * 1] = (*R1).x;
-    bufOutRe[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 2 ) * 1] = (*R2).x;
-    bufOutRe[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 3 ) * 1] = (*R3).x;
-  }
-
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  if(rw)
-  {
-    (*R0).x = bufOutRe[outOffset + ( 0 + me * 2 + 0 + 0 ) * 1];
-    (*R1).x = bufOutRe[outOffset + ( 0 + me * 2 + 0 + 4 ) * 1];
-    (*R2).x = bufOutRe[outOffset + ( 0 + me * 2 + 1 + 0 ) * 1];
-    (*R3).x = bufOutRe[outOffset + ( 0 + me * 2 + 1 + 4 ) * 1];
-  }
-
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  if(rw)
-  {
-    bufOutIm[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 0 ) * 1] = (*R0).y;
-    bufOutIm[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 1 ) * 1] = (*R1).y;
-    bufOutIm[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 2 ) * 1] = (*R2).y;
-    bufOutIm[outOffset + ( ((1 * me + 0) / 1) * 4 + (1 * me + 0) % 1 + 3 ) * 1] = (*R3).y;
-  }
-
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  if(rw)
-  {
-    (*R0).y = bufOutIm[outOffset + ( 0 + me * 2 + 0 + 0 ) * 1];
-    (*R1).y = bufOutIm[outOffset + ( 0 + me * 2 + 0 + 4 ) * 1];
-    (*R2).y = bufOutIm[outOffset + ( 0 + me * 2 + 1 + 0 ) * 1];
-    (*R3).y = bufOutIm[outOffset + ( 0 + me * 2 + 1 + 4 ) * 1];
-  }
-
-
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-}
-
-__attribute__((always_inline)) void
-InvPass1(uint rw, uint b, uint me, uint inOffset, uint outOffset, __local float *bufInRe, __local float *bufInIm, __global float2 *bufOut, float2 *R0, float2 *R1, float2 *R2, float2 *R3)
-{
-
-
-
-  {
-    float2 W = twiddles[3 + 1 * ((2 * me + 0) % 4) + 0];
-    float TR, TI;
-    TR = (W.x * (*R1).x) + (W.y * (*R1).y);
-    TI = -(W.y * (*R1).x) + (W.x * (*R1).y);
-    (*R1).x = TR;
-    (*R1).y = TI;
-  }
-
-  {
-    float2 W = twiddles[3 + 1 * ((2 * me + 1) % 4) + 0];
-    float TR, TI;
-    TR = (W.x * (*R3).x) + (W.y * (*R3).y);
-    TI = -(W.y * (*R3).x) + (W.x * (*R3).y);
-    (*R3).x = TR;
-    (*R3).y = TI;
-  }
-
-  InvRad2B1(R0, R1);
-  InvRad2B1(R2, R3);
-
-
-  if(rw)
-  {
-    __global float4 *buff4g = bufOut;
-
-    buff4g[ 1 * me + 0 + 0 ] = (float4)((*R0).x, (*R0).y, (*R2).x, (*R2).y) * 1.2500000000000000e-01f;
-    buff4g[ 1 * me + 0 + 2 ] = (float4)((*R1).x, (*R1).y, (*R3).x, (*R3).y) * 1.2500000000000000e-01f;
-  }
-
-}
-
-typedef union  { uint u;
-                 int i;
-} cb_t;
-
-__kernel __attribute__((reqd_work_group_size (64,1,1)))
-//void fft_fwd(__constant cb_t *cb __attribute__((max_constant_size(32))), __global const float2 * restrict gbIn, __global float2 * restrict gbOut)
-void fft_fwd(__global const float2 * restrict gbIn, __global float2 * restrict gbOut)
-{
-  uint me = get_local_id(0);
-  uint batch = get_group_id(0);
-
-  __local float lds[256];
-
-  uint iOffset;
-  uint oOffset;
-  __global float2 *lwbIn;
-  __global float2 *lwbOut;
-
-  float2 R0, R1, R2, R3;
-
-  //uint rw = (me < ((cb[0].u) - batch*32)*2) ? 1 : 0;
-  uint rw = (me < ((1) - batch * 32) * 2) ? 1 : 0;
-
-  uint b = 0;
-
-  iOffset = (batch * 32 + (me / 2)) * 8;
-  oOffset = (batch * 32 + (me / 2)) * 8;
-  lwbIn = gbIn + iOffset;
-  lwbOut = gbOut + oOffset;
-
-  FwdPass0(rw, b, me % 2, 0, (me / 2) * 8, lwbIn, lds, lds, &R0, &R1, &R2, &R3);
-  FwdPass1(rw, b, me % 2, (me / 2) * 8, 0, lds, lds, lwbOut, &R0, &R1, &R2, &R3);
-}
-
-__kernel __attribute__((reqd_work_group_size (64,1,1)))
-//void fft_back(__constant cb_t *cb __attribute__((max_constant_size(32))), __global const float2 * restrict gbIn, __global float2 * restrict gbOut)
-void fft_back(__global const float2 * restrict gbIn, __global float2 * restrict gbOut)
-{
-  uint me = get_local_id(0);
-  uint batch = get_group_id(0);
-
-  __local float lds[256];
-
-  uint iOffset;
-  uint oOffset;
-  __global float2 *lwbIn;
-  __global float2 *lwbOut;
-
-  float2 R0, R1, R2, R3;
-
-  //uint rw = (me < ((cb[0].u) - batch*32)*2) ? 1 : 0;
-  uint rw = (me < ((1) - batch * 32) * 2) ? 1 : 0;
-
-  uint b = 0;
-
-  iOffset = (batch * 32 + (me / 2)) * 8;
-  oOffset = (batch * 32 + (me / 2)) * 8;
-  lwbIn = gbIn + iOffset;
-  lwbOut = gbOut + oOffset;
-
-  InvPass0(rw, b, me % 2, 0, (me / 2) * 8, lwbIn, lds, lds, &R0, &R1, &R2, &R3);
-  InvPass1(rw, b, me % 2, (me / 2) * 8, 0, lds, lds, lwbOut, &R0, &R1, &R2, &R3);
-}
-
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/gpu_incl.h b/RTCP/Cobalt/GPUProc/src/opencl/gpu_incl.h
deleted file mode 100644
index 9db413b2c52996b987814888aa6bb35af2ff74b2..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/gpu_incl.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//# gpu_incl.h: portable OpenCL header include with our option(s)
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_GPU_INCL_H
-#define LOFAR_GPUPROC_OPENCL_GPU_INCL_H
-
-// OpenCL include option(s)
-#define __CL_ENABLE_EXCEPTIONS
-
-#if defined(__APPLE__) || defined(__MACOSX)
-# include <OpenCL/cl.hpp>
-#else
-# include <CL/cl.hpp>
-#endif
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/gpu_utils.cc b/RTCP/Cobalt/GPUProc/src/opencl/gpu_utils.cc
deleted file mode 100644
index 001816c6d931f17ba5367a3ee96fc613ef869754..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/gpu_utils.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-//# gpu_utils.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "gpu_utils.h"
-
-#include <cstdlib>
-#include <cstring>
-#include <iomanip> // std::setprecision()
-#include <fstream>
-#include <sstream>
-
-#include <Common/LofarLogger.h>
-#include <Common/SystemUtil.h>
-
-#include <GPUProc/global_defines.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    void createContext(cl::Context &context, std::vector<cl::Device> &devices)
-    {
-      const char *platformName = getenv("PLATFORM");
-
-#if defined __linux__
-      if (platformName == 0)
-#endif
-      platformName = "NVIDIA CUDA";
-      //platformName = "AMD Accelerated Parallel Processing";
-
-      cl_device_type type = CL_DEVICE_TYPE_DEFAULT;
-
-      const char *deviceType = getenv("TYPE");
-
-      if (deviceType != 0) {
-        if (strcmp(deviceType, "GPU") == 0)
-          type = CL_DEVICE_TYPE_GPU;
-        else if (strcmp(deviceType, "CPU") == 0)
-          type = CL_DEVICE_TYPE_CPU;
-        else
-          LOG_ERROR_STR("Unrecognized device type: " << deviceType);
-      }
-
-      const char *deviceName = getenv("DEVICE");
-
-      std::vector<cl::Platform> platforms;
-      cl::Platform::get(&platforms);
-
-      for (std::vector<cl::Platform>::iterator platform = platforms.begin(); platform != platforms.end(); platform++) {
-        LOG_INFO_STR("Platform profile: " << platform->getInfo<CL_PLATFORM_PROFILE>());
-        LOG_INFO_STR("Platform name: " << platform->getInfo<CL_PLATFORM_NAME>());
-        LOG_INFO_STR("Platform version: " << platform->getInfo<CL_PLATFORM_VERSION>());
-        LOG_INFO_STR("Platform extensions: " << platform->getInfo<CL_PLATFORM_EXTENSIONS>());
-      }
-
-      for (std::vector<cl::Platform>::iterator platform = platforms.begin(); platform != platforms.end(); platform++) {
-        if (platform->getInfo<CL_PLATFORM_NAME>() == platformName) {
-          platform->getDevices(type, &devices);
-
-          if (deviceName != 0)
-            for (std::vector<cl::Device>::iterator device = devices.end(); --device >= devices.begin(); )
-              if (device->getInfo<CL_DEVICE_NAME>() != deviceName)
-                devices.erase(device);
-
-          for (std::vector<cl::Device>::iterator device = devices.begin(); device != devices.end(); device++) {
-            LOG_INFO_STR("Device: " << device->getInfo<CL_DEVICE_NAME>());
-            LOG_INFO_STR("Max mem: " << device->getInfo<CL_DEVICE_MAX_MEM_ALLOC_SIZE>()/1024/1024 << " MByte");
-          }
-
-          cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)(*platform)(), 0 };
-          context = cl::Context(type, cps);
-          return;
-        }
-      }
-
-      LOG_FATAL_STR("Platform not found: " << platformName);
-      exit(1);
-    }
-
-
-    cl::Program createProgram(const Parset &ps, cl::Context &context, std::vector<cl::Device> &devices, const char *sources)
-    {
-      std::stringstream args;
-      args << "-cl-fast-relaxed-math";
-
-      std::vector<cl_context_properties> properties;
-      context.getInfo(CL_CONTEXT_PROPERTIES, &properties);
-
-      if (cl::Platform((cl_platform_id) properties[1]).getInfo<CL_PLATFORM_NAME>() == "NVIDIA CUDA") {
-        args << " -cl-nv-verbose";
-        args << " -cl-nv-opt-level=99";
-        //args << " -cl-nv-maxrregcount=63";
-        args << " -DNVIDIA_CUDA";
-      }
-
-      //if (devices[0].getInfo<CL_DEVICE_NAME>() == "GeForce GTX 680")
-      //args << " -DUSE_FLOAT4_IN_CORRELATOR";
-
-      args << " -I" << dirname(__FILE__);
-      args << " -DNR_BITS_PER_SAMPLE=" << ps.nrBitsPerSample();
-      args << " -DSUBBAND_BANDWIDTH=" << std::setprecision(7) << ps.subbandBandwidth() << 'f';
-      args << " -DNR_SUBBANDS=" << ps.nrSubbands();
-      args << " -DNR_CHANNELS=" << ps.nrChannelsPerSubband();
-      args << " -DNR_STATIONS=" << ps.settings.antennaFields.size();
-      args << " -DNR_SAMPLES_PER_CHANNEL=" << ps.nrSamplesPerChannel();
-      args << " -DNR_SAMPLES_PER_SUBBAND=" << ps.nrSamplesPerSubband();
-      args << " -DNR_BEAMS=" << ps.nrBeams();
-      args << " -DNR_TABS=" << ps.nrTABs(0);
-      args << " -DNR_COHERENT_STOKES=" << ps.nrCoherentStokes();
-      args << " -DNR_INCOHERENT_STOKES=" << ps.nrIncoherentStokes();
-      args << " -DCOHERENT_STOKES_TIME_INTEGRATION_FACTOR=" << ps.coherentStokesTimeIntegrationFactor();
-      args << " -DINCOHERENT_STOKES_TIME_INTEGRATION_FACTOR=" << ps.incoherentStokesTimeIntegrationFactor();
-      args << " -DNR_POLARIZATIONS=" << NR_POLARIZATIONS;
-      args << " -DNR_TAPS=" << NR_TAPS;
-      args << " -DNR_STATION_FILTER_TAPS=" << NR_STATION_FILTER_TAPS;
-
-      if (ps.delayCompensation())
-        args << " -DDELAY_COMPENSATION";
-
-      if (ps.correctBandPass())
-        args << " -DBANDPASS_CORRECTION";
-
-      args << " -DDEDISPERSION_FFT_SIZE=" << ps.dedispersionFFTsize();
-      return createProgram(context, devices, dirname(__FILE__).append("/").append(sources).c_str(), args.str().c_str());
-    }
-
-    cl::Program createProgram(cl::Context &context, std::vector<cl::Device> &devices, const char *sources, const char *args)
-    {
-      // Let the compiler read in the source file by passing an #include as source string.
-      std::stringstream cmd;
-      cmd << "#include \"" << std::string(sources) << '"' << std::endl;
-      cl::Program program(context, cmd.str());
-
-      try {
-        program.build(devices, args);
-        std::string msg;
-        program.getBuildInfo(devices[0], CL_PROGRAM_BUILD_LOG, &msg);
-
-        LOG_INFO(msg);
-      } catch (cl::Error &error) {
-        if (strcmp(error.what(), "clBuildProgram") == 0) {
-          std::string msg;
-          program.getBuildInfo(devices[0], CL_PROGRAM_BUILD_LOG, &msg);
-
-          LOG_FATAL(msg);
-          exit(1);
-        } else {
-          throw;
-        }
-      }
-
-#if 1
-      std::vector<size_t> binarySizes = program.getInfo<CL_PROGRAM_BINARY_SIZES>();
-#if 0
-      // cl::Program::getInfo<> cl.hpp broken
-      std::vector<char *> binaries = program.getInfo<CL_PROGRAM_BINARIES>();
-#else
-      std::vector<char *> binaries(binarySizes.size());
-
-      for (unsigned b = 0; b < binaries.size(); b++)
-        binaries[b] = new char[binarySizes[b]];
-
-      cl_int error = clGetProgramInfo(program(), CL_PROGRAM_BINARIES, binaries.size() * sizeof(char *), &binaries[0], 0);
-
-      if (error != CL_SUCCESS)
-        throw cl::Error(error, "clGetProgramInfo");  // FIXME: cleanup binaries[*]
-#endif
-
-      for (unsigned i = 0; i < 1 /*binaries.size()*/; i++) {
-        std::stringstream filename;
-        filename << sources << '-' << i << ".ptx";
-        std::ofstream(filename.str().c_str(), std::ofstream::binary).write(binaries[i], binarySizes[i]);
-      }
-
-#if 1
-      for (unsigned b = 0; b < binaries.size(); b++)
-        delete [] binaries[b];
-#endif
-#endif
-
-      return program;
-    }
-
-  } // namespace Cobalt
-} // namespace LOFAR
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/gpu_utils.h b/RTCP/Cobalt/GPUProc/src/opencl/gpu_utils.h
deleted file mode 100644
index 373618c0a9b0786d527cf3c7cc5785dd06c32451..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/gpu_utils.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//# gpu_utils.h
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_OPENCL_GPU_UTILS_H
-#define LOFAR_GPUPROC_OPENCL_GPU_UTILS_H
-
-#include <string>
-#include <vector>
-
-#include <CoInterface/Parset.h>
-
-#include "gpu_incl.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    void createContext(cl::Context &, std::vector<cl::Device> &);
-
-
-    cl::Program createProgram(const Parset &ps, cl::Context &context,
-                              std::vector<cl::Device> &devices,
-                              const char *sources);
-    // called by the above ("internal").
-    cl::Program createProgram(cl::Context &, std::vector<cl::Device> &,
-                              const char *sources, const char *args);
-
-  } // namespace Cobalt
-} // namespace LOFAR
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/gpu_wrapper.cc b/RTCP/Cobalt/GPUProc/src/opencl/gpu_wrapper.cc
deleted file mode 100644
index 586893ea35cf6c617f08470d11f9c2b647fbca2e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/gpu_wrapper.cc
+++ /dev/null
@@ -1,183 +0,0 @@
-//# gpu_wrapper.cc: OpenCL-specific wrapper classes for GPU types.
-//#
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "gpu_wrapper.h"
-
-#include <iostream>
-
-#include <Common/Exception.h>
-#include <Common/Thread/Mutex.h>
-
-// Use our own terminate handler
-LOFAR::Exception::TerminateHandler th(LOFAR::Cobalt::gpu::terminate);
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    namespace gpu
-    {
-      std::string errorMessage(cl_int error)
-      {
-        switch (error) {
-        case CL_SUCCESS:
-          return "Success";
-        case CL_DEVICE_NOT_FOUND:
-          return "Device not found";
-        case CL_DEVICE_NOT_AVAILABLE:
-          return "Device not available";
-        case CL_COMPILER_NOT_AVAILABLE:
-          return "Compiler not available";
-        case CL_MEM_OBJECT_ALLOCATION_FAILURE:
-          return "Memory object allocation failure";
-        case CL_OUT_OF_RESOURCES:
-          return "Out of resources";
-        case CL_OUT_OF_HOST_MEMORY:
-          return "Out of host memory";
-        case CL_PROFILING_INFO_NOT_AVAILABLE:
-          return "Profiling information not available";
-        case CL_MEM_COPY_OVERLAP:
-          return "Memory copy overlap";
-        case CL_IMAGE_FORMAT_MISMATCH:
-          return "Image format mismatch";
-        case CL_IMAGE_FORMAT_NOT_SUPPORTED:
-          return "Image format not supported";
-        case CL_BUILD_PROGRAM_FAILURE:
-          return "Program build failure";
-        case CL_MAP_FAILURE:
-          return "Map failure";
-        case CL_INVALID_VALUE:
-          return "Invalid value";
-        case CL_INVALID_DEVICE_TYPE:
-          return "Invalid device type";
-        case CL_INVALID_PLATFORM:
-          return "Invalid platform";
-        case CL_INVALID_DEVICE:
-          return "Invalid device";
-        case CL_INVALID_CONTEXT:
-          return "Invalid context";
-        case CL_INVALID_QUEUE_PROPERTIES:
-          return "Invalid queue properties";
-        case CL_INVALID_COMMAND_QUEUE:
-          return "Invalid command queue";
-        case CL_INVALID_HOST_PTR:
-          return "Invalid host pointer";
-        case CL_INVALID_MEM_OBJECT:
-          return "Invalid memory object";
-        case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR:
-          return "Invalid image format descriptor";
-        case CL_INVALID_IMAGE_SIZE:
-          return "Invalid image size";
-        case CL_INVALID_SAMPLER:
-          return "Invalid sampler";
-        case CL_INVALID_BINARY:
-          return "Invalid binary";
-        case CL_INVALID_BUILD_OPTIONS:
-          return "Invalid build options";
-        case CL_INVALID_PROGRAM:
-          return "Invalid program";
-        case CL_INVALID_PROGRAM_EXECUTABLE:
-          return "Invalid program executable";
-        case CL_INVALID_KERNEL_NAME:
-          return "Invalid kernel name";
-        case CL_INVALID_KERNEL_DEFINITION:
-          return "Invalid kernel definition";
-        case CL_INVALID_KERNEL:
-          return "Invalid kernel";
-        case CL_INVALID_ARG_INDEX:
-          return "Invalid argument index";
-        case CL_INVALID_ARG_VALUE:
-          return "Invalid argument value";
-        case CL_INVALID_ARG_SIZE:
-          return "Invalid argument size";
-        case CL_INVALID_KERNEL_ARGS:
-          return "Invalid kernel arguments";
-        case CL_INVALID_WORK_DIMENSION:
-          return "Invalid work dimension";
-        case CL_INVALID_WORK_GROUP_SIZE:
-          return "Invalid work group size";
-        case CL_INVALID_WORK_ITEM_SIZE:
-          return "Invalid work item size";
-        case CL_INVALID_GLOBAL_OFFSET:
-          return "Invalid global offset";
-        case CL_INVALID_EVENT_WAIT_LIST:
-          return "Invalid event wait list";
-        case CL_INVALID_EVENT:
-          return "Invalid event";
-        case CL_INVALID_OPERATION:
-          return "Invalid operation";
-        case CL_INVALID_GL_OBJECT:
-          return "Invalid OpenGL object";
-        case CL_INVALID_BUFFER_SIZE:
-          return "Invalid buffer size";
-        case CL_INVALID_MIP_LEVEL:
-          return "Invalid mip-map level";
-        default:
-          std::stringstream str;
-          str << "Unknown (" << error << ')';
-          return str.str();
-        }
-      }
-
-      void terminate()
-      {
-        // terminate() may be called recursively, so we need a mutex that can
-        // be locked recursively.
-        static Mutex mutex(Mutex::RECURSIVE);
-
-        // Make sure that one thread has exclusive access.
-        ScopedLock lock(mutex);
-
-        // We need to safe-guard against recursive calls. E.g., we were called
-        // twice, because a rethrow was attempted without an active exception.
-        static bool terminating = false;
-
-        if (!terminating) {
-          // This is the first time we were called. Make sure there was an active
-          // exception by trying to rethrow it. If that fails, std::terminate()
-          // will be called, again.
-          terminating = true;
-          try {
-            throw;
-          }
-          // Print detailed error information if a cl::Error was thrown.
-          catch (cl::Error& err) {
-            try {
-              std::cerr << "cl::Error: " << err.what() << ": "
-                        << errorMessage(err.err()) << std::endl;
-            } catch (...) {}
-          }
-          // Catch all other exceptions, otherwise std::terminate() will call
-          // abort() immediately.
-          catch (...) {}
-        }
-        // Let the LOFAR Exception::terminate handler take it from here.
-        Exception::terminate();
-      }
-
-    } // namespace gpu
-
-  } // namespace Cobalt
-
-} // namespace LOFAR
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/gpu_wrapper.h b/RTCP/Cobalt/GPUProc/src/opencl/gpu_wrapper.h
deleted file mode 100644
index 69a345053b9adb56cebb3932fec3a49ac4548c88..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/gpu_wrapper.h
+++ /dev/null
@@ -1,88 +0,0 @@
-//# gpu_wrapper.h: OpenCL-specific wrapper classes for GPU types.
-//#
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-// \file opencl/gpu_wrapper.h
-// GPU types on top of OpenCL.
-
-#ifndef LOFAR_GPUPROC_OPENCL_GPU_WRAPPER_H
-#define LOFAR_GPUPROC_OPENCL_GPU_WRAPPER_H
-
-#include <sstream>
-
-#include <Common/Exception.h>
-
-#include <GPUProc/gpu_wrapper.h> // GPUException
-#include "gpu_incl.h"
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    namespace gpu 
-    {
-      // Exception class for GPU errors.
-      EXCEPTION_CLASS(OpenCLException, GPUException);
-
-      // Return the OpenCL error string associated with \a errcode.
-      std::string errorMessage(cl_int errcode);
-
-      // The sole purpose of this function is to extract detailed error
-      // information if a cl::Error was thrown. Since we want the complete
-      // backtrace, we cannot simply try-catch in main(), because that would
-      // unwind the stack. The only option we have is to use our own terminate
-      // handler.
-      void terminate();
-    }
-  }
-}
-
-#if 0
-//# Don't know how useful this is, because you can't wrap constructors this way.
-//# If CL-exceptions are enabled the object will be defined inside the
-//# try-block of the macro; if they're disabled the object will be defined 
-//# inside the do-while block *and* you would need to check the error returned
-//# in one of the constructor arguments :(
-
-// Convenience macro to catch an OpenCL exception (cl::Error) and rethrow
-// it as a LOFAR OpenCLException.
-#if defined(__CL_ENABLE_EXCEPTIONS)
-# define CHECK_OPENCL_CALL(func)                                        \
-  try {                                                                 \
-    func;                                                               \
-  } catch (cl::Error &err) {                                            \
-    std::ostringstream oss;                                             \
-    oss << err.what() << ": " << LOFAR::Cobalt::gpu::errorMessage(err.err()); \
-    THROW (LOFAR::Cobalt::gpu::OpenCLException, oss.str());             \
-  }
-#else
-# define CHECK_OPENCL_CALL(func)                                        \
-  do {                                                                  \
-    cl_int result = func;                                               \
-    if (result != CL_SUCCESS) {                                         \
-      THROW (LOFAR::Cobalt::gpu::OpenCLException,                       \
-             #func << ": " << LOFAR::Cobalt::gpu::errorMessage(result)); \
-    }                                                                   \
-  } while(0)
-#endif
-#endif
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/src/opencl/math.cl b/RTCP/Cobalt/GPUProc/src/opencl/math.cl
deleted file mode 100644
index 9620d47ab97e22d9a345b077ed4a1add292f7e7c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/opencl/math.cl
+++ /dev/null
@@ -1,39 +0,0 @@
-//# math.cl
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-typedef float2 fcomplex;
-typedef float4 fcomplex2;
-typedef float8 fcomplex4;
-
-typedef char4 char_complex2;
-typedef short4 short_complex2;
-
-
-fcomplex cmul(fcomplex a, fcomplex b)
-{
-  return (fcomplex) (a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
-}
-
-
-fcomplex cexp(float ang)
-{
-  return (fcomplex) (native_cos(ang), native_sin(ang));
-}
-
diff --git a/RTCP/Cobalt/GPUProc/src/rtcp.cc b/RTCP/Cobalt/GPUProc/src/rtcp.cc
index 20ee60d73c7df4ad61964804ade48c73512ec12e..507f134ad52302c42bb2abf48e33df9bf6cfff0c 100644
--- a/RTCP/Cobalt/GPUProc/src/rtcp.cc
+++ b/RTCP/Cobalt/GPUProc/src/rtcp.cc
@@ -27,8 +27,6 @@
 #include <ctime>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <sys/resource.h>
-#include <sys/mman.h>
 #include <unistd.h>
 #include <omp.h>
 
@@ -36,11 +34,6 @@
 #include <vector>
 #include <iostream>
 
-#ifdef HAVE_LIBNUMA
-#include <numa.h>
-#include <numaif.h>
-#endif
-
 #include <mpi.h>
 #include <InputProc/Transpose/MPIUtil.h>
 
@@ -52,8 +45,10 @@
 #include <Common/SystemUtil.h>
 #include <Common/StringUtil.h>
 #include <Common/Thread/Trigger.h>
+#include <Common/Thread/Thread.h>
 #include <MessageBus/MessageBus.h>
 #include <MessageBus/ToBus.h>
+#include <MessageBus/Util.h>
 #include <MessageBus/Protocols/TaskFeedbackProcessing.h>
 #include <ApplCommon/PVSSDatapointDefs.h>
 #include <ApplCommon/StationInfo.h>
@@ -66,6 +61,7 @@
 #include <CoInterface/Stream.h>
 #include <CoInterface/SelfDestructTimer.h>
 #include <InputProc/SampleType.h>
+#include <InputProc/Delays/Delays.h>
 #include <InputProc/WallClockTime.h>
 #include <InputProc/Buffer/StationID.h>
 
@@ -76,7 +72,7 @@
 #include "Pipelines/Pipeline.h"
 #include "Storage/StorageProcesses.h"
 
-#include <GPUProc/cpu_utils.h>
+#include <CoInterface/cpu_utils.h>
 #include <GPUProc/SysInfoLogger.h>
 #include <GPUProc/Package__Version.h>
 #include <GPUProc/MPIReceiver.h>
@@ -112,6 +108,40 @@ static void usage(const char *argv0)
   cout << "  -h: print this message" << endl;
 }
 
+void ignore_sigpipe()
+{
+  struct sigaction sa;
+  sigemptyset(&sa.sa_mask);
+  sa.sa_flags = 0;
+  sa.sa_handler = SIG_IGN;
+  if (sigaction(SIGPIPE, &sa, NULL) < 0)
+    THROW_SYSCALL("sigaction(SIGPIPE, <SIG_IGN>)");
+}
+
+string GPUProc_PVSSPrefix(const Parset &ps, int cpuNr)
+{
+  const string hostName = myHostname(false);
+
+  // For GPUProc use boost::format to fill in the two conv specifications (%xx).
+  string fmtStr(createPropertySetName(PSN_COBALTGPU_PROC, "", ps.PVSS_TempObsName()));
+  format prFmt;
+  prFmt.exceptions(boost::io::no_error_bits); // avoid throw
+  prFmt.parse(fmtStr);
+  int cbmNodeNr = hostName.compare(0, sizeof("cbm") - 1, "cbm") == 0 ?
+                  atoi(hostName.c_str() + sizeof("cbm") - 1) : 0; // default 0 like atoi()
+  return str(prFmt % cbmNodeNr % cpuNr);
+}
+
+string InputProc_PVSSPrefix(const Parset &ps, const string &antennaFieldName) {
+  // For InputProc use boost::format to fill in one conv specifications (%xx).
+  string fmtStrInputProc(createPropertySetName(PSN_COBALT_STATION_INPUT,
+                                               "", ps.PVSS_TempObsName()));
+  format prFmtInputProc;
+  prFmtInputProc.exceptions(boost::io::no_error_bits); // avoid throw
+  prFmtInputProc.parse(fmtStrInputProc);
+  return str(prFmtInputProc % antennaFieldName);
+}
+
 int main(int argc, char **argv)
 {
   /*
@@ -146,12 +176,7 @@ int main(int argc, char **argv)
    */
 
   // Ignore SIGPIPE, as we handle disconnects ourselves
-  struct sigaction sa;
-  sigemptyset(&sa.sa_mask);
-  sa.sa_flags = 0;
-  sa.sa_handler = SIG_IGN;
-  if (sigaction(SIGPIPE, &sa, NULL) < 0)
-    THROW_SYSCALL("sigaction(SIGPIPE, <SIG_IGN>)");
+  ignore_sigpipe();
 
   // Make sure all time is dealt with and reported in UTC
   if (setenv("TZ", "UTC", 1) < 0)
@@ -163,10 +188,6 @@ int main(int argc, char **argv)
    * Initialise logger.
    */
 
-  // Set ${MPIRANK}, which is used by our log_prop file.
-  if (setenv("MPIRANK", str(format("%02d") % mpi.rank()).c_str(), 1) < 0)
-    THROW_SYSCALL("setenv(MPIRANK)");
-
   // Use LOG_*() for c-strings (incl cppstr.c_str()), and LOG_*_STR() for std::string.
   INIT_LOGGER("rtcp");
 
@@ -183,41 +204,43 @@ int main(int argc, char **argv)
   LOG_INFO("----- Reading Parset");
   Parset ps(argv[optind]);
 
+  // Start running us and all our threads at real time. SCHED_FIFO means the tasks will
+  // not be interrupted unless blocked by IO, queues, mutexes, etc. Also (SCHED_FIFO/SCHED_RR)
+  // tasks with higher priority can interrupt.
+  //
+  // Threads get priority 5 by default, and thus cannot interrupt each other.
+  // The vital threads (that deal with station input and polling MPI to make it progress) will get priority 10.
+  //Thread::ScopedPriority sp(ps.settings.realTime ? SCHED_FIFO : SCHED_OTHER, 5);
+
+  LOG_INFO("----- Determining NUMA bindings");
+
+  // If we are testing we do not want dependency on hardware specific cpu configuration
+  const bool do_numa_bind = mpi.rank() >= 0 && (size_t)mpi.rank() < ps.settings.nodes.size();
+  struct ObservationSettings::Node mynode;
+  if(do_numa_bind) {
+    mynode = ps.settings.nodes.at(mpi.rank());
+  } else {
+    LOG_WARN_STR("Rank " << mpi.rank() << " not present in node list -- using full machine");
+  }
+
+  LOG_INFO("----- Register at LogProcessor");
   // Send id string to the MAC Log Processor as context for further LOGs.
   // Also use it for MAC/PVSS data point logging as a key name prefix.
-  // For GPUProc use boost::format to fill in the two conv specifications (%xx).
-  string fmtStr(createPropertySetName(PSN_COBALTGPU_PROC, "", ps.PVSS_TempObsName()));
-  format prFmt;
-  prFmt.exceptions(boost::io::no_error_bits); // avoid throw
-  prFmt.parse(fmtStr);
-  string hostName = myHostname(false);
-  int cbtNodeNr = hostName.compare(0, sizeof("cbt") - 1, "cbt") == 0 ?
-                  atoi(hostName.c_str() + sizeof("cbt") - 1) : 0; // default 0 like atoi()
-  int cpuNr     = ps.settings.nodes.size() > size_t(mpi.rank()) ?
-                  ps.settings.nodes[mpi.rank()].cpu : 0; 
-  string mdKeyPrefix = str(prFmt % cbtNodeNr % cpuNr);
+  string mdKeyPrefix = GPUProc_PVSSPrefix(ps, do_numa_bind ? mynode.cpu : 0);
   LOG_INFO_STR("MACProcessScope: " << mdKeyPrefix);
   mdKeyPrefix.push_back('.'); // keys look like: "keyPrefix.subKeyName", some with a "[x]" appended.
 
   // Create mdLogger for monitoring (PVSS). We can already log(), but start() the event send thread
   // much later, after the pipeline creation (post-fork()), so we don't crash.
-  const string mdRegisterName = PST_COBALTGPU_PROC + boost::lexical_cast<string>(cpuNr) + ":" +
+  LOG_INFO("----- Setting up transport to PVSS Gateway");
+  const string hostName = myHostname(false);
+  const string mdRegisterName = PST_COBALTGPU_PROC + boost::lexical_cast<string>(do_numa_bind ? mynode.cpu : 0) + ":" +
                                 boost::lexical_cast<string>(ps.settings.observationID) + "@" + hostName;
   const string mdHostName = ps.getString("Cobalt.PVSSGateway.host", "");
 
   // Don't connect to PVSS for non-real-time observations -- they have no proper flow control
   MACIO::RTmetadata mdLogger(ps.settings.observationID, mdRegisterName, ps.settings.realTime ? mdHostName : "");
 
-  // Remove limits on pinned (locked) memory
-  struct rlimit unlimited = { RLIM_INFINITY, RLIM_INFINITY };
-  if (setrlimit(RLIMIT_MEMLOCK, &unlimited) < 0)
-  {
-    if (ps.settings.realTime)
-      THROW_SYSCALL("setrlimit(RLIMIT_MEMLOCK, unlimited)");
-    else
-      LOG_WARN("Cannot setrlimit(RLIMIT_MEMLOCK, unlimited)");
-  }
-
   /* Tuning parameters */
 
   // Number of seconds to schedule for the allocation of resources. That is,
@@ -245,19 +268,6 @@ int main(int argc, char **argv)
 
   setSelfDestructTimer(ps, rtcpTimeout);
 
-  /*
-   * Initialise OpenMP
-   */
-
-  LOG_INFO("----- Initialising OpenMP");
-
-  // Allow usage of nested omp calls
-  omp_set_nested(true);
-
-  // Allow OpenMP thread registration
-  OMPThread::init();
-  OMPThread::ScopedName sn("main");
-
   /*
    * INIT stage
    */
@@ -269,60 +279,41 @@ int main(int argc, char **argv)
     LOG_INFO_STR("output cluster = " << ps.settings.outputCluster);
   }
 
-  LOG_INFO("----- Initialising GPUs");
-
-  gpu::Platform platform;
-  LOG_INFO_STR("GPU platform " << platform.getName());
-  vector<gpu::Device> allDevices(platform.devices());
-
-  LOG_INFO("----- Initialising NUMA bindings");
-
-  // The set of GPUs we're allowed to use
-  vector<gpu::Device> devices;
-#if 1
-  // If we are testing we do not want dependency on hardware specific cpu configuration
-  // Just use all gpu's
-  if(mpi.rank() >= 0 && (size_t)mpi.rank() < ps.settings.nodes.size()) {
-    struct ObservationSettings::Node mynode = ps.settings.nodes.at(mpi.rank());
+  // Bind this process to our socket before any threads are created. This causes
+  // the binding to propagate to child threads.
+  LOG_INFO("----- Initialising NUMA CPU bindings");
 
+  if(do_numa_bind) {
     if (mynode.cpu != -1) {
       // set the processor affinity before any threads are created
-      setProcessorAffinity(mynode.cpu);
+      bindCPU(mynode.cpu, mynode.avoidCores);
+    } else {
+      LOG_INFO("Cannot bind CPU: cpu nr to bind to is set to -1");
     }
+  }
 
-#ifdef HAVE_LIBNUMA
-    if (mynode.cpu != -1 && numa_available() != -1) {
-      // force node + memory binding for future allocations
-      struct bitmask *numa_node = numa_allocate_nodemask();
-      numa_bitmask_clearall(numa_node);
-      numa_bitmask_setbit(numa_node, mynode.cpu);
-      numa_bind(numa_node);
-      numa_bitmask_free(numa_node);
+  LOG_INFO("----- Initialising NUMA MPI NIC bindings");
 
-      // only allow allocation on this node in case
-      // the numa_alloc_* functions are used
-      numa_set_strict(1);
+  if(do_numa_bind) {
+    // Select on the local NUMA InfiniBand interface (OpenMPI only, for now)
+    if (mynode.mpi_nic != "") {
+      LOG_DEBUG_STR("Binding MPI to interface " << mynode.mpi_nic);
+      mpi.bindNIC(mynode.mpi_nic);
+    }
+  }
 
-      // retrieve and report memory binding
-      numa_node = numa_get_membind();
-      vector<string> nodestrs;
-      for (size_t i = 0; i < numa_node->size; i++)
-        if (numa_bitmask_isbitset(numa_node, i))
-          nodestrs.push_back(str(format("%s") % i));
+  LOG_INFO("----- Initialising GPUs");
 
-      // migrate currently used memory to our node
-      numa_migrate_pages(0, numa_all_nodes_ptr, numa_node);
+  gpu::Platform platform;
+  LOG_INFO_STR("GPU platform " << platform.getName());
+  vector<gpu::Device> allDevices(platform.devices());
 
-      numa_bitmask_free(numa_node);
+  LOG_INFO("----- Initialising NUMA GPU bindings");
 
-      LOG_DEBUG_STR("Bound to memory on nodes " << nodestrs);
-    } else {
-      LOG_INFO("Cannot bind memory: cpu nr to bind to is set to -1 or libnuma reports NUMA is not available");
-    }
-#else
-    LOG_WARN("Cannot bind memory (no libnuma support)");
-#endif
+  // The set of GPUs we're allowed to use
+  vector<gpu::Device> devices;
 
+  if(do_numa_bind) {
     // derive the set of gpus we're allowed to use
     for (size_t i = 0; i < mynode.gpus.size(); ++i) {
       ASSERTSTR(mynode.gpus[i] < allDevices.size(), "Request to use GPU #" << mynode.gpus[i] << ", but found only " << allDevices.size() << " GPUs");
@@ -331,19 +322,7 @@ int main(int argc, char **argv)
 
       devices.push_back(d);
     }
-
-    // Select on the local NUMA InfiniBand interface (OpenMPI only, for now)
-    if (mynode.mpi_nic != "") {
-      LOG_DEBUG_STR("Binding MPI to interface " << mynode.mpi_nic);
-
-      if (setenv("OMPI_MCA_btl_openib_if_include", mynode.mpi_nic.c_str(), 1) < 0)
-        THROW_SYSCALL("setenv(OMPI_MCA_btl_openib_if_include)");
-    }
   } else {
-#else
-  {
-#endif
-    LOG_WARN_STR("Rank " << mpi.rank() << " not present in node list -- using full machine");
     devices = allDevices;
   }
 
@@ -353,17 +332,6 @@ int main(int argc, char **argv)
                  devices[i].getComputeCapabilityMinor() <<
                  " global memory: " << (devices[i].getTotalGlobalMem() / 1024 / 1024) << " Mbyte");
 
-  // Bindings are done -- Lock everything in memory
-  if (mlockall(MCL_CURRENT | MCL_FUTURE) < 0)
-  {
-    if (ps.settings.realTime)
-      THROW_SYSCALL("mlockall");
-    else
-      LOG_WARN("Cannot mlockall(MCL_CURRENT | MCL_FUTURE)");
-  } else {
-    LOG_DEBUG("All memory is now pinned.");
-  }
-
   LOG_INFO("----- Initialising Pipeline");
 
   // Distribute the subbands over the MPI ranks
@@ -401,28 +369,70 @@ int main(int argc, char **argv)
 
   // After pipeline creation (post-fork()), allow creation of a thread to send
   // data points for monitoring (PVSS).
-  mdLogger.start();
+  //mdLogger.start();
 
   // Only ONE host should start the Storage processes
   SmartPtr<StorageProcesses> storageProcesses;
 
   if (mpi.rank() == 0) {
     LOG_INFO("----- Starting OutputProc");
+
+    // NOTE: This fork()s.
     storageProcesses = new StorageProcesses(ps, "");
   }
 
   /*
    * Initialise MPI (we are done forking)
    */
+  LOG_INFO("----- Calling MPI_Init_thread");
   mpi.init(argc, argv);
 
-  // Periodically log system information
-  SysInfoLogger siLogger(ps.settings.startTime, ps.settings.stopTime);
+  LOG_INFO("----- Initialising OpenMP");
+
+  // Allow usage of nested omp calls
+  omp_set_nested(true);
+
+  // Allow OpenMP thread registration
+  OMPThread::init(); // Call AFTER MPI_Init, since this sets a signal handler which MPI_Init would override
+  OMPThread::ScopedName sn("main");
+
+  // Migrate all moveable and future memory to our socket.
+  //
+  // NOTE: This restricts the freedom for memory allocations to our socket.
+  //       MPI_Init still wants this freedom, so we do this after.
+  LOG_INFO("----- Initialising NUMA memory bindings");
+
+  if(do_numa_bind) {
+    if (mynode.cpu != -1) {
+      bindMemory(mynode.cpu);
+    } else {
+      LOG_INFO("Cannot bind memory: cpu nr to bind to is set to -1");
+    }
+  }
+
+  // Bindings are done -- Lock everything in memory (prevents swapping)
+  try {
+    unlimitedLockedMemory();
+    lockAllMemory();
+  } catch(SystemCallException &ex) {
+    if (ps.settings.realTime) throw;
+    LOG_WARN_STR("Cannot lock all memory: " << ex.what());
+  }
+
+  // IERS table information
+  struct Delays::IERS_tablestats stats = Delays::get_IERS_tablestats();
+
+  LOG_INFO_STR("Using IERS table " << stats.realpath
+            << ", last entry is " << TimeDouble::toString(stats.last_entry_timestamp, false)
+            << ", table written on " << TimeDouble::toString(stats.last_fs_modification, false));
 
   /*
    * RUN stage
    */
 
+  // Periodically log system information
+  SysInfoLogger siLogger(ps.settings.startTime, ps.settings.stopTime);
+
   LOG_INFO("===== LAUNCH =====");
 
   LOG_INFO_STR("Processing subbands " << subbandDistribution[mpi.rank()]);
@@ -438,6 +448,21 @@ int main(int argc, char **argv)
        * COMMAND THREAD
        */
 
+      // The CommandThread is used on rank 0 to receive commands while
+      // running, typically through a pipe.
+      //
+      // NOTE: rank 0 is the first node in the run, NOT (necessarily) the node running mpirun
+      //
+      // It receives the early abort command ("stop") as its primary function,
+      // in which case we gracefully shut down.
+      //
+      // Note that the CommandThread is needed to notify rtcp, as MPI cannot be
+      // relied on to:
+      //   * Propagate signals sent to mpirun to us (OpenMPI won't at all)
+      //   * Propagate stdin reliably from mpirun to us:
+      //       * Many processes started before mpirun read from stdin, spoiling or blocking our channel
+      //       * (Open)MPI won't reopen stdin after it is closed by the first client to send commands
+
       OMPThread::ScopedName sn("CommandThr bcast");
 
       if (mpi.rank() == 0) {
@@ -468,8 +493,7 @@ int main(int argc, char **argv)
        * THE OBSERVATION
        */
 
-      OMPThread::ScopedName sn("stations");
-
+      OMPThread::ScopedName sn("observation");
 
       if (ps.settings.realTime) {
         // Wait just before the obs starts to allocate resources,
@@ -487,43 +511,50 @@ int main(int argc, char **argv)
         {
           OMPThread::ScopedName sn("stations");
 
-          // Read and forward station data over MPI
-          #pragma omp parallel for num_threads(ps.settings.antennaFields.size())
+          // Construct list of stations to receive with this process
+          struct receivingAntennaField {
+            size_t idx;
+            struct StationID id;
+          };
+
+          vector<struct receivingAntennaField> receivingAntennaFields;
+
           for (size_t stat = 0; stat < ps.settings.antennaFields.size(); ++stat) 
           {       
-            OMPThread::ScopedName sn(str(format("%s main") % ps.settings.antennaFields.at(stat).name));
-
-            // Determine if this station should start a pipeline for station..
             const struct StationID stationID(
               StationID::parseFullFieldName(
               ps.settings.antennaFields.at(stat).name));
             const StationNodeAllocation allocation(stationID, ps, mpi.rank(), mpi.size());
 
-            if (!allocation.receivedHere()) 
-            {// Station is not sending from this node, skip          
-              continue;
+            if (allocation.receivedHere()) 
+            {
+              struct receivingAntennaField r;
+
+              r.idx = stat;
+              r.id = stationID;
+              receivingAntennaFields.push_back(r);
             }
+          }
 
-            const string antennaFieldName = stationID.name();
+          // Read and forward station data over MPI
+          #pragma omp parallel for num_threads(receivingAntennaFields.size())
+          for (size_t i = 0; i < receivingAntennaFields.size(); i++) 
+          {
+            const struct receivingAntennaField &r = receivingAntennaFields[i];
+            OMPThread::ScopedName sn(str(format("%s main") % r.id.name()));
 
             // For InputProc use the GPUProc mdLogger (same process), but our own key prefix.
-            // For InputProc use boost::format to fill in one conv specifications (%xx).
             // Since InputProc is inside GPUProc, don't inform the MAC Log Processor.
-            string fmtStrInputProc(createPropertySetName(PSN_COBALT_STATION_INPUT,
-                                                         "", ps.PVSS_TempObsName()));
-            format prFmtInputProc;
-            prFmtInputProc.exceptions(boost::io::no_error_bits); // avoid throw
-            prFmtInputProc.parse(fmtStrInputProc);
-            string mdKeyPrefixInputProc = str(prFmtInputProc % antennaFieldName);
+            string mdKeyPrefixInputProc = InputProc_PVSSPrefix(ps, r.id.name());
             mdKeyPrefixInputProc.push_back('.'); // keys look like: "keyPrefix.subKeyName"
 
             mdLogger.log(mdKeyPrefixInputProc + PN_CSI_OBSERVATION_NAME,
                          boost::lexical_cast<string>(ps.settings.observationID));
             mdLogger.log(mdKeyPrefixInputProc + PN_CSI_NODE, hostName);
-            mdLogger.log(mdKeyPrefixInputProc + PN_CSI_CPU,  cpuNr);
+            mdLogger.log(mdKeyPrefixInputProc + PN_CSI_CPU,  do_numa_bind ? mynode.cpu : 0);
 
 
-            sendInputToPipeline(ps, stat, subbandDistribution, mpi.rank(),
+            sendInputToPipeline(ps, r.idx, subbandDistribution, mpi.rank(),
                                 mdLogger, mdKeyPrefixInputProc, &stopSwitch);
           }
         }
@@ -550,6 +581,7 @@ int main(int argc, char **argv)
       }
 
       if (mpi.rank() == 0) {
+        LOG_DEBUG_STR("Stopping CommandThread");
         commandThread->stop();
       }
     }
@@ -585,7 +617,7 @@ int main(int argc, char **argv)
     storageProcesses->stop(time(0) + outputProcTimeout);
 
     // send processing feedback
-    ToBus bus("lofar.task.feedback.processing");
+    ToBus bus("otdb.task.feedback.processing", broker_feedback());
 
     LTAFeedback fb(ps.settings);
 
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/CobaltVersions.sh b/RTCP/Cobalt/GPUProc/src/scripts/CobaltVersions.sh
index 4e0cfe9cdcfa6267e143e2f0a01d8f1134a8b800..3e24f5fe4f5927a21a81eb6bbc5670963bd0bbb1 100755
--- a/RTCP/Cobalt/GPUProc/src/scripts/CobaltVersions.sh
+++ b/RTCP/Cobalt/GPUProc/src/scripts/CobaltVersions.sh
@@ -1,7 +1,6 @@
 #!/bin/bash
 
 GET_VERSION=0
-GET_ALL_VERSIONS=0
 SET_VERSION=""
 LIST_VERSIONS=0
 
@@ -10,45 +9,21 @@ function error() {
   exit 1
 }
 
-if [ -z "$HOSTS" ]; then
-  case `hostname` in
-    cbt001|cbt002|cbt003|cbt004|cbt005|cbt006|cbt007|cbt008)
-      # Production system -- switch test system as well, in case we use cbm009!
-      HOSTS="cbm001 cbm002 cbm003 cbm004 cbm005 cbm006 cbm007 cbm008 cbm009"
-      ;;
-
-    cbt009)
-      # Test system
-      HOSTS="cbm009"
-      ;;
-
-    *)
-      echo "WARNING: Cannot derive \$HOSTS variable. Will only operate on localhost"
-      HOSTS="localhost"
-      ;;
-  esac
-fi
-
 function usage() {
-  echo "$0 [-l] [-g] [-G] [-s VERSION]"
+  echo "$0 [-l] [-g] [-s VERSION]"
   echo ""
-  echo "  -l            List available Cobalt versions (localhost)"
-  echo "  -g            Get active Cobalt version (localhost)"
-  echo "  -G            Get active Cobalt version on each Cobalt node (\$HOSTS)"
-  echo "  -s VERSION    Set active Cobalt version (\$HOSTS)"
-  echo ""
-  echo "\$HOSTS is set to '$HOSTS'"
+  echo "  -l            List available Cobalt versions"
+  echo "  -g            Get active Cobalt version"
+  echo "  -s VERSION    Set active Cobalt version"
   exit 1
 }
 
-while getopts "hgGls:" opt; do
+while getopts "hgls:" opt; do
   case $opt in
     h)  usage
         ;;
     g)  GET_VERSION=1
         ;;
-    G)  GET_ALL_VERSIONS=1
-        ;;
     l)  LIST_VERSIONS=1
         ;;
     s)  SET_VERSION="$OPTARG"
@@ -61,7 +36,7 @@ while getopts "hgGls:" opt; do
 done
 [ $OPTIND -eq 1 ] && usage
 
-COBALT_VERSIONS_DIR=/localhome/lofar/lofar_versions
+COBALT_VERSIONS_DIR=/opt/lofar-versions
 
 [ -d "$COBALT_VERSIONS_DIR" ] || error "Directory not found: $COBALT_VERSIONS_DIR"
 
@@ -77,24 +52,21 @@ if [ $GET_VERSION -eq 1 ]; then
   echo "$CURRENT_VERSION"
 fi
 
-# Get current Cobalt version on ALL hosts
-if [ $GET_ALL_VERSIONS -eq 1 ]; then
-  for HOST in $HOSTS; do
-    echo -n "$HOST: "
-    ssh $HOST "readlink -f /opt/lofar | awk -F/ '{ print $NF; }'" 2>/dev/null
-  done
-fi
-
 # Set current Cobalt version
 if [ -n "$SET_VERSION" ]; then
   echo "Switching Cobalt to $SET_VERSION"
 
   function set_version {
     VERSION="$1"
-    for HOST in $HOSTS; do
-      echo "$HOST"
-      ssh $HOST "[ -d \"${COBALT_VERSIONS_DIR}/${VERSION}\" ] && ln -sfT \"${COBALT_VERSIONS_DIR}/${VERSION}\" /localhome/lofarsystem/lofar/current" || return 1
-    done
+
+    # Don't create loops
+    [ $VERSION == current ] && return 1
+
+    # Don't activate non-existing releases
+    [ -d "${COBALT_VERSIONS_DIR}/${VERSION}" ] || return 1
+
+    # Move symlink, activating selected version
+    clush -g all -S ln -sfT "${COBALT_VERSIONS_DIR}/${VERSION}" "${COBALT_VERSIONS_DIR}/current" || return 1
 
     return 0
   }
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/Cobalt_build.sh b/RTCP/Cobalt/GPUProc/src/scripts/Cobalt_build.sh
deleted file mode 100755
index 17a61c87694e1a38a990057bda9fa9c127253dd8..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/src/scripts/Cobalt_build.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-# Build Online_Cobalt for later production roll-out to cbt nodes and upload archive to NEXUS.
-#
-# $Id$
-
-# location of the file in the NEXUS
-NEXUS_URL=https://support.astron.nl/nexus/content/repositories/releases/nl/astron/lofar/cobalt/${RELEASE_NAME}.ztar
-if [ "${RELEASE_NAME}" = "" ]; then
-  echo "ERROR: RELEASE_NAME (branch name) is not set or empty. Needed to create archive and upload to NEXUS"
-  exit 1
-fi
-
-BRANCH=${RELEASE_NAME}
-
-# Update or check out branch.
-cd /globalhome/lofarbuild/lofar/lofar_versions || exit 1
-if svn info "$BRANCH/LOFAR" 2> /dev/null | grep LOFAR > /dev/null; then
-  svn up "$BRANCH/LOFAR" || exit 1
-else
-  svn co "https://svn.astron.nl/LOFAR/branches/$BRANCH" "$BRANCH/LOFAR" || exit 1
-fi
-
-# Configure and build.
-cd $BRANCH && rm -rf gnu_opt && mkdir gnu_opt && cd gnu_opt &&
-  cmake -DBUILD_PACKAGES=Online_Cobalt "-DCMAKE_INSTALL_PREFIX=/localhome/lofar/lofar_versions/$BRANCH" ../LOFAR &&
-  make -j 16 &&
-  make install "DESTDIR=/globalhome/lofarbuild/lofar/lofar_versions/$BRANCH" || exit 1
-
-# Tar the localhome directory and upload archive to the NEXUS content server.
-tar -czf "${BRANCH}.ztar" localhome &&
-  curl --insecure --upload-file "${BRANCH}.ztar" -u upload:upload "${NEXUS_URL}"
-
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/Cobalt_install.sh b/RTCP/Cobalt/GPUProc/src/scripts/Cobalt_install.sh
index cfe0fd0969094091e4180a589555d71460c670bf..77650bebd398e29984b82380441feb7a81dbb2d9 100755
--- a/RTCP/Cobalt/GPUProc/src/scripts/Cobalt_install.sh
+++ b/RTCP/Cobalt/GPUProc/src/scripts/Cobalt_install.sh
@@ -5,63 +5,54 @@
 #
 # $Id$
 
-username=lofarbuild
-if [ "$USER" != "$username" ]; then
-  echo "ERROR: script must be run as $username"
-  exit 1
-fi
-unset username
-
 # location of the file in the NEXUS
 if [ "${RELEASE_NAME}" = "" ]; then
   echo "ERROR: RELEASE_NAME is not set or empty. Needed to download archive to install"
   exit 1
 fi
 
+FILENAME=Online_Cobalt_${RELEASE_NAME}.ztar
+
 if [[ "${RELEASE_NAME}" == *"Release"* ]]; then
-  NEXUS_URL=https://support.astron.nl/nexus/content/repositories/releases/nl/astron/lofar/${RELEASE_NAME}/Online_Cobalt_${RELEASE_NAME}.ztar
+  NEXUS_URL=https://support.astron.nl/nexus/content/repositories/releases/nl/astron/lofar/${RELEASE_NAME}/${FILENAME}
 else
-  NEXUS_URL=https://support.astron.nl/nexus/content/repositories/branches/nl/astron/lofar/${RELEASE_NAME}/Online_Cobalt_${RELEASE_NAME}.ztar
+  NEXUS_URL=https://support.astron.nl/nexus/content/repositories/branches/nl/astron/lofar/${RELEASE_NAME}/${FILENAME}
 fi
 
-for HOST in ${HOSTS:-cbm001 cbm002 cbm003 cbm004 cbm005 cbm006 cbm007 cbm008 cbm009}; do
-  echo "ssh-ing to node $HOST"
+# Download archive from NEXUS. -N: clobber existing files
+wget -N --tries=3 --no-check-certificate --user=macinstall --password=macinstall "${NEXUS_URL}" -O /tmp/${FILENAME} || exit 1
 
-  # Escape double quotes below the following line!
-  ssh $HOST "
-  pwd
+# The full pathnames are in the tar file, so unpack from root dir.
+# -m: don't warn on timestamping /localhome
+cd / && tar --no-overwrite-dir -zxvmf /tmp/${FILENAME} || exit 1
 
-  # Create temp location for incoming tar file
-  dl_dir=/localhome/lofarbuild/incoming
-  mkdir -p \$dl_dir && cd \$dl_dir || exit 1
+# Remove tarball
+rm -f /tmp/${FILENAME}
 
-  # Download archive from NEXUS. -N: clobber existing files
-  wget -N --tries=3 --no-check-certificate --user=macinstall --password=macinstall \"${NEXUS_URL}\" || exit 1
+#
+# Post-install
+#
+
+cd /opt/lofar-versions/${RELEASE_NAME} || exit 1
 
-  # The full pathnames are in the tar file, so unpack from root dir.
-  # -m: don't warn on timestamping /localhome
-  cd / && tar -zxvmf \"/localhome/lofarbuild/incoming/Online_Cobalt_${RELEASE_NAME}.ztar\" || exit 1
+# Sym link installed var/ to common location.
+ln -sfT ~lofarsys/lofar-userdata/var var
 
-  # Remove tarball
-  rm \"/localhome/lofarbuild/incoming/Online_Cobalt_${RELEASE_NAME}.ztar\"
+# Sym link installed etc/parset-additions.d/override to common location.
+ln -sfT ~lofarsys/lofar-userdata/parset-overrides etc/parset-additions.d/override
 
-  # Sym link installed var/ to common location.
-  cd \"/localhome/lofar/lofar_versions/${RELEASE_NAME}\" &&
-    ln -sfT /localhome/lofarsystem/lofar/var var
+# Sym link installed var/ to NFS location.
+ln -sfT /opt/shared/lofar-userdata nfs
 
-  # Sym link installed etc/parset-additions.d/override to common location.
-  cd \"/localhome/lofar/lofar_versions/${RELEASE_NAME}\" &&
-    ln -sfT /localhome/lofarsystem/lofar/parset-overrides etc/parset-additions.d/override
 
-  # Set capabilities so our soft real-time programs can elevate prios.
-  #
-  # cap_sys_nice: allow real-time priority for threads
-  # cap_ipc_lock: allow app to lock in memory (prevent swap)
-  # cap_net_raw:  allow binding sockets to NICs
-  OUTPUTPROC_CAPABILITIES='cap_sys_nice,cap_ipc_lock'
-  sudo /sbin/setcap \"\${OUTPUTPROC_CAPABILITIES}\"=ep bin/outputProc || true
-  sudo /sbin/setcap \"\${OUTPUTPROC_CAPABILITIES}\"=ep bin/TBB_Writer || true
-  RTCP_CAPABILITIES='cap_net_raw,cap_sys_nice,cap_ipc_lock'
-  sudo /sbin/setcap \"\${RTCP_CAPABILITIES}\"=ep bin/rtcp
-  " || exit 1
-done
+# Set capabilities so our soft real-time programs can elevate prios.
+#
+# cap_sys_nice: allow real-time priority for threads
+# cap_ipc_lock: allow app to lock in memory (prevent swap)
+# cap_net_raw:  allow binding sockets to NICs
+OUTPUTPROC_CAPABILITIES='cap_sys_nice,cap_ipc_lock'
+sudo /sbin/setcap "${OUTPUTPROC_CAPABILITIES}"=ep bin/outputProc || true
+sudo /sbin/setcap "${OUTPUTPROC_CAPABILITIES}"=ep bin/TBB_Writer || true
+RTCP_CAPABILITIES='cap_net_raw,cap_sys_nice,cap_ipc_lock'
+sudo /sbin/setcap "${RTCP_CAPABILITIES}"=ep bin/rtcp
+
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/bw_monitor.sh b/RTCP/Cobalt/GPUProc/src/scripts/bw_monitor.sh
index 3c68c5ad8310db6b91dc186db93d7a3775e29a9a..98f690f38c80a2d173457d621322582324228bd5 100755
--- a/RTCP/Cobalt/GPUProc/src/scripts/bw_monitor.sh
+++ b/RTCP/Cobalt/GPUProc/src/scripts/bw_monitor.sh
@@ -8,7 +8,7 @@ function transfer_balance {
   #
   # cobaltnr ethnr timestamp recv send
   CBMNR="$1"
-  ssh cbm00"$CBMNR" ifconfig 2>/dev/null | perl -ne '
+  ssh cbm2"$CBMNR" ifconfig 2>/dev/null | perl -ne '
     # monitor eth2..5
     $eth = $1 if /^eth([2345])/;
     next if not $eth;
@@ -27,7 +27,7 @@ function transfer_balance {
 
 function full_balance {
   # The Cobalt nodes to monitor
-  CBMNRS="1 2 3 4 5 6 7 8"
+  CBMNRS="01 02 03 04 05 06 07 08 09 10 11 12 13"
 
   echo "# ----------------------------------------------------------------"
   echo "# cobalt-nr eth-nr timestamp rx-bytes tx-bytes"
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/cobaltswitch b/RTCP/Cobalt/GPUProc/src/scripts/cobaltswitch
index fef07c95efb305ac6ec17c3adbd7c794c6048cfd..8fb64abf3ff80607753659a9a90c471f4bf37933 100755
--- a/RTCP/Cobalt/GPUProc/src/scripts/cobaltswitch
+++ b/RTCP/Cobalt/GPUProc/src/scripts/cobaltswitch
@@ -63,11 +63,11 @@ if [ "$NEW_MODE" != "" ]; then
           echo "Cobalt.Feedback.host = ccu099.control.lofar"
           echo "Cobalt.FinalMetaDataGatherer.database.host = sasdbtest.control.lofar"
           echo ""
-          echo "# Use only cbt009 to observe"
-          echo "Cobalt.Nodes = [cbt009_0, cbt009_1]"
+          echo "# Use only cbt206 to observe"
+          echo "Cobalt.Nodes = [cbt206_0, cbt206_1]"
           echo ""
           echo "# Accept stations on any interface"
-          cat $LOFARROOT/etc/parset-additions.d/default/StationStreams.parset | grep "RSP.ports" | sed 's/udp:[^:]*:/udp:0:/g'
+          cat $LOFARROOT/etc/parset-additions.d/default/StationStreams.parset | grep "RSP.sources" | sed 's/udp:[^:]*:/udp:0:/g'
           ) > $OVERRIDE_PARSET || error "Cannot create override file"
           echo "Cobalt is now in test mode"
           ;;
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/record_raw_data.sh b/RTCP/Cobalt/GPUProc/src/scripts/record_raw_data.sh
index fc5f4b44de4de364a99595066768ca726a2461a2..17fea8f5b9a763ae92140d3be58091bc7af3ef58 100755
--- a/RTCP/Cobalt/GPUProc/src/scripts/record_raw_data.sh
+++ b/RTCP/Cobalt/GPUProc/src/scripts/record_raw_data.sh
@@ -12,7 +12,7 @@
 # 1. Define an observation in OTDB.
 # 2. Disable Cobalt, by either:
 #      a. removing OnlineControl from the VIC tree
-#      b. moving/disabling cbm001:/opt/lofar/bin/startBGL.sh
+#      b. moving/disabling cbm2head:/opt/lofar/bin/startBGL.sh
 # 3. Adjust the following parameters in this script:
 #      a. NAME, used as an ID in the file names that will be created
 #      b. FILTERPARAMS (# subbands/board, start time, stop time)
@@ -216,7 +216,7 @@ do
     echo ssh $HOST \"nice -n -20 numactl --cpunodebind=$CPU --membind=$CPU $LOFARROOT/bin/filterRSP -i $INSTREAM -o $OUTSTREAM "$FILTERPARAMS" \" "&" >> record-cobalt.sh
   done
 
-  echo "PIC.Core.$s.RSP.ports = [$OBS_INSTREAMS]" >> replay.parset
+  echo "PIC.Core.$s.RSP.sources = [$OBS_INSTREAMS]" >> replay.parset
 done
 
 # At the end of all ssh commands, wait for all of them to finish
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/runObservation.sh b/RTCP/Cobalt/GPUProc/src/scripts/runObservation.sh
index 8f6257c5df433c97ace82c9813a5711d1f47fcd1..a6a3e26e69895c67e6388583de732bb01ddc6373 100755
--- a/RTCP/Cobalt/GPUProc/src/scripts/runObservation.sh
+++ b/RTCP/Cobalt/GPUProc/src/scripts/runObservation.sh
@@ -95,13 +95,16 @@ ADD_BROKENANTENNAINFO=1
 # Parameters to pass to mpirun
 MPIRUN_PARAMS=""
 
+# Pipe through which to send commands to the run
+COMMAND_PIPE=""
+
 # Parameters to pass to rtcp
 RTCP_PARAMS=""
 
 # ******************************
 # Parse command-line options
 # ******************************
-while getopts ":ABCFP:dl:o:px:" opt; do
+while getopts ":ABCFP:dl:o:px:c:" opt; do
   case $opt in
       A)  AUGMENT_PARSET=0
           ;;
@@ -113,10 +116,12 @@ while getopts ":ABCFP:dl:o:px:" opt; do
           ;;
       P)  PIDFILE="$OPTARG"
           ;;
+      c)  COMMAND_PIPE="$OPTARG"
+          ;;
       d)  DUMMY_RUN=true
           ;;
       l)  FORCE_LOCALHOST=1
-          MPIRUN_PARAMS="$MPIRUN_PARAMS -np $OPTARG"
+          NRPROCS_LOCALHOST=$OPTARG
           ;;
       o)  EXTRA_PARSET_KEYS="${EXTRA_PARSET_KEYS}${OPTARG}\n"
           ;;
@@ -178,7 +183,7 @@ rm -f $FEEDBACK_FILE
 
 if [ "$AUGMENT_PARSET" -eq "1" ]
 then
-  AUGMENTED_PARSET=$LOFARROOT/var/run/rtcp-$OBSID.parset
+  AUGMENTED_PARSET=$LOFARROOT/nfs/parset/rtcp-$OBSID.parset
 
   # Add static keys
   # Ignore sneaky .cobalt/ parset overrides in production (lofarsys).
@@ -248,6 +253,18 @@ then
   echo -e "$EXTRA_PARSET_KEYS" >> $PARSET
 fi
 
+# Create the command pipe to control the run
+if [ -n "$COMMAND_PIPE" ]; then
+  COMMAND_HOST=`getCobaltHosts -C $PARSET`
+  echo "[cobalt] Create command pipe $COMMAND_PIPE on host $COMMAND_HOST"
+
+  timeout 60s ssh $COMMAND_HOST "[ -e $COMMAND_PIPE ] && rm -f $COMMAND_PIPE"
+  timeout 60s ssh $COMMAND_HOST "mkfifo -m 0660 $COMMAND_PIPE"
+
+  # Instruct rtcp where to look
+  echo -e "Cobalt.commandStream=file:$COMMAND_PIPE" >> $PARSET
+fi
+
 # ************************************
 # Start outputProcs on receiving nodes
 # ***********************************
@@ -267,20 +284,20 @@ if $SLURM; then
 
   # Allocate resources
   # TODO: Start outputProc here
-  ssh $HEADNODE srun -N $NRCOMPUTENODES -c 1 --job-name=$OBSID bash -c 'while sleep 1; do :; done' &
+  ssh -o StrictHostKeyChecking=no $HEADNODE srun -N $NRCOMPUTENODES -c 1 --job-name=$OBSID bash -c 'while sleep 1; do :; done' &
 
   # Wait for allocation
-  while [ "`ssh $HEADNODE sacct --starttime=now --noheader --parsable2 --format=state --name=$OBSID | tail -n 1`" != "RUNNING" ]; do sleep 1; done
+  while [ "`ssh -o StrictHostKeyChecking=no $HEADNODE sacct --starttime=now --noheader --parsable2 --format=state --name=$OBSID | tail -n 1`" != "RUNNING" ]; do sleep 1; done
 
   # Obtain node list
-  NODE_LIST="`ssh $HEADNODE sacct --starttime=now --noheader --parsable2 --format=nodelist --name=$OBSID | tail -n 1`"
+  NODE_LIST="`ssh -o StrictHostKeyChecking=no $HEADNODE sacct --starttime=now --noheader --parsable2 --format=nodelist --name=$OBSID | tail -n 1`"
 
   # Expand node list into something usable
   # TODO: move ".cep4" to cluster model
-  NODE_LIST="`ssh $HEADNODE scontrol show hostnames $NODE_LISTi | awk '{ print $1 ".cep4"; }'`"
+  NODE_LIST="`ssh -o StrictHostKeyChecking=no $HEADNODE scontrol show hostnames $NODE_LISTi | awk '{ print $1 ".cep4"; }'`"
 else
   # Derive host list from parset
-  NODE_LIST=$(getOutputProcHosts $PARSET)
+  NODE_LIST=$(getCobaltHosts -O $PARSET)
 fi
 
 # Replace any cluster-name place holders in the locations keys
@@ -297,7 +314,7 @@ if $GLOBALFS; then
   generate_globalfs_locations.py --cluster "$CLUSTER_NAME" --hosts "$POSSIBLE_NODES" < "$PARSET.generate_globalfs" > "$PARSET"
 
   # Derive updated host list from parset
-  NODE_LIST=$(getOutputProcHosts $PARSET)
+  NODE_LIST=$(getCobaltHosts -O $PARSET)
 fi
 
 echo "[outputProc] Hosts: $NODE_LIST"
@@ -313,7 +330,7 @@ then
 fi
 
 # test the connection with local host: minimal test for valid credentials
-ssh -l $SSH_USER_NAME $KEY_STRING "localhost" "/bin/true" || error "[cobalt] Failed to ssh to localhost"
+ssh -o StrictHostKeyChecking=no -l $SSH_USER_NAME $KEY_STRING "localhost" "/bin/true" || error "[cobalt] Failed to ssh to localhost"
 
 # Create a helper function for delete child processes and
 # a file containing the PID of these processes
@@ -327,6 +344,11 @@ function clean_up_temp_files {
     echo "[cobalt] Removing pid file"
     rm -f $PIDFILE
   fi
+
+  if [ -n "$COMMAND_PIPE" ]; then
+    echo "[cobalt] Removing command pipe"
+    rm -f $COMMAND_PIPE
+  fi
 }
 
 # Function clean_up will clean op all PID in the
@@ -340,7 +362,7 @@ function clean_up {
 
   if $SLURM; then
     echo "[children] Cancelling SLURM allocation"
-    ssh $HEADNODE scancel --jobname=$OBSID
+    ssh -o StrictHostKeyChecking=no $HEADNODE scancel --jobname=$OBSID
   fi
   
   echo "[children] Sending SIGTERM" 
@@ -398,7 +420,7 @@ if ! $DUMMY_RUN; then
   else
     for HOST in $NODE_LIST
     do
-      COMMAND="ssh -tt -l $SSH_USER_NAME $KEY_STRING $SSH_USER_NAME@$HOST $OUTPUTPROC_CMDLINE"
+      COMMAND="ssh -tt -o StrictHostKeyChecking=no -l $SSH_USER_NAME $KEY_STRING $SSH_USER_NAME@$HOST $OUTPUTPROC_CMDLINE"
       echo "[outputProc] Starting $COMMAND"
       
       $COMMAND &
@@ -417,30 +439,11 @@ fi
 HOSTS=`mpi_node_list -n "$PARSET"`
 
 if [ -z "$HOSTS" ]; then
-  HOSTS=localhost
+  HOSTS=`python -c 'print(",".join(["localhost"]*'$NRPROCS_LOCALHOST'))'`
 fi
 
 echo "[cobalt] Hosts = $HOSTS"
 
-# Copy parset to all hosts
-cksumline=`md5sum $PARSET`
-for h in `echo $HOSTS | tr ',' ' '`
-do
-  # Ignore empty hostnames
-  [ -z "$h" ] && continue;
-
-  # Ignore hostnames that point to us
-  [ "$h" == "localhost" ] && continue;
-  [ "$h" == "`hostname`" ] && continue;
-
-  # Ignore hosts that already have the same parset (for example, through NFS).
-  timeout $KILLOPT 5s ssh -qn $h "[ -f $PARSET ] && echo \"$cksumline\" | md5sum -c --status" && continue
-
-  # Copy parset to remote node
-  echo "Copying parset to $h:$PARSET"
-  timeout $KILLOPT 30s scp -Bq $PARSET $h:$PARSET || error "[parset] Could not scp parset to $h"
-done
-
 # ************************************
 # Start rtcp 
 # ***********************************
@@ -459,6 +462,7 @@ else
   mpirun.sh -x LOFARROOT="$LOFARROOT" \
             -x QUEUE_PREFIX="$QUEUE_PREFIX" \
             -x LOFARENV="$LOFARENV" \
+            -x OMP_PROC_BIND=FALSE \
             -H "$HOSTS" \
             $MPIRUN_PARAMS \
             $CHECK_TOOL \
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/startBGL.sh b/RTCP/Cobalt/GPUProc/src/scripts/startBGL.sh
index 5103ddc82f6c4e8b750ea04eb2d9c96ba852e2c7..f3476e121532e9acaf9408ee45c43839340f126c 100755
--- a/RTCP/Cobalt/GPUProc/src/scripts/startBGL.sh
+++ b/RTCP/Cobalt/GPUProc/src/scripts/startBGL.sh
@@ -26,7 +26,7 @@ PIDFILE=$LOFARROOT/var/run/rtcp-$OBSID.pid
 LOGFILE=$LOFARROOT/var/log/rtcp-$OBSID.log
 
 # The FIFO used for communication with rtcp
-COMMANDPIPE=$LOFARROOT/var/run/rtcp-$OBSID.pipe
+COMMAND_PIPE=$LOFARROOT/var/run/rtcp-$OBSID.pipe
 
 source cobalt_functions.sh
 
@@ -56,12 +56,8 @@ echo "Copying parset to $TBB_PARSET for postprocessing"
 cp "$PARSET" "$TBB_PARSET" || true
 ln -sfT $TBB_PARSET /globalhome/lofarsystem/log/latest || true
 
-# Create the command pipe
-[ -e "$COMMANDPIPE" ] && rm -f "$COMMANDPIPE"
-mkfifo -m 0660 "$COMMANDPIPE" || true
-
 # Construct command line
-COMMAND="env LOFARENV=$LOFARENV runObservation.sh -P $PIDFILE -o Cobalt.commandStream=file:$COMMANDPIPE $PARSET"
+COMMAND="env LOFARENV=$LOFARENV runObservation.sh -P $PIDFILE -c $COMMAND_PIPE $PARSET"
 
 # Start observation in the background
 echo "Starting $COMMAND"
diff --git a/RTCP/Cobalt/GPUProc/src/scripts/stopBGL.sh b/RTCP/Cobalt/GPUProc/src/scripts/stopBGL.sh
index 42a55b18b0e4af28488a7f242140127537e23d7d..ed5dfb79fe1c59fdcdc59f8c16b777b674982958 100755
--- a/RTCP/Cobalt/GPUProc/src/scripts/stopBGL.sh
+++ b/RTCP/Cobalt/GPUProc/src/scripts/stopBGL.sh
@@ -25,7 +25,7 @@ PARSET=$LOFARROOT/var/run/rtcp-$OBSID.parset
 PIDFILE=$LOFARROOT/var/run/rtcp-$OBSID.pid
 
 # The FIFO used for communication with rtcp
-COMMANDPIPE=$LOFARROOT/var/run/rtcp-$OBSID.pipe
+COMMAND_PIPE=$LOFARROOT/var/run/rtcp-$OBSID.pipe
 
 source cobalt_functions.sh
 
@@ -35,31 +35,8 @@ function writecommand {
   CMD=$3
 
   # Send the stop command for a graceful shutdown
-  echo $CMD > $PIPE &
-  CMDPID=$!
-
-  # Allow 60 seconds for the write to get through
-  TIMEOUT=60
-  while [ $TIMEOUT -gt 0 ] && kill -0 "$CMDPID" 2>/dev/null
-  do 
-    if ! kill -0 "$PID" 2>/dev/null; then
-      echo "Process $PID terminated."
-      break
-    fi
-
-    echo "Timeout writing command: $TIMEOUT seconds left"
-    sleep 1
-    TIMEOUT=$((TIMEOUT - 1))
-  done
-
-  if kill -0 "$CMDPID" 2>/dev/null; then
-    # Kill attempt (be wary of race conditions)
-    echo "Stop trying to write command"
-    kill $CMDPID 2>/dev/null || true
-  fi
-
-  # Reap zombie, and propagate whether the echo succeeded
-  wait || exit 1
+  COMMAND_HOST=`getCobaltHosts -C $PARSET`
+  timeout 60s ssh $COMMAND_HOST "timeout 60s echo $CMD > $PIPE"
 }
 
 (
@@ -89,10 +66,10 @@ echo "Process:"
 ps --no-headers -p "$PID" || error "Process not running: PID $PID"
 
 # Send the stop command for a graceful shutdown
-writecommand $PID $COMMANDPIPE "stop" || error "Could not send 'stop' command"
+writecommand $PID $COMMAND_PIPE "stop" || error "Could not send 'stop' command"
 
 # Remove command pipe (because startBGL.sh was its creator)
-rm -f "$COMMANDPIPE" || true
+rm -f "$COMMAND_PIPE" || true
 
 # Kill the process
 # echo "Sending SIGTERM"
diff --git a/RTCP/Cobalt/GPUProc/test/CMakeLists.txt b/RTCP/Cobalt/GPUProc/test/CMakeLists.txt
index 3bfc5a8ed25c5d2e339cf1b65e59e80533aa368f..7ad87cc7f16a2d7ada330820c0e4e59019584646 100644
--- a/RTCP/Cobalt/GPUProc/test/CMakeLists.txt
+++ b/RTCP/Cobalt/GPUProc/test/CMakeLists.txt
@@ -7,7 +7,6 @@ include(LofarCTest)
 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 
 lofar_add_test(tBandPass tBandPass.cc)
-lofar_add_test(t_cpu_utils t_cpu_utils.cc)
 lofar_add_test(t_generate_globalfs_locations)
 lofar_add_test(tMPIReceive tMPIReceive.cc)
 lofar_add_test(tRSPRawSender tRSPRawSender.cc)
@@ -21,11 +20,4 @@ add_subdirectory(Kernels)
 add_subdirectory(Pipelines)
 add_subdirectory(Storage)
 add_subdirectory(SubbandProcs)
-
-if(USE_CUDA)
-  add_subdirectory(cuda)
-endif()
-
-if(USE_OPENCL)
-  add_subdirectory(opencl)
-endif()
+add_subdirectory(cuda)
diff --git a/RTCP/Cobalt/GPUProc/test/Pipelines/tCorrelatorPipelineProcessObs.cc b/RTCP/Cobalt/GPUProc/test/Pipelines/tCorrelatorPipelineProcessObs.cc
index 2878438c8f64270f1978afc5915551b0e5fb4110..478fa951ff3d5a4462d3857dd7b2d9f6c8bd9a65 100644
--- a/RTCP/Cobalt/GPUProc/test/Pipelines/tCorrelatorPipelineProcessObs.cc
+++ b/RTCP/Cobalt/GPUProc/test/Pipelines/tCorrelatorPipelineProcessObs.cc
@@ -84,7 +84,7 @@ int main(int argc, char *argv[]) {
 
   mpi.init(argc, argv);
 
-  MPI_receive_pool.filled.append(NULL);
+  MPI_receive_pool.filled.append(NULL, false);
 
   // no data, so no need to run a sender:
   // receiver(s) from processObservation() will fwd a end of data NULL pool item immediately.
diff --git a/RTCP/Cobalt/GPUProc/test/SubbandProcs/tCorrelatorStep.cc b/RTCP/Cobalt/GPUProc/test/SubbandProcs/tCorrelatorStep.cc
index 9f435aab1e240a3bf4070a9f9d9621571f3ae2a0..eb1850b2e75ef7bfbd6a5b1abbc909af05c4d574 100644
--- a/RTCP/Cobalt/GPUProc/test/SubbandProcs/tCorrelatorStep.cc
+++ b/RTCP/Cobalt/GPUProc/test/SubbandProcs/tCorrelatorStep.cc
@@ -21,8 +21,8 @@
 #include <lofar_config.h>
 
 #include <CoInterface/BudgetTimer.h>
-#include <GPUProc/cuda/SubbandProcs/CorrelatorStep.h>
-#include <GPUProc/cuda/gpu_wrapper.h>
+#include <GPUProc/SubbandProcs/CorrelatorStep.h>
+#include <GPUProc/gpu_wrapper.h>
 
 #include <UnitTest++.h>
 #include <iostream>
diff --git a/RTCP/Cobalt/GPUProc/test/SubbandProcs/tCorrelatorSubbandProc.cc b/RTCP/Cobalt/GPUProc/test/SubbandProcs/tCorrelatorSubbandProc.cc
index 6b13abf34283a269158a4134ca684a166ef6f258..faba46123b8a11e881710bac73a9c332a244471b 100644
--- a/RTCP/Cobalt/GPUProc/test/SubbandProcs/tCorrelatorSubbandProc.cc
+++ b/RTCP/Cobalt/GPUProc/test/SubbandProcs/tCorrelatorSubbandProc.cc
@@ -20,7 +20,7 @@
 
 #include <lofar_config.h>
 
-#include <GPUProc/cuda/SubbandProcs/CorrelatorStep.h>
+#include <GPUProc/SubbandProcs/CorrelatorStep.h>
 
 #include <UnitTest++.h>
 #include <iostream>
diff --git a/RTCP/Cobalt/GPUProc/test/cuda/tFFT_leakage.cc b/RTCP/Cobalt/GPUProc/test/cuda/tFFT_leakage.cc
index 9571fe3438d69930168b3aa9bf38494ef3bcd5ce..319ab116ac1732c8227a530150013c553ecfc5a7 100644
--- a/RTCP/Cobalt/GPUProc/test/cuda/tFFT_leakage.cc
+++ b/RTCP/Cobalt/GPUProc/test/cuda/tFFT_leakage.cc
@@ -37,7 +37,7 @@
 #include <CoInterface/Parset.h>
 #include <GPUProc/FilterBank.h>
 #include <GPUProc/SubbandProcs/CorrelatorSubbandProc.h>
-#include <GPUProc/cuda/Pipelines/Pipeline.h>
+#include <GPUProc/Pipelines/Pipeline.h>
 #include <GPUProc/gpu_utils.h>
 #include <GPUProc/gpu_wrapper.h>
 
diff --git a/RTCP/Cobalt/GPUProc/test/cuda/tFFT_leakage.in_.parset b/RTCP/Cobalt/GPUProc/test/cuda/tFFT_leakage.in_.parset
index c205724fdb3811378778a8da908f9c25708713ee..d363340eefd338b11a7c68f3ae3dc4187a85e456 100644
--- a/RTCP/Cobalt/GPUProc/test/cuda/tFFT_leakage.in_.parset
+++ b/RTCP/Cobalt/GPUProc/test/cuda/tFFT_leakage.in_.parset
@@ -104,83 +104,83 @@ PIC.Core.IONProc.PartitionName[73].inputs = [ST73/RSP0..ST73/RSP3]
 PIC.Core.IONProc.PartitionName[74].inputs = [ST74/RSP0..ST74/RSP3]
 PIC.Core.IONProc.PartitionName[75].inputs = [ST75/RSP0..ST75/RSP3]
 PIC.Core.IONProc.PartitionName[76].inputs = [ST76/RSP0..ST76/RSP3]
-PIC.Core.ST00.RSP.ports = [ 4 * null: ]
-PIC.Core.ST01.RSP.ports = [ 4 * null: ]
-PIC.Core.ST02.RSP.ports = [ 4 * null: ]
-PIC.Core.ST03.RSP.ports = [ 4 * null: ]
-PIC.Core.ST04.RSP.ports = [ 4 * null: ]
-PIC.Core.ST05.RSP.ports = [ 4 * null: ]
-PIC.Core.ST06.RSP.ports = [ 4 * null: ]
-PIC.Core.ST07.RSP.ports = [ 4 * null: ]
-PIC.Core.ST08.RSP.ports = [ 4 * null: ]
-PIC.Core.ST09.RSP.ports = [ 4 * null: ]
-PIC.Core.ST10.RSP.ports = [ 4 * null: ]
-PIC.Core.ST11.RSP.ports = [ 4 * null: ]
-PIC.Core.ST12.RSP.ports = [ 4 * null: ]
-PIC.Core.ST13.RSP.ports = [ 4 * null: ]
-PIC.Core.ST14.RSP.ports = [ 4 * null: ]
-PIC.Core.ST15.RSP.ports = [ 4 * null: ]
-PIC.Core.ST16.RSP.ports = [ 4 * null: ]
-PIC.Core.ST17.RSP.ports = [ 4 * null: ]
-PIC.Core.ST18.RSP.ports = [ 4 * null: ]
-PIC.Core.ST19.RSP.ports = [ 4 * null: ]
-PIC.Core.ST20.RSP.ports = [ 4 * null: ]
-PIC.Core.ST21.RSP.ports = [ 4 * null: ]
-PIC.Core.ST22.RSP.ports = [ 4 * null: ]
-PIC.Core.ST23.RSP.ports = [ 4 * null: ]
-PIC.Core.ST24.RSP.ports = [ 4 * null: ]
-PIC.Core.ST25.RSP.ports = [ 4 * null: ]
-PIC.Core.ST26.RSP.ports = [ 4 * null: ]
-PIC.Core.ST27.RSP.ports = [ 4 * null: ]
-PIC.Core.ST28.RSP.ports = [ 4 * null: ]
-PIC.Core.ST29.RSP.ports = [ 4 * null: ]
-PIC.Core.ST30.RSP.ports = [ 4 * null: ]
-PIC.Core.ST31.RSP.ports = [ 4 * null: ]
-PIC.Core.ST32.RSP.ports = [ 4 * null: ]
-PIC.Core.ST33.RSP.ports = [ 4 * null: ]
-PIC.Core.ST34.RSP.ports = [ 4 * null: ]
-PIC.Core.ST35.RSP.ports = [ 4 * null: ]
-PIC.Core.ST36.RSP.ports = [ 4 * null: ]
-PIC.Core.ST37.RSP.ports = [ 4 * null: ]
-PIC.Core.ST38.RSP.ports = [ 4 * null: ]
-PIC.Core.ST39.RSP.ports = [ 4 * null: ]
-PIC.Core.ST40.RSP.ports = [ 4 * null: ]
-PIC.Core.ST41.RSP.ports = [ 4 * null: ]
-PIC.Core.ST42.RSP.ports = [ 4 * null: ]
-PIC.Core.ST43.RSP.ports = [ 4 * null: ]
-PIC.Core.ST44.RSP.ports = [ 4 * null: ]
-PIC.Core.ST45.RSP.ports = [ 4 * null: ]
-PIC.Core.ST46.RSP.ports = [ 4 * null: ]
-PIC.Core.ST47.RSP.ports = [ 4 * null: ]
-PIC.Core.ST48.RSP.ports = [ 4 * null: ]
-PIC.Core.ST49.RSP.ports = [ 4 * null: ]
-PIC.Core.ST50.RSP.ports = [ 4 * null: ]
-PIC.Core.ST51.RSP.ports = [ 4 * null: ]
-PIC.Core.ST52.RSP.ports = [ 4 * null: ]
-PIC.Core.ST53.RSP.ports = [ 4 * null: ]
-PIC.Core.ST54.RSP.ports = [ 4 * null: ]
-PIC.Core.ST55.RSP.ports = [ 4 * null: ]
-PIC.Core.ST56.RSP.ports = [ 4 * null: ]
-PIC.Core.ST57.RSP.ports = [ 4 * null: ]
-PIC.Core.ST58.RSP.ports = [ 4 * null: ]
-PIC.Core.ST59.RSP.ports = [ 4 * null: ]
-PIC.Core.ST60.RSP.ports = [ 4 * null: ]
-PIC.Core.ST61.RSP.ports = [ 4 * null: ]
-PIC.Core.ST62.RSP.ports = [ 4 * null: ]
-PIC.Core.ST63.RSP.ports = [ 4 * null: ]
-PIC.Core.ST64.RSP.ports = [ 4 * null: ]
-PIC.Core.ST65.RSP.ports = [ 4 * null: ]
-PIC.Core.ST66.RSP.ports = [ 4 * null: ]
-PIC.Core.ST67.RSP.ports = [ 4 * null: ]
-PIC.Core.ST68.RSP.ports = [ 4 * null: ]
-PIC.Core.ST69.RSP.ports = [ 4 * null: ]
-PIC.Core.ST70.RSP.ports = [ 4 * null: ]
-PIC.Core.ST71.RSP.ports = [ 4 * null: ]
-PIC.Core.ST72.RSP.ports = [ 4 * null: ]
-PIC.Core.ST73.RSP.ports = [ 4 * null: ]
-PIC.Core.ST74.RSP.ports = [ 4 * null: ]
-PIC.Core.ST75.RSP.ports = [ 4 * null: ]
-PIC.Core.ST76.RSP.ports = [ 4 * null: ]
+PIC.Core.ST00.RSP.sources = [ 4 * null: ]
+PIC.Core.ST01.RSP.sources = [ 4 * null: ]
+PIC.Core.ST02.RSP.sources = [ 4 * null: ]
+PIC.Core.ST03.RSP.sources = [ 4 * null: ]
+PIC.Core.ST04.RSP.sources = [ 4 * null: ]
+PIC.Core.ST05.RSP.sources = [ 4 * null: ]
+PIC.Core.ST06.RSP.sources = [ 4 * null: ]
+PIC.Core.ST07.RSP.sources = [ 4 * null: ]
+PIC.Core.ST08.RSP.sources = [ 4 * null: ]
+PIC.Core.ST09.RSP.sources = [ 4 * null: ]
+PIC.Core.ST10.RSP.sources = [ 4 * null: ]
+PIC.Core.ST11.RSP.sources = [ 4 * null: ]
+PIC.Core.ST12.RSP.sources = [ 4 * null: ]
+PIC.Core.ST13.RSP.sources = [ 4 * null: ]
+PIC.Core.ST14.RSP.sources = [ 4 * null: ]
+PIC.Core.ST15.RSP.sources = [ 4 * null: ]
+PIC.Core.ST16.RSP.sources = [ 4 * null: ]
+PIC.Core.ST17.RSP.sources = [ 4 * null: ]
+PIC.Core.ST18.RSP.sources = [ 4 * null: ]
+PIC.Core.ST19.RSP.sources = [ 4 * null: ]
+PIC.Core.ST20.RSP.sources = [ 4 * null: ]
+PIC.Core.ST21.RSP.sources = [ 4 * null: ]
+PIC.Core.ST22.RSP.sources = [ 4 * null: ]
+PIC.Core.ST23.RSP.sources = [ 4 * null: ]
+PIC.Core.ST24.RSP.sources = [ 4 * null: ]
+PIC.Core.ST25.RSP.sources = [ 4 * null: ]
+PIC.Core.ST26.RSP.sources = [ 4 * null: ]
+PIC.Core.ST27.RSP.sources = [ 4 * null: ]
+PIC.Core.ST28.RSP.sources = [ 4 * null: ]
+PIC.Core.ST29.RSP.sources = [ 4 * null: ]
+PIC.Core.ST30.RSP.sources = [ 4 * null: ]
+PIC.Core.ST31.RSP.sources = [ 4 * null: ]
+PIC.Core.ST32.RSP.sources = [ 4 * null: ]
+PIC.Core.ST33.RSP.sources = [ 4 * null: ]
+PIC.Core.ST34.RSP.sources = [ 4 * null: ]
+PIC.Core.ST35.RSP.sources = [ 4 * null: ]
+PIC.Core.ST36.RSP.sources = [ 4 * null: ]
+PIC.Core.ST37.RSP.sources = [ 4 * null: ]
+PIC.Core.ST38.RSP.sources = [ 4 * null: ]
+PIC.Core.ST39.RSP.sources = [ 4 * null: ]
+PIC.Core.ST40.RSP.sources = [ 4 * null: ]
+PIC.Core.ST41.RSP.sources = [ 4 * null: ]
+PIC.Core.ST42.RSP.sources = [ 4 * null: ]
+PIC.Core.ST43.RSP.sources = [ 4 * null: ]
+PIC.Core.ST44.RSP.sources = [ 4 * null: ]
+PIC.Core.ST45.RSP.sources = [ 4 * null: ]
+PIC.Core.ST46.RSP.sources = [ 4 * null: ]
+PIC.Core.ST47.RSP.sources = [ 4 * null: ]
+PIC.Core.ST48.RSP.sources = [ 4 * null: ]
+PIC.Core.ST49.RSP.sources = [ 4 * null: ]
+PIC.Core.ST50.RSP.sources = [ 4 * null: ]
+PIC.Core.ST51.RSP.sources = [ 4 * null: ]
+PIC.Core.ST52.RSP.sources = [ 4 * null: ]
+PIC.Core.ST53.RSP.sources = [ 4 * null: ]
+PIC.Core.ST54.RSP.sources = [ 4 * null: ]
+PIC.Core.ST55.RSP.sources = [ 4 * null: ]
+PIC.Core.ST56.RSP.sources = [ 4 * null: ]
+PIC.Core.ST57.RSP.sources = [ 4 * null: ]
+PIC.Core.ST58.RSP.sources = [ 4 * null: ]
+PIC.Core.ST59.RSP.sources = [ 4 * null: ]
+PIC.Core.ST60.RSP.sources = [ 4 * null: ]
+PIC.Core.ST61.RSP.sources = [ 4 * null: ]
+PIC.Core.ST62.RSP.sources = [ 4 * null: ]
+PIC.Core.ST63.RSP.sources = [ 4 * null: ]
+PIC.Core.ST64.RSP.sources = [ 4 * null: ]
+PIC.Core.ST65.RSP.sources = [ 4 * null: ]
+PIC.Core.ST66.RSP.sources = [ 4 * null: ]
+PIC.Core.ST67.RSP.sources = [ 4 * null: ]
+PIC.Core.ST68.RSP.sources = [ 4 * null: ]
+PIC.Core.ST69.RSP.sources = [ 4 * null: ]
+PIC.Core.ST70.RSP.sources = [ 4 * null: ]
+PIC.Core.ST71.RSP.sources = [ 4 * null: ]
+PIC.Core.ST72.RSP.sources = [ 4 * null: ]
+PIC.Core.ST73.RSP.sources = [ 4 * null: ]
+PIC.Core.ST74.RSP.sources = [ 4 * null: ]
+PIC.Core.ST75.RSP.sources = [ 4 * null: ]
+PIC.Core.ST76.RSP.sources = [ 4 * null: ]
 Cobalt.BeamFormer.CoherentStokes.which	= IQUV # FIXME: conditional
 Cobalt.BeamFormer.CoherentStokes.timeIntegrationFactor = 1 # FIXME: conditional
 Cobalt.BeamFormer.IncoherentStokes.which	= IQUV # FIXME: conditional
diff --git a/RTCP/Cobalt/GPUProc/test/cuda/tGPUWrapper.cc b/RTCP/Cobalt/GPUProc/test/cuda/tGPUWrapper.cc
index e0d1b940506fe0b81eca92122d40dde2ce9a67a8..1e1bb0f2ca3fa373403c1d4ab48d847224f58554 100644
--- a/RTCP/Cobalt/GPUProc/test/cuda/tGPUWrapper.cc
+++ b/RTCP/Cobalt/GPUProc/test/cuda/tGPUWrapper.cc
@@ -28,7 +28,7 @@
 
 #include <Common/LofarLogger.h>
 #include <GPUProc/gpu_wrapper.h>
-#include <GPUProc/cuda/PerformanceCounter.h>
+#include <GPUProc/PerformanceCounter.h>
 #include <UnitTest++.h>
 
 using namespace std;
diff --git a/RTCP/Cobalt/GPUProc/test/cuda/tKernelOccupancy.cc b/RTCP/Cobalt/GPUProc/test/cuda/tKernelOccupancy.cc
index cafc778b8b5155f70b191cfdbf95c963f820559f..0320966fdee309db27f4cd67adc5627ec55f4496 100644
--- a/RTCP/Cobalt/GPUProc/test/cuda/tKernelOccupancy.cc
+++ b/RTCP/Cobalt/GPUProc/test/cuda/tKernelOccupancy.cc
@@ -65,7 +65,7 @@ int blkLimit(MyKernel& kernel) {
   LOG_INFO_STR("predicted occupancy at blk.x=" << block.x << " is " << occ);
   double prevOcc, maxOcc = occ;
 
-  for (unsigned x = 32; x <= 512; x += 32) {
+  for (unsigned x = 32; x <= 1024; x += 32) {
     prevOcc = occ;
 
     block.x = x;
@@ -107,7 +107,7 @@ int regsLimit(MyKernel& kernel) {
   double maxOcc = occ;
   int maxOccOccurances = 1;
 
-  for (unsigned x = 32; x <= 512; x += 32) {
+  for (unsigned x = 32; x <= 1024; x += 32) {
     block.x = x;
     grid.x = 16 * block.x; // only make sure it divs block.x
     kernel.setEnqueueWorkSizes(grid, block);
@@ -125,7 +125,7 @@ int regsLimit(MyKernel& kernel) {
   // It's hard to do another meaningful and reliable check
   // without resorting to hardware specifics.
   // It looks like we always have at least 2 points of some max occ. Check.
-  LOG_INFO_STR("max occupancy is " << maxOcc << "; reached at " << maxOccOccurances << " block size configs (up to 512)");
+  LOG_INFO_STR("max occupancy is " << maxOcc << "; reached at " << maxOccOccurances << " block size configs (up to 1024)");
   if (maxOccOccurances < 2) {
     LOG_ERROR("the max occupancy must be reachable at 2 or more block size configs");
     return 1;
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/CMakeLists.txt b/RTCP/Cobalt/GPUProc/test/opencl/CMakeLists.txt
deleted file mode 100644
index a9dc66d461e5a90f72b002edb21e020c04ed40dd..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-include(LofarCTest)
-
-# Add current directory to include path
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-lofar_add_test(tContext tContext.cc)
-lofar_add_test(tPerformanceCounter tPerformanceCounter.cc)
-lofar_add_test(RTCP_UnitTest RTCP_UnitTest.cc UnitTest.cc)
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/AMD_FFT_Test.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/AMD_FFT_Test.h
deleted file mode 100644
index b7ce89c5e2323f459ccc6c613bbdd1523b5e15da..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/AMD_FFT_Test.h
+++ /dev/null
@@ -1,85 +0,0 @@
-//# AMD_FFT_Test.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_AMD_FFT_TEST_H
-#define GPUPROC_AMD_FFT_TEST_H
-
-#include <UnitTest.h>
-#include <clAmdFft.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct AMD_FFT_Test : public UnitTest
-    {
-#if 0
-      AMD_FFT_Test(const Parset &ps)
-        : UnitTest(ps, "fft2.cl")
-      {
-        MultiArraySharedBuffer<std::complex<float>, 1> in(boost::extents[8], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-        MultiArraySharedBuffer<std::complex<float>, 1> out(boost::extents[8], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-
-        std::cout << "AMD FFT Test" << std::endl;
-
-        for (unsigned i = 0; i < 8; i++)
-          in[i] = std::complex<float>(2 * i + 1, 2 * i + 2);
-
-        clAmdFftSetupData setupData;
-        cl::detail::errHandler(clAmdFftInitSetupData(&setupData), "clAmdFftInitSetupData");
-        setupData.debugFlags = CLFFT_DUMP_PROGRAMS;
-        cl::detail::errHandler(clAmdFftSetup(&setupData), "clAmdFftSetup");
-
-        clAmdFftPlanHandle plan;
-        size_t dim[1] = { 8 };
-
-        cl::detail::errHandler(clAmdFftCreateDefaultPlan(&plan, context(), CLFFT_1D, dim), "clAmdFftCreateDefaultPlan");
-        cl::detail::errHandler(clAmdFftSetResultLocation(plan, CLFFT_OUTOFPLACE), "clAmdFftSetResultLocation");
-        cl::detail::errHandler(clAmdFftSetPlanBatchSize(plan, 1), "clAmdFftSetPlanBatchSize");
-        cl::detail::errHandler(clAmdFftBakePlan(plan, 1, &queue(), 0, 0), "clAmdFftBakePlan");
-
-        in.hostToDevice(CL_FALSE);
-        cl_mem ins[1] = { ((cl::Buffer) in)() };
-        cl_mem outs[1] = { ((cl::Buffer) out)() };
-#if 1
-        cl::detail::errHandler(clAmdFftEnqueueTransform(plan, CLFFT_FORWARD, 1, &queue(), 0, 0, 0, ins, outs, 0), "clAmdFftEnqueueTransform");
-#else
-        cl::Kernel kernel(program, "fft_fwd");
-        kernel.setArg(0, (cl::Buffer) in);
-        kernel.setArg(1, (cl::Buffer) out);
-        queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(64, 1, 1), cl::NDRange(64, 1, 1));
-#endif
-        out.deviceToHost(CL_TRUE);
-
-        for (unsigned i = 0; i < 8; i++)
-          std::cout << out[i] << std::endl;
-
-        cl::detail::errHandler(clAmdFftDestroyPlan(&plan), "clAmdFftDestroyPlan");
-        cl::detail::errHandler(clAmdFftTeardown(), "clAmdFftTeardown");
-      }
-
-#endif
-
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/BeamFormerTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/BeamFormerTest.h
deleted file mode 100644
index 29b6d3624fb64d1d0ab9d3c2f9721e58fefe8a5b..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/BeamFormerTest.h
+++ /dev/null
@@ -1,68 +0,0 @@
-//# BeamFormerTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_BEAMFORMERTEST_H
-#define GPUPROC_BEAMFORMERTEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/BeamFormerKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct BeamFormerTest : public UnitTest
-    {
-      BeamFormerTest(const Parset &ps)
-        :
-        UnitTest(ps, "BeamFormer/BeamFormer.cl")
-      {
-        if (ps.settings.antennaFields.size() >= 5 && ps.nrSamplesPerChannel() >= 13 && ps.nrChannelsPerSubband() >= 7 && ps.nrTABs(0) >= 6) {
-          MultiArraySharedBuffer<std::complex<float>, 4> inputData(boost::extents[ps.settings.antennaFields.size()][ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()][NR_POLARIZATIONS], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 3> beamFormerWeights(boost::extents[ps.settings.antennaFields.size()][ps.nrChannelsPerSubband()][ps.nrTABs(0)], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 4> complexVoltages(boost::extents[ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()][ps.nrTABs(0)][NR_POLARIZATIONS], queue, CL_MEM_READ_ONLY, CL_MEM_READ_WRITE);
-          BeamFormerKernel beamFormer(ps, program, complexVoltages, inputData, beamFormerWeights);
-
-          inputData[4][6][12][1] = std::complex<float>(2.2, 3);
-          beamFormerWeights[4][6][5] = std::complex<float>(4, 5);
-
-          inputData.hostToDevice(CL_FALSE);
-          beamFormerWeights.hostToDevice(CL_FALSE);
-          beamFormer.enqueue(queue, counter);
-          complexVoltages.deviceToHost(CL_TRUE);
-
-          check(complexVoltages[6][12][5][1], std::complex<float>(-6.2, 23));
-
-#if 0
-          for (unsigned tab = 0; tab < ps.nrTABs(0); tab++)
-            for (unsigned pol = 0; pol < NR_POLARIZATIONS; pol++)
-              for (unsigned ch = 0; ch < ps.nrChannelsPerSubband(); ch++)
-                for (unsigned t = 0; t < ps.nrSamplesPerChannel(); t++)
-                  if (complexVoltages[tab][pol][ch][t] != std::complex<float>(0, 0))
-                    std::cout << "complexVoltages[" << tab << "][" << pol << "][" << ch << "][" << t << "] = " << complexVoltages[tab][pol][ch][t] << std::endl;
-#endif
-        }
-      }
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/BeamFormerTransposeTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/BeamFormerTransposeTest.h
deleted file mode 100644
index 48a137478c1cc57714c0258ca0225620b7c9a73f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/BeamFormerTransposeTest.h
+++ /dev/null
@@ -1,56 +0,0 @@
-//# BeamFormerTransposeTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_BEAMFORMERTRANSPOSETEST_H
-#define GPUPROC_BEAMFORMERTRANSPOSETEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/BeamFormerTransposeKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct BeamFormerTransposeTest : public UnitTest
-    {
-      BeamFormerTransposeTest(const Parset &ps)
-        :
-        UnitTest(ps, "BeamFormer/Transpose.cl")
-      {
-        if (ps.nrChannelsPerSubband() >= 19 && ps.nrSamplesPerChannel() >= 175 && ps.nrTABs(0) >= 5) {
-          MultiArraySharedBuffer<std::complex<float>, 4> transposedData(boost::extents[ps.nrTABs(0)][NR_POLARIZATIONS][ps.nrSamplesPerChannel()][ps.nrChannelsPerSubband()], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 4> complexVoltages(boost::extents[ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()][ps.nrTABs(0)][NR_POLARIZATIONS], queue, CL_MEM_READ_WRITE, CL_MEM_READ_ONLY);
-          BeamFormerTransposeKernel transpose(ps, program, transposedData, complexVoltages);
-
-          complexVoltages[18][174][4][1] = std::complex<float>(24, 42);
-
-          complexVoltages.hostToDevice(CL_FALSE);
-          transpose.enqueue(queue, counter);
-          transposedData.deviceToHost(CL_TRUE);
-
-          check(transposedData[4][1][174][18], std::complex<float>(24, 42));
-        }
-      }
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CMakeLists.txt b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CMakeLists.txt
deleted file mode 100644
index 159a14cb8ba622ca5120554ab08d526960c98a0f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# $Id$
-include(LofarCTest)
-
-if(UNITTEST++_FOUND)
-endif()
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CoherentStokesTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CoherentStokesTest.h
deleted file mode 100644
index 7e4942be7cf3c67329ab3b451d6b2610e2b355f5..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CoherentStokesTest.h
+++ /dev/null
@@ -1,67 +0,0 @@
-//# CoherentStokesTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_COHERENTSTOKESTEST_H
-#define GPUPROC_COHERENTSTOKESTEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/CoherentStokesKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct CoherentStokesTest : public UnitTest
-    {
-      CoherentStokesTest(const Parset &ps)
-        :
-        UnitTest(ps, "BeamFormer/CoherentStokes.cl")
-      {
-        if (ps.nrChannelsPerSubband() >= 19 && ps.nrSamplesPerChannel() >= 175 && ps.nrTABs(0) >= 5) {
-          MultiArraySharedBuffer<float, 4> stokesData(boost::extents[ps.nrTABs(0)][ps.nrCoherentStokes()][ps.nrSamplesPerChannel() / ps.coherentStokesTimeIntegrationFactor()][ps.nrChannelsPerSubband()], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-#if 1
-          MultiArraySharedBuffer<std::complex<float>, 4> complexVoltages(boost::extents[ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()][ps.nrTABs(0)][NR_POLARIZATIONS], queue, CL_MEM_READ_WRITE, CL_MEM_READ_ONLY);
-          CoherentStokesKernel stokesKernel(ps, program, stokesData, complexVoltages);
-
-          complexVoltages[18][174][4][0] = std::complex<float>(2, 3);
-          complexVoltages[18][174][4][1] = std::complex<float>(4, 5);
-#else
-          MultiArraySharedBuffer<std::complex<float>, 4> complexVoltages(boost::extents[ps.nrTABs(0)][NR_POLARIZATIONS][ps.nrSamplesPerChannel()][ps.nrChannelsPerSubband()], queue, CL_MEM_READ_WRITE, CL_MEM_READ_ONLY);
-          CoherentStokesKernel stokesKernel(ps, program, stokesData, complexVoltages);
-
-          complexVoltages[18][174][4][0] = std::complex<float>(2, 3);
-          complexVoltages[18][174][4][1] = std::complex<float>(4, 5);
-#endif
-
-          complexVoltages.hostToDevice(CL_FALSE);
-          stokesKernel.enqueue(queue, counter);
-          stokesData.deviceToHost(CL_TRUE);
-
-          for (unsigned stokes = 0; stokes < ps.nrCoherentStokes(); stokes++)
-            std::cout << stokesData[4][stokes][174 / ps.coherentStokesTimeIntegrationFactor()][18] << std::endl;
-        }
-      }
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelateRectangleTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelateRectangleTest.h
deleted file mode 100644
index d39e80b39f6860e03d0778bfe207301fe645bdb1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelateRectangleTest.h
+++ /dev/null
@@ -1,68 +0,0 @@
-//# CorrelateRectangleTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_CORRELATERECTANGETEST_H
-#define GPUPROC_CORRELATERECTANGETEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/CorrelatorKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-#if defined USE_NEW_CORRELATOR
-
-    struct CorrelateRectangleTest : public UnitTest
-    {
-      CorrelateRectangleTest(const Parset &ps)
-        :
-        //UnitTest(ps, "Correlator.cl")
-        UnitTest(ps, "NewCorrelator.cl")
-      {
-        if (ps.settings.antennaFields.size() >= 69 && ps.nrChannelsPerSubband() >= 6 && ps.nrSamplesPerChannel() >= 100) {
-          MultiArraySharedBuffer<std::complex<float>, 4> visibilities(boost::extents[ps.nrBaselines()][ps.nrChannelsPerSubband()][NR_POLARIZATIONS][NR_POLARIZATIONS], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 4> inputData(boost::extents[ps.settings.antennaFields.size()][ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()][NR_POLARIZATIONS], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          CorrelateRectangleKernel correlator(ps, queue, program, visibilities, inputData);
-
-          inputData[27][5][99][1] = std::complex<float>(3, 4);
-          inputData[68][5][99][1] = std::complex<float>(5, 6);
-
-          visibilities.hostToDevice(CL_FALSE);
-          inputData.hostToDevice(CL_FALSE);
-          correlator.enqueue(queue, counter);
-          visibilities.deviceToHost(CL_TRUE);
-
-          //check(visibilities[5463][5][1][1], std::complex<float>(39, 2));
-          for (unsigned bl = 0; bl < ps.nrBaselines(); bl++)
-            if (visibilities[bl][5][1][1] != std::complex<float>(0, 0))
-              std::cout << "bl = " << bl << ", visibility = " << visibilities[bl][5][1][1] << std::endl;
-        }
-      }
-    };
-
-#endif
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelateTriangleTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelateTriangleTest.h
deleted file mode 100644
index e49758857cd95fc28a46e4d6dd94aec639c91320..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelateTriangleTest.h
+++ /dev/null
@@ -1,68 +0,0 @@
-//# CorrelateTriangleTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_CORRELATETRIANGLETEST_H
-#define GPUPROC_CORRELATETRIANGLETEST_H
-
-#if defined USE_NEW_CORRELATOR
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/CorrelatorKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct CorrelateTriangleTest : public UnitTest
-    {
-      CorrelateTriangleTest(const Parset &ps)
-        :
-        //UnitTest(ps, "Correlator.cl")
-        UnitTest(ps, "NewCorrelator.cl")
-      {
-        if (ps.settings.antennaFields.size() >= 5 && ps.nrChannelsPerSubband() >= 6 && ps.nrSamplesPerChannel() >= 100) {
-          MultiArraySharedBuffer<std::complex<float>, 4> visibilities(boost::extents[ps.nrBaselines()][ps.nrChannelsPerSubband()][NR_POLARIZATIONS][NR_POLARIZATIONS], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 4> inputData(boost::extents[ps.settings.antennaFields.size()][ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()][NR_POLARIZATIONS], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          CorrelateTriangleKernel correlator(ps, queue, program, visibilities, inputData);
-
-          //inputData[3][5][99][1] = std::complex<float>(3, 4);
-          //inputData[4][5][99][1] = std::complex<float>(5, 6);
-          inputData[0][5][99][1] = std::complex<float>(3, 4);
-          inputData[2][5][99][1] = std::complex<float>(5, 6);
-
-          visibilities.hostToDevice(CL_FALSE);
-          inputData.hostToDevice(CL_FALSE);
-          correlator.enqueue(queue, counter);
-          visibilities.deviceToHost(CL_TRUE);
-
-          //check(visibilities[13][5][1][1], std::complex<float>(39, 2));
-          for (unsigned bl = 0; bl < ps.nrBaselines(); bl++)
-            if (visibilities[bl][5][1][1] != std::complex<float>(0, 0))
-              std::cout << "bl = " << bl << ", visibility = " << visibilities[bl][5][1][1] << std::endl;
-        }
-      }
-    };
-  }
-}
-
-#endif
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelatorTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelatorTest.h
deleted file mode 100644
index 8a1d4f6c16d7904848634dc002943762ff785c99..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/CorrelatorTest.h
+++ /dev/null
@@ -1,71 +0,0 @@
-//# CorrelatorTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_CORRELATORTEST_H
-#define GPUPROC_CORRELATORTEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/CorrelatorKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct CorrelatorTest : public UnitTest
-    {
-      CorrelatorTest(const Parset &ps)
-        :
-#if defined USE_NEW_CORRELATOR
-        UnitTest(ps, "NewCorrelator.cl")
-#else
-        UnitTest(ps, "Correlator.cl")
-#endif
-      {
-        if (ps.settings.antennaFields.size() >= 5 && ps.nrChannelsPerSubband() >= 6 && ps.nrSamplesPerChannel() >= 100) {
-          MultiArraySharedBuffer<std::complex<float>, 4> visibilities(boost::extents[ps.nrBaselines()][ps.nrChannelsPerSubband()][NR_POLARIZATIONS][NR_POLARIZATIONS], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 4> inputData(boost::extents[ps.settings.antennaFields.size()][ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()][NR_POLARIZATIONS], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          CorrelatorKernel correlator(ps, queue, program, visibilities, inputData);
-
-          //inputData[3][5][99][1] = std::complex<float>(3, 4);
-          //inputData[4][5][99][1] = std::complex<float>(5, 6);
-          inputData[0][5][99][1] = std::complex<float>(3, 4);
-          inputData[2][5][99][1] = std::complex<float>(5, 6);
-
-          visibilities.hostToDevice(CL_FALSE);
-          inputData.hostToDevice(CL_FALSE);
-          correlator.enqueue(queue, counter);
-          visibilities.deviceToHost(CL_TRUE);
-
-          //check(visibilities[13][5][1][1], std::complex<float>(39, 2));
-          //check(visibilities[5463][5][1][1], std::complex<float>(39, 2));
-          for (unsigned bl = 0; bl < ps.nrBaselines(); bl++)
-            if (visibilities[bl][5][1][1] != std::complex<float>(0, 0))
-              std::cout << "bl = " << bl << ", visibility = " << visibilities[bl][5][1][1] << std::endl;
-        }
-      }
-    };
-
-
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/DedispersionChirpTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/DedispersionChirpTest.h
deleted file mode 100644
index 0e89e9a061fa2da9b1efb93912c6de1dea40436c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/DedispersionChirpTest.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//# DedispersionChirpTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_DEDISPERSIONCHIRPTEST_H
-#define GPUPROC_DEDISPERSIONCHIRPTEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/DedispersionChirpKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    struct DedispersionChirpTest : public UnitTest
-    {
-      DedispersionChirpTest(const Parset &ps)
-        :
-        UnitTest(ps, "BeamFormer/Dedispersion.cl")
-      {
-        if (ps.nrTABs(0) > 3 && ps.nrChannelsPerSubband() > 13 && ps.nrSamplesPerChannel() / ps.dedispersionFFTsize() > 1 && ps.dedispersionFFTsize() > 77) {
-          MultiArraySharedBuffer<std::complex<float>, 5> data(boost::extents[ps.nrTABs(0)][NR_POLARIZATIONS][ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel() / ps.dedispersionFFTsize()][ps.dedispersionFFTsize()], queue, CL_MEM_READ_WRITE, CL_MEM_READ_WRITE);
-          MultiArraySharedBuffer<float, 1> DMs(boost::extents[ps.nrTABs(0)], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          DedispersionChirpKernel dedispersionChirpKernel(ps, program, queue, data, DMs);
-
-          data[3][1][13][1][77] = std::complex<float>(2, 3);
-          DMs[3] = 2;
-
-          DMs.hostToDevice(CL_FALSE);
-          data.hostToDevice(CL_FALSE);
-          dedispersionChirpKernel.enqueue(queue, counter, 60e6);
-          data.deviceToHost(CL_TRUE);
-
-          std::cout << data[3][1][13][1][77] << std::endl;
-        }
-      }
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/FFT_Test.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/FFT_Test.h
deleted file mode 100644
index c94b8a87ecb3abf0718b21b4f88863812bec9ab1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/FFT_Test.h
+++ /dev/null
@@ -1,326 +0,0 @@
-//# FFT_Test.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_FFT_TEST_H
-#define GPUPROC_FFT_TEST_H
-
-#include <cstdlib>
-#include <sys/time.h>
-#include <cmath>
-#include <cassert>
-#include <fftw3.h>
-#include <iostream>
-#include <iomanip>
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/FFT_Kernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct FFT_Test : public UnitTest
-    {
-      FFT_Test(const Parset &ps)
-        : UnitTest(ps, "FFT.cl")
-      {
-        bool testOk = true;
-        unsigned nrErrors;
-
-        const unsigned fftSize = 256;
-        const unsigned nrFFTs = 1;
-        MultiArraySharedBuffer<std::complex<float>, 1> inout(boost::extents[fftSize], queue, CL_MEM_READ_WRITE, CL_MEM_READ_WRITE);
-
-        std::cout << "FFT Test" << std::endl;
-
-        FFT_Kernel fftFwdKernel(context, fftSize, nrFFTs, true, inout);
-        FFT_Kernel fftBwdKernel(context, fftSize, nrFFTs, false, inout);
-
-
-        // First run two very basic tests, then a third test with many transforms with FFTW output as reference.
-        // All tests run complex-to-complex float, in-place.
-
-        // Test 1: Impulse at origin
-        {
-          std::cout << "FFT_Test 1" << std::endl;
-          nrErrors = 0;
-
-          inout[0] = 1.0f;
-
-          inout.hostToDevice(CL_FALSE);
-          fftFwdKernel.enqueue(queue, counter);
-          inout.deviceToHost(CL_TRUE);
-
-          // Check for constant function in transfer domain. All real values 1.0 (like fftw, scaled). All imag must be 0.0.
-          for (unsigned i = 0; i < fftSize; i++) {
-            if (inout[i] != 1.0f) {
-              if (++nrErrors < 100) { // limit spam
-                std::cerr << "fwd: " << i << ':' << inout[i] << std::endl;
-              }
-            }
-          }
-
-          // Backward
-          fftBwdKernel.enqueue(queue, counter);
-          inout.deviceToHost(CL_TRUE);
-
-          // See if we got only our scaled impuls back.
-          if (inout[0] != (float)fftSize) {
-            nrErrors += 1;
-            std::cerr << "bwd: " << inout[0] << " at idx 0 should have been " << (std::complex<float>)fftSize << std::endl;
-          }
-          for (unsigned i = 1; i < fftSize; i++) {
-            if (inout[i] != 0.0f) {
-              if (++nrErrors < 100) {
-                std::cerr << "bwd: " << i << ':' << inout[i] << std::endl;
-              }
-            }
-          }
-
-          if (nrErrors == 0) {
-            std::cout << "FFT_Test 1: test OK" << std::endl;
-          } else {
-            std::cerr << "FFT_Test 1: failed with " << nrErrors << " unexpected values" << std::endl;
-            testOk = false;
-          }
-        }
-
-
-        // Test 2: Shifted impulse
-        {
-          std::cout << "FFT_Test 2" << std::endl;
-          nrErrors = 0;
-          const float eps = 1.0e-4f;
-          std::cout << "using epsilon = " << std::setprecision(9+1) << eps << std::endl;
-          memset(inout.origin(), 0, inout.num_elements() * sizeof(std::complex<float>));
-
-          inout[1] = 1.0f;
-
-          inout.hostToDevice(CL_FALSE);
-          fftFwdKernel.enqueue(queue, counter);
-          inout.deviceToHost(CL_TRUE);
-
-          // Check for (scaled) cosine real vals, and minus (scaled) sine imag vals.
-          // (One could also roughly check that each complex val is of constant (scaled) magnitude (sin^2(x) + cos^2(x) = 1).)
-          for (unsigned i = 0; i < fftSize; i++) {
-            std::complex<float> ref = std::complex<float>((float) std::cos(2.0 * M_PI * i / fftSize),
-                                                          (float)-std::sin(2.0 * M_PI * i / fftSize));
-            if (!fpEquals(inout[i], ref, eps)) {
-              if (++nrErrors < 100) {
-                std::cerr << "fwd: " << inout[i] << " at idx " << i << " should have been " << inout[i] << std::endl;
-              }
-            }
-          }
-
-          // Backward
-          fftBwdKernel.enqueue(queue, counter);
-          inout.deviceToHost(CL_TRUE);
-
-          // See if we got only our scaled, shifted impuls back.
-          if (!fpEquals(inout[0], 0.0f, eps)) {
-            nrErrors += 1;
-            std::cerr << "bwd: " << inout[0] << " at idx 0 should have been (0.0, 0.0)" << std::endl;
-          }
-          if (!fpEquals(inout[1], (float)fftSize, eps)) {
-            nrErrors += 1;
-            std::cerr << "bwd: " << inout[1] << " at idx 1 should have been " << (std::complex<float>)fftSize << std::endl;
-          }
-          for (unsigned i = 2; i < fftSize; i++) {
-            if (!fpEquals(inout[i], 0.0f, eps)) {
-              if (++nrErrors < 100) {
-                std::cerr << "bwd: " << i << ':' << inout[i] << std::endl;
-              }
-            }
-          }
-
-          if (nrErrors == 0) {
-            std::cout << "FFT_Test 2: test OK" << std::endl;
-          } else {
-            std::cerr << "FFT_Test 2: failed with " << nrErrors << " unexpected values" << std::endl;
-            testOk = false;
-          }
-        }
-
-
-        // Test 3: Pseudo-random input ([0.0f, 2*pi]) on parset specified sizes. Compare output against FFTW double precision.
-        {
-          std::cout << "FFT_Test 3" << std::endl;
-          nrErrors = 0;
-
-          const float eps = 1.0e-3f;
-          std::cout << "using epsilon = " << std::setprecision(9+1) << eps << std::endl;
-
-          struct timeval tv = {0, 0};
-          gettimeofday(&tv, NULL);
-          const unsigned int seed = (unsigned int)tv.tv_sec;
-          std::srand(seed);
-
-          const unsigned fftSize = ps.nrChannelsPerSubband();
-          const unsigned nrFFTs = ps.settings.antennaFields.size() * NR_POLARIZATIONS * ps.nrSamplesPerChannel();
-          MultiArraySharedBuffer<std::complex<float>, 2> inout3(boost::extents[nrFFTs][fftSize], queue, CL_MEM_READ_WRITE, CL_MEM_READ_WRITE);
-
-          FFT_Kernel fftFwdKernel3(context, fftSize, nrFFTs, true, inout3);
-          FFT_Kernel fftBwdKernel3(context, fftSize, nrFFTs, false, inout3);
-
-          fftw_plan fwdPlan;
-          fftw_plan bwdPlan;
-          fftw_complex* refInout3;
-
-          bool fftwOk = fftwInit(&fwdPlan, &bwdPlan, &refInout3, fftSize, nrFFTs);
-          assert(fftwOk);
-
-          for (unsigned i = 0; i < inout3.num_elements(); i++) {
-            double real = (std::rand() * 2.0 * M_PI / RAND_MAX);
-            double imag = (std::rand() * 2.0 * M_PI / RAND_MAX);
-            refInout3[i][0] = real;
-            refInout3[i][1] = imag;
-            inout3.origin()[i].real() = (float)real;
-            inout3.origin()[i].imag() = (float)imag;
-          }
-
-          inout3.hostToDevice(CL_FALSE);
-          fftFwdKernel3.enqueue(queue, counter);
-          inout3.deviceToHost(CL_TRUE);
-
-          fftw_execute(fwdPlan);
-
-          float maxDiff = 0.0f;
-          for (unsigned i = 0; i < nrFFTs; i++) {
-            for (unsigned j = 0; j < fftSize; j++) {
-              std::complex<float> fref;
-              fref.real() = (float)refInout3[i * fftSize + j][0];
-              fref.imag() = (float)refInout3[i * fftSize + j][1];
-              if (!fpEquals(inout3[i][j], fref, eps)) {
-                if (++nrErrors < 100) {
-                  std::cerr << "fwd: " << inout3[i][j] << " at transform " << i << " pos " << j
-                            << " should have been " << fref << std::endl;
-                }
-              }
-
-              float diffReal = std::abs(inout3[i][j].real() - fref.real());
-              if (diffReal > maxDiff)
-                maxDiff = diffReal;
-              float diffImag = std::abs(inout3[i][j].imag() - fref.imag());
-              if (diffImag > maxDiff)
-                maxDiff = diffImag;
-            }
-          }
-          std::cout << "FFT_Test 3: Max abs error (fwd) compared to fftw complex double (w/ FFTW_ESTIMATE plans) is: " << maxDiff << std::endl;
-
-          // Backward
-          fftBwdKernel3.enqueue(queue, counter);
-          inout3.deviceToHost(CL_TRUE);
-
-          fftw_execute(bwdPlan);
-
-          maxDiff = 0.0f;
-          // Compare again vs fftw complex double. The original input has been overwritten.
-          for (unsigned i = 0; i < nrFFTs; i++) {
-            for (unsigned j = 0; j < fftSize; j++) {
-              std::complex<float> fref;
-              fref.real() = (float)refInout3[i * fftSize + j][0];
-              fref.imag() = (float)refInout3[i * fftSize + j][1];
-              if (!fpEquals(inout3[i][j], fref, eps)) {
-                if (++nrErrors < 100) {
-                  std::cerr << "bwd: " << inout3[i][j] << " at transform " << i << " pos " << j
-                            << " should have been " << fref << std::endl;
-                }
-              }
-
-              float diffReal = std::abs(inout3[i][j].real() - fref.real());
-              if (diffReal > maxDiff)
-                maxDiff = diffReal;
-              float diffImag = std::abs(inout3[i][j].imag() - fref.imag());
-              if (diffImag > maxDiff)
-                maxDiff = diffImag;
-            }
-          }
-          std::cout << "FFT_Test 3: Max abs error (fwd+bwd) compared to fftw complex double (w/ FFTW_ESTIMATE plans) is: " << maxDiff << std::endl;
-
-          fftwDeinit(fwdPlan, bwdPlan, refInout3);
-
-          if (nrErrors == 0) {
-            std::cout << "FFT_Test 3: test OK" << std::endl;
-          } else {
-            std::cerr << "FFT_Test 3: failed with " << nrErrors << " unexpected values" << std::endl;
-            testOk = false;
-          }
-        }
-
-
-        check(testOk, true);
-      }
-
-
-      bool fftwInit(fftw_plan* fwdPlan, fftw_plan* bwdPlan, fftw_complex** inout, int fftSize, int nrFFTs)
-      {
-        if (fftw_init_threads() == 0) {
-          std::cerr << "failed to init fftw threads" << std::endl;
-          return false;
-        }
-
-        *inout = (fftw_complex*)fftw_malloc(fftSize * nrFFTs * sizeof(fftw_complex));
-        if (*inout == NULL) {
-          std::cerr << "failed to fftw malloc buffer" << std::endl;
-          fftw_cleanup_threads();
-          return false;
-        }
-
-        fftw_plan_with_nthreads(4); // use up to 4 threads (don't care about test performance, but be impatient anyway...)
-
-        // Use FFTW_ESTIMATE: we need reference output, so don't care about runtime speed.
-        *fwdPlan = fftw_plan_many_dft(1, &fftSize, nrFFTs,         // int rank, const int *n (=dims), int howmany,
-                                      *inout, NULL, 1, fftSize,    // fftw_complex *in, const int *inembed, int istride, int idist,
-                                      *inout, NULL, 1, fftSize,    // fftw_complex *out, const int *onembed, int ostride, int odist,
-                                      FFTW_FORWARD, FFTW_ESTIMATE); // int sign, unsigned flags
-        if (*fwdPlan == NULL) {
-          std::cerr << "failed to create fftw fwd plan" << std::endl;
-          fftw_free(*inout);
-          fftw_cleanup_threads();
-          return false;
-        }
-        *bwdPlan = fftw_plan_many_dft(1, &fftSize, nrFFTs,         // int rank, const int *n (=dims), int howmany,
-                                      *inout, NULL, 1, fftSize,    // fftw_complex *in, const int *inembed, int istride, int idist,
-                                      *inout, NULL, 1, fftSize,    // fftw_complex *out, const int *onembed, int ostride, int odist,
-                                      FFTW_BACKWARD, FFTW_ESTIMATE); // int sign, unsigned flags
-        if (*bwdPlan == NULL) {
-          std::cerr << "failed to create fftw bwd plan" << std::endl;
-          fftw_destroy_plan(*fwdPlan);
-          fftw_free(*inout);
-          fftw_cleanup_threads();
-          return false;
-        }
-
-        return true;
-      }
-
-      void fftwDeinit(fftw_plan fwdPlan, fftw_plan bwdPlan, fftw_complex* inout)
-      {
-        fftw_destroy_plan(bwdPlan);
-        fftw_destroy_plan(fwdPlan);
-        fftw_free(inout);
-        fftw_cleanup_threads();
-      }
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/FIR_FilterTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/FIR_FilterTest.h
deleted file mode 100644
index 1b1fb71fb7a619abd9b7a8ae6d599149fa2d6bfe..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/FIR_FilterTest.h
+++ /dev/null
@@ -1,226 +0,0 @@
-//# FIR_FilterTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_FIR_FILTERTEST_H
-#define GPUPROC_FIR_FILTERTEST_H
-
-#include "CL/cl.hpp"
-#include "UnitTest.h"
-#include <complex>
-#include <iostream>
-#include <iomanip>
-#include <GPUProc/FilterBank.h>
-#include <GPUProc/Kernels/FIR_FilterKernel.h>
-
-namespace LOFAR
-{
-    namespace Cobalt
-    {
-        struct FIR_FilterTest : public UnitTest
-        {
-            FIR_FilterTest(const Parset &ps)
-                : UnitTest(ps, "FIR.cl")
-            {
-            	bool testOk = true;
-
-                MultiArraySharedBuffer<float, 5> filteredData(
-                    boost::extents[ps.settings.antennaFields.size()][NR_POLARIZATIONS][ps.nrSamplesPerChannel()][ps.nrChannelsPerSubband()][ps.nrBytesPerComplexSample()],
-                    queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-                MultiArraySharedBuffer<signed char, 5> inputSamples(
-                    boost::extents[ps.settings.antennaFields.size()][ps.nrPPFTaps() - 1 + ps.nrSamplesPerChannel()][ps.nrChannelsPerSubband()][NR_POLARIZATIONS][ps.nrBytesPerComplexSample()],
-                    queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-                MultiArraySharedBuffer<float, 2> firWeights(
-                    boost::extents[ps.nrChannelsPerSubband()][ps.nrPPFTaps()],
-                    queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-                FIR_FilterKernel firFilterKernel(ps, queue, program, filteredData, inputSamples, firWeights);
-
-                std::cout << "FIR_FilterTest: total num_el: firWeight=" << firWeights.num_elements() << " input="
-                          << inputSamples.num_elements() << " output=" << filteredData.num_elements() << std::endl;
-
-                unsigned station, sample, ch, pol;
-
-                // Test 1: Single impulse test on single non-zero weight
-                station = ch = pol = 0;
-                sample = ps.nrPPFTaps() - 1; // skip FIR init samples
-                firWeights.origin()[0] = 2.0f;
-                inputSamples[station][sample][ch][pol][0] = 3;
-
-                firWeights.hostToDevice(CL_FALSE);
-                inputSamples.hostToDevice(CL_FALSE);
-                firFilterKernel.enqueue(queue, counter);
-                filteredData.deviceToHost(CL_TRUE);
-
-                // Expected output: St0, pol0, ch0, sampl0: 6. The rest all 0.
-                if (filteredData.origin()[0] != 6.0f) {
-                    std::cerr << "FIR_FilterTest 1: Expected at idx 0: 6; got: " << std::setprecision(9+1) << filteredData.origin()[0] << std::endl;
-                    testOk = false;
-                }
-                const unsigned nrExpectedZeros = filteredData.num_elements() - 1;
-                unsigned nrZeros = 0;
-                for (unsigned i = 1; i < filteredData.num_elements(); i++) {
-                    if (filteredData.origin()[i] == 0.0f) {
-                        nrZeros += 1;
-                    }
-                }
-                if (nrZeros == nrExpectedZeros) {
-                    std::cout << "FIR_FilterTest 1: test OK" << std::endl;
-                } else {
-                    std::cerr << "FIR_FilterTest 1: Unexpected non-zero(s). Only " << nrZeros << " zeros out of " << nrExpectedZeros << std::endl;
-                    testOk = false;
-                }
-
-
-                // Test 2: Impulse train 2*NR_TAPS apart. All st, all ch, all pol.
-                for (ch = 0; ch < ps.nrChannelsPerSubband(); ch++) {
-                    for (unsigned tap = 0; tap < ps.nrPPFTaps(); tap++) {
-                        firWeights[ch][tap] = ch + tap;
-                    }
-                }
-
-                for (station = 0; station < ps.settings.antennaFields.size(); station++) {
-                    for (sample = ps.nrPPFTaps() - 1; sample < ps.nrPPFTaps() - 1 + ps.nrSamplesPerChannel(); sample += 2 * ps.nrPPFTaps()) {
-                        for (ch = 0; ch < ps.nrChannelsPerSubband(); ch++) {
-                            for (pol = 0; pol < NR_POLARIZATIONS; pol++) {
-                                inputSamples[station][sample][ch][pol][0] = station;
-                            }
-                        }
-                    }
-                }
-
-                firWeights.hostToDevice(CL_FALSE);
-                inputSamples.hostToDevice(CL_FALSE);
-                firFilterKernel.enqueue(queue, counter);
-                filteredData.deviceToHost(CL_TRUE);
-
-                // Expected output: sequences of (filterbank scaled by station nr, NR_TAPS zeros)
-                unsigned nrErrors = 0;
-                for (station = 0; station < ps.settings.antennaFields.size(); station++) {
-                    for (pol = 0; pol < NR_POLARIZATIONS; pol++) {
-                        unsigned s;
-                        for (sample = 0; sample < ps.nrSamplesPerChannel() / (2 * ps.nrPPFTaps()); sample += s) {
-                            for (s = 0; s < ps.nrPPFTaps(); s++) {
-                                for (ch = 0; ch < ps.nrChannelsPerSubband(); ch++) {
-                                    if (filteredData[station][pol][sample + s][ch][0] != station * firWeights[ch][s]) {
-                                        if (++nrErrors < 100) { // limit spam
-                                            std::cerr << "2a.filtered["<<station<<"]["<<pol<<"]["<<sample+s<<"]["<<ch<<
-                                                "][0] (sample="<<sample<<" s="<<s<<") = " << std::setprecision(9+1) << filteredData[station][pol][sample + s][ch][0] << std::endl;
-                                        }
-                                    }
-                                    if (filteredData[station][pol][sample + s][ch][1] != 0.0f) {
-                                        if (++nrErrors < 100) {
-                                            std::cerr << "2a imag non-zero: " << std::setprecision(9+1) << filteredData[station][pol][sample + s][ch][1] << std::endl;
-                                        }
-                                    }
-                                }
-                            }
-
-                            for ( ; s < 2 * ps.nrPPFTaps(); s++) {
-                                for (ch = 0; ch < ps.nrChannelsPerSubband(); ch++) {
-                                    if (filteredData[station][pol][sample + s][ch][0] != 0.0f || filteredData[station][pol][sample + s][ch][1] != 0.0f) {
-                                        if (++nrErrors < 100) {
-                                            std::cerr << "2b.filtered["<<station<<"]["<<pol<<"]["<<sample+s<<"]["<<ch<<
-                                                "][0] (sample="<<sample<<" s="<<s<<") = " << std::setprecision(9+1) << filteredData[station][pol][sample + s][ch][0] <<
-                                                ", "<<filteredData[station][pol][sample + s][ch][1] << std::endl;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                if (nrErrors == 0) {
-                    std::cout << "FIR_FilterTest 2: test OK" << std::endl;
-                } else {
-                    std::cerr << "FIR_FilterTest 2: " << nrErrors << " unexpected output values" << std::endl;
-                    testOk = false;
-                }
-
-
-                // Test 3: Scaled step test (scaled DC gain) on KAISER filterbank. Non-zero imag input.
-                FilterBank filterBank(true, ps.nrPPFTaps(), ps.nrChannelsPerSubband(), KAISER);
-                filterBank.negateWeights(); // not needed for testing, but as we use it
-                //filterBank.printWeights();
-
-                assert(firWeights.num_elements() == filterBank.getWeights().num_elements());
-                double* expectedSums = new double[ps.nrChannelsPerSubband()];
-                memset(expectedSums, 0, ps.nrChannelsPerSubband() * sizeof(double));
-                for (ch = 0; ch < ps.nrChannelsPerSubband(); ch++) {
-                    for (unsigned tap = 0; tap < ps.nrPPFTaps(); tap++) {
-                        firWeights[ch][tap] = filterBank.getWeights()[ch][tap];
-                        expectedSums[ch] += firWeights[ch][tap];
-                    }
-                }
-
-                for (station = 0; station < ps.settings.antennaFields.size(); station++) {
-                    for (sample = 0; sample < ps.nrPPFTaps() - 1 + ps.nrSamplesPerChannel(); sample++) {
-                        for (ch = 0; ch < ps.nrChannelsPerSubband(); ch++) {
-                            for (pol = 0; pol < NR_POLARIZATIONS; pol++) {
-                                inputSamples[station][sample][ch][pol][0] = 2; // real
-                                inputSamples[station][sample][ch][pol][1] = 3; // imag
-                            }
-                        }
-                    }
-                }
-
-                firWeights.hostToDevice(CL_FALSE);
-                inputSamples.hostToDevice(CL_FALSE);
-                firFilterKernel.enqueue(queue, counter);
-                filteredData.deviceToHost(CL_TRUE);
-
-                nrErrors = 0;
-                const float eps = 2.0f * std::numeric_limits<float>::epsilon();
-                for (station = 0; station < ps.settings.antennaFields.size(); station++) {
-                    for (pol = 0; pol < NR_POLARIZATIONS; pol++) {
-                        for (sample = 0; sample < ps.nrSamplesPerChannel(); sample++) {
-                            for (ch = 0; ch < ps.nrChannelsPerSubband(); ch++) {
-                                // Expected sum must also be scaled by 2 and 3, because weights are real only.
-                                if (!fpEquals(filteredData[station][pol][sample][ch][0], (float)(2 * expectedSums[ch]), eps)) {
-                                    if (++nrErrors < 100) { // limit spam
-                                        std::cerr << "3a.filtered["<<station<<"]["<<pol<<"]["<<sample<<"]["<<ch<<
-                                            "][0] = " << std::setprecision(9+1) << filteredData[station][pol][sample][ch][0] << " 2*weight = " << 2*expectedSums[ch] << std::endl;
-                                    }
-                                }
-                                if (!fpEquals(filteredData[station][pol][sample][ch][1], (float)(3 * expectedSums[ch]), eps)) {
-                                    if (++nrErrors < 100) {
-                                        std::cerr << "3b.filtered["<<station<<"]["<<pol<<"]["<<sample<<"]["<<ch<<
-                                            "][1] = " << std::setprecision(9+1) << filteredData[station][pol][sample][ch][1] << " 3*weight = " << 3*expectedSums[ch] << std::endl;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                delete[] expectedSums;
-                if (nrErrors == 0) {
-                    std::cout << "FIR_FilterTest 3: test OK" << std::endl;
-                } else {
-                    std::cerr << "FIR_FilterTest 3: " << nrErrors << " unexpected output values" << std::endl;
-                    testOk = false;
-                }
-
-
-                check(testOk, true);
-            }
-        };
-    }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/IncoherentStokesTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/IncoherentStokesTest.h
deleted file mode 100644
index 945ba1f49b329e005cf35474baaf8355376b07dd..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/IncoherentStokesTest.h
+++ /dev/null
@@ -1,61 +0,0 @@
-//# IncoherentStokesTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_INCOHERENTSTOKESTEST_H
-#define GPUPROC_INCOHERENTSTOKESTEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/IncoherentStokesKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    struct IncoherentStokesTest : public UnitTest
-    {
-      IncoherentStokesTest(const Parset &ps)
-        :
-        UnitTest(ps, "BeamFormer/IncoherentStokes.cl")
-      {
-        if (ps.settings.antennaFields.size() >= 5 && ps.nrChannelsPerSubband() >= 14 && ps.nrSamplesPerChannel() >= 108) {
-          MultiArraySharedBuffer<std::complex<float>, 4> inputData(boost::extents[ps.settings.antennaFields.size()][ps.nrChannelsPerSubband()][ps.nrSamplesPerChannel()][NR_POLARIZATIONS], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          MultiArraySharedBuffer<float, 3> stokesData(boost::extents[ps.nrIncoherentStokes()][ps.nrSamplesPerChannel() / ps.incoherentStokesTimeIntegrationFactor()][ps.nrChannelsPerSubband()], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          IncoherentStokesKernel kernel(ps, queue, program, stokesData, inputData);
-
-          inputData[4][13][107][0] = std::complex<float>(2, 3);
-          inputData[4][13][107][1] = std::complex<float>(4, 5);
-
-          inputData.hostToDevice(CL_FALSE);
-          kernel.enqueue(queue, counter);
-          stokesData.deviceToHost(CL_TRUE);
-
-          const static float expected[] = { 54, -28, 46, 4 };
-
-          for (unsigned stokes = 0; stokes < ps.nrIncoherentStokes(); stokes++)
-            check(stokesData[stokes][107 / ps.incoherentStokesTimeIntegrationFactor()][13], expected[stokes]);
-        }
-      }
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/IntToFloatTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/IntToFloatTest.h
deleted file mode 100644
index 0f0459098efbf6a3fafd3fa581c1d2a5f06623e0..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/IntToFloatTest.h
+++ /dev/null
@@ -1,65 +0,0 @@
-//# IntToFloatTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_INTTOFLOATTEST_H
-#define GPUPROC_INTTOFLOATTEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/IntToFloatKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct IntToFloatTest : public UnitTest
-    {
-      IntToFloatTest(const Parset &ps)
-        :
-        UnitTest(ps, "BeamFormer/IntToFloat.cl")
-      {
-        if (ps.settings.antennaFields.size() >= 3 && ps.nrSamplesPerChannel() * ps.nrChannelsPerSubband() >= 10077) {
-          MultiArraySharedBuffer<char, 4> inputData(boost::extents[ps.settings.antennaFields.size()][ps.nrSamplesPerChannel() * ps.nrChannelsPerSubband()][NR_POLARIZATIONS][ps.nrBytesPerComplexSample()], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 3> outputData(boost::extents[ps.settings.antennaFields.size()][NR_POLARIZATIONS][ps.nrSamplesPerChannel() * ps.nrChannelsPerSubband()], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          IntToFloatKernel kernel(ps, queue, program, outputData, inputData);
-
-          switch (ps.nrBytesPerComplexSample()) {
-          case 4: reinterpret_cast<std::complex<short> &>(inputData[2][10076][1][0]) = 7;
-            break;
-
-          case 2: reinterpret_cast<std::complex<signed char> &>(inputData[2][10076][1][0]) = 7;
-            break;
-
-          case 1: reinterpret_cast<i4complex &>(inputData[2][10076][1][0]) = i4complex(7, 0);
-            break;
-          }
-
-          inputData.hostToDevice(CL_FALSE);
-          kernel.enqueue(queue, counter);
-          outputData.deviceToHost(CL_TRUE);
-          check(outputData[2][1][10076], std::complex<float>(7.0f, 0));
-        }
-      }
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_BeamFormerTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_BeamFormerTest.h
deleted file mode 100644
index feb1732014797308bd22ee91e4b1b426f2d4a969..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_BeamFormerTest.h
+++ /dev/null
@@ -1,70 +0,0 @@
-//# UHEP_BeamFormerTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_UHEP_BEAMFORMERTEST_H
-#define GPUPROC_UHEP_BEAMFORMERTEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/UHEP_BeamFormerKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct UHEP_BeamFormerTest : public UnitTest
-    {
-      UHEP_BeamFormerTest(const Parset &ps)
-        :
-        UnitTest(ps, "UHEP/BeamFormer.cl")
-      {
-        if (ps.settings.antennaFields.size() >= 5 && (ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1) >= 13 && ps.nrSubbands() >= 7 && ps.nrTABs(0) >= 6) {
-          MultiArraySharedBuffer<char, 5> inputSamples(boost::extents[ps.settings.antennaFields.size()][ps.nrSubbands()][ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1][NR_POLARIZATIONS][ps.nrBytesPerComplexSample()], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 3> beamFormerWeights(boost::extents[ps.settings.antennaFields.size()][ps.nrSubbands()][ps.nrTABs(0)], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 4> complexVoltages(boost::extents[ps.nrSubbands()][ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1][ps.nrTABs(0)][NR_POLARIZATIONS], queue, CL_MEM_READ_ONLY, CL_MEM_READ_WRITE);
-          UHEP_BeamFormerKernel beamFormer(ps, program, complexVoltages, inputSamples, beamFormerWeights);
-
-          switch (ps.nrBytesPerComplexSample()) {
-          case 4: reinterpret_cast<std::complex<short> &>(inputSamples[4][6][12][1][0]) = std::complex<short>(2, 3);
-            break;
-
-          case 2: reinterpret_cast<std::complex<signed char> &>(inputSamples[4][6][12][1][0]) = std::complex<signed char>(2, 3);
-            break;
-
-          case 1: reinterpret_cast<i4complex &>(inputSamples[4][6][12][1][0]) = i4complex(2, 3);
-            break;
-          }
-
-          beamFormerWeights[4][6][5] = std::complex<float>(4, 5);
-
-          inputSamples.hostToDevice(CL_FALSE);
-          beamFormerWeights.hostToDevice(CL_FALSE);
-          beamFormer.enqueue(queue, counter);
-          complexVoltages.deviceToHost(CL_TRUE);
-
-          check(complexVoltages[6][12][5][1], std::complex<float>(-7, 22));
-        }
-      }
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_TransposeTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_TransposeTest.h
deleted file mode 100644
index 654b572c7262ca7058da489f7df13ae3acf5680b..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_TransposeTest.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//# UHEP_TransposeTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_UHEP_TRANSPOSETEST_H
-#define GPUPROC_UHEP_TRANSPOSETEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/UHEP_TransposeKernel.h>
-#include <GPUProc/UHEP/InvertedStationPPFWeights.h> // reverseSubbandMapping
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct UHEP_TransposeTest : public UnitTest
-    {
-      UHEP_TransposeTest(const Parset &ps)
-        :
-        UnitTest(ps, "UHEP/Transpose.cl")
-      {
-        if (ps.nrSubbands() >= 19 && ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1 >= 175 && ps.nrTABs(0) >= 5) {
-          MultiArraySharedBuffer<std::complex<float>, 4> transposedData(boost::extents[ps.nrTABs(0)][NR_POLARIZATIONS][ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1][512], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          MultiArraySharedBuffer<std::complex<float>, 4> complexVoltages(boost::extents[ps.nrSubbands()][ps.nrSamplesPerChannel() + NR_STATION_FILTER_TAPS - 1][ps.nrTABs(0)][NR_POLARIZATIONS], queue, CL_MEM_READ_WRITE, CL_MEM_READ_ONLY);
-          cl::Buffer devReverseSubbandMapping(context, CL_MEM_READ_ONLY, 512 * sizeof(int));
-          UHEP_TransposeKernel transpose(ps, program, transposedData, complexVoltages, devReverseSubbandMapping);
-
-          complexVoltages[18][174][4][1] = std::complex<float>(24, 42);
-
-          queue.enqueueWriteBuffer(devReverseSubbandMapping, CL_FALSE, 0, 512 * sizeof(int), reverseSubbandMapping);
-          complexVoltages.hostToDevice(CL_FALSE);
-          transpose.enqueue(queue, counter);
-          transposedData.deviceToHost(CL_TRUE);
-
-          check(transposedData[4][1][174][38], std::complex<float>(24, 42));
-        }
-      }
-    };
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_TriggerTest.h b/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_TriggerTest.h
deleted file mode 100644
index d5989cef036cc2aa352b4b8a419499c40a83e9f2..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/Kernels/UHEP_TriggerTest.h
+++ /dev/null
@@ -1,60 +0,0 @@
-//# UHEP_TriggerTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef GPUPROC_UHEP_TRIGGERTEST_H
-#define GPUPROC_UHEP_TRIGGERTEST_H
-
-#include <UnitTest.h>
-#include <GPUProc/Kernels/UHEP_TriggerKernel.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    struct UHEP_TriggerTest : public UnitTest
-    {
-      UHEP_TriggerTest(const Parset &ps)
-        :
-        UnitTest(ps, "UHEP/Trigger.cl")
-      {
-        if (ps.nrTABs(0) >= 4 && 1024 * ps.nrSamplesPerChannel() > 100015) {
-          MultiArraySharedBuffer<float, 3> inputData(boost::extents[ps.nrTABs(0)][NR_POLARIZATIONS][ps.nrSamplesPerChannel() * 1024], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-          MultiArraySharedBuffer<TriggerInfo, 1> triggerInfo(boost::extents[ps.nrTABs(0)], queue, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY);
-          UHEP_TriggerKernel trigger(ps, program, triggerInfo, inputData);
-
-          inputData[3][1][100015] = 1000;
-
-          inputData.hostToDevice(CL_FALSE);
-          trigger.enqueue(queue, counter);
-          triggerInfo.deviceToHost(CL_TRUE);
-
-          std::cout << "trigger info: mean = " << triggerInfo[3].mean << ", variance = " << triggerInfo[3].variance << ", bestValue = " << triggerInfo[3].bestValue << ", bestApproxIndex = " << triggerInfo[3].bestApproxIndex << std::endl;
-          //check(triggerInfo[3].mean, (float) (1000.0f * 1000.0f) / (float) (ps.nrSamplesPerChannel() * 1024));
-          check(triggerInfo[3].bestValue, 1000.0f * 1000.0f);
-          check(triggerInfo[3].bestApproxIndex, 100016U);
-        }
-      }
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.cc b/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.cc
deleted file mode 100644
index cb15a1c42c61cec2545dd9b1ffb7282076058ea1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-//# RTCP_UnitTest.cc
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include <iostream>
-
-#include <Common/lofar_complex.h>
-#include <Common/LofarLogger.h>
-#include <Common/Exception.h>
-#include <CoInterface/Parset.h>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/MultiDimArrayHostBuffer.h>
-#include <GPUProc/opencl/gpu_utils.h>
-
-#include <UnitTest.h>
-#include "Kernels/IncoherentStokesTest.h"
-#include "Kernels/IntToFloatTest.h"
-#include "Kernels/BeamFormerTransposeTest.h"
-#include "Kernels/DedispersionChirpTest.h"
-#include "Kernels/CoherentStokesTest.h"
-//#include "Kernels/UHEP_BeamFormerTest.h"
-//#include "Kernels/UHEP_TransposeTest.h"
-#include "Kernels/BeamFormerTest.h"
-#include "Kernels/CorrelateTriangleTest.h"
-//#include "Kernels/UHEP_TriggerTest.h"
-#include "Kernels/CorrelateRectangleTest.h"
-#include "Kernels/CorrelatorTest.h"
-#include "Kernels/FFT_Test.h"
-//#include "Kernels/AMD_FFT_Test.h"
-#include "Kernels/FIR_FilterTest.h"
-
-//#include  <UnitTest++.h>
-
-using namespace LOFAR;
-using namespace LOFAR::Cobalt;
-
-// Use our own terminate handler
-Exception::TerminateHandler t(Exception::terminate);
-
-int main(int argc, char **argv)
-{
-
-  INIT_LOGGER("RTCP");
-  std::cout << "running ..." << std::endl;
-
-  if (argc < 2)
-  {
-    std::cerr << "usage: " << argv[0] << " parset" << std::endl;
-    return 1;
-  }
-
-  Parset ps(argv[1]);
-
-  std::cout << "Obs ps: nSt=" << ps.settings.antennaFields.size() << " nPol=" << NR_POLARIZATIONS
-            << " nSampPerCh=" << ps.nrSamplesPerChannel() << " nChPerSb="
-            << ps.nrChannelsPerSubband() << " nTaps=" << ps.nrPPFTaps()
-            << " nBitsPerSamp=" << ps.nrBitsPerSample() << std::endl;
-
-  //Correlation unittest
-  (FIR_FilterTest)(ps);
-  (FFT_Test)(ps);
-  //(AMD_FFT_Test)(ps);
-  (CorrelatorTest)(ps);
-#if defined USE_NEW_CORRELATOR
-  (CorrelateRectangleTest)(ps);
-  (CorrelateTriangleTest)(ps);
-#endif
-
-  // Beamforming unittest
-  (IncoherentStokesTest)(ps);
-  (IntToFloatTest)(ps);
-  (BeamFormerTest)(ps);
-  (BeamFormerTransposeTest)(ps);
-  (DedispersionChirpTest)(ps);
-  (CoherentStokesTest)(ps);
-
-  // UHEP unittest
-  //(UHEP_BeamFormerTest)(ps);
-  //(UHEP_TransposeTest)(ps);
-  //(UHEP_TriggerTest)(ps);
-
-  //return UnitTest::RunAllTests();
-  return 0;
-}
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.77_Stations b/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.77_Stations
deleted file mode 100644
index 962a73e65a83c7564701aecf319cc88d105fc62f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.77_Stations
+++ /dev/null
@@ -1,267 +0,0 @@
-Observation.ObsID = 0
-OLAP.CNProc.phaseTwoPsets = [0..76]
-#OLAP.CNProc.phaseTwoPsets = [0..7]
-Observation.nrBitsPerSample			= 8
-OLAP.nrTimesInFrame			= 16
-Observation.nrSlotsInFrame		= 122
-OLAP.nrSecondsOfBuffer			= 1.2
-OLAP.CNProc.nrPPFTaps			= 16
-Cobalt.realTime				= false
-Observation.startTime			= '2010-04-28 17:25:03'
-Observation.stopTime			= '2010-04-28 17:25:05'
-OLAP.storageStationNames		= [ST00 .. ST76]
-#OLAP.storageStationNames		= [ST00 .. ST07]
-Observation.subbandList			= [12 .. 499]
-Observation.bandFilter			= LBA_10_90
-Cobalt.Correlator.nrChannelsPerSubband		= 64
-OLAP.CNProc.integrationSteps		= 3072	# FIXME: rename
-Observation.sampleClock			= 200
-Cobalt.correctBandPass			= true
-Observation.beamList			= [488 * 0]
-Observation.nrBeams = 1
-Observation.Beam[0].angle1	= 0
-Observation.Beam[0].angle2	= 0
-Observation.Beam[0].directionType	= J2000
-Observation.Beam[0].nrTiedArrayBeams= 1
-Observation.Beam[0].TiedArrayBeam[0].absoluteAngle1	= 0
-Observation.Beam[0].TiedArrayBeam[0].absoluteAngle2	= 0
-Observation.Beam[0].TiedArrayBeam[0].directionType	= J2000
-Cobalt.delayCompensation			= true
-OLAP.CNProc.partition			= PartitionName
-PIC.Core.IONProc.PartitionName[0].inputs = [ST00/RSP0..ST00/RSP3]
-PIC.Core.IONProc.PartitionName[1].inputs = [ST01/RSP0..ST01/RSP3]
-PIC.Core.IONProc.PartitionName[2].inputs = [ST02/RSP0..ST02/RSP3]
-PIC.Core.IONProc.PartitionName[3].inputs = [ST03/RSP0..ST03/RSP3]
-PIC.Core.IONProc.PartitionName[4].inputs = [ST04/RSP0..ST04/RSP3]
-PIC.Core.IONProc.PartitionName[5].inputs = [ST05/RSP0..ST05/RSP3]
-PIC.Core.IONProc.PartitionName[6].inputs = [ST06/RSP0..ST06/RSP3]
-PIC.Core.IONProc.PartitionName[7].inputs = [ST07/RSP0..ST07/RSP3]
-PIC.Core.IONProc.PartitionName[8].inputs = [ST08/RSP0..ST08/RSP3]
-PIC.Core.IONProc.PartitionName[9].inputs = [ST09/RSP0..ST09/RSP3]
-PIC.Core.IONProc.PartitionName[10].inputs = [ST10/RSP0..ST10/RSP3]
-PIC.Core.IONProc.PartitionName[11].inputs = [ST11/RSP0..ST11/RSP3]
-PIC.Core.IONProc.PartitionName[12].inputs = [ST12/RSP0..ST12/RSP3]
-PIC.Core.IONProc.PartitionName[13].inputs = [ST13/RSP0..ST13/RSP3]
-PIC.Core.IONProc.PartitionName[14].inputs = [ST14/RSP0..ST14/RSP3]
-PIC.Core.IONProc.PartitionName[15].inputs = [ST15/RSP0..ST15/RSP3]
-PIC.Core.IONProc.PartitionName[16].inputs = [ST16/RSP0..ST16/RSP3]
-PIC.Core.IONProc.PartitionName[17].inputs = [ST17/RSP0..ST17/RSP3]
-PIC.Core.IONProc.PartitionName[18].inputs = [ST18/RSP0..ST18/RSP3]
-PIC.Core.IONProc.PartitionName[19].inputs = [ST19/RSP0..ST19/RSP3]
-PIC.Core.IONProc.PartitionName[20].inputs = [ST20/RSP0..ST20/RSP3]
-PIC.Core.IONProc.PartitionName[21].inputs = [ST21/RSP0..ST21/RSP3]
-PIC.Core.IONProc.PartitionName[22].inputs = [ST22/RSP0..ST22/RSP3]
-PIC.Core.IONProc.PartitionName[23].inputs = [ST23/RSP0..ST23/RSP3]
-PIC.Core.IONProc.PartitionName[24].inputs = [ST24/RSP0..ST24/RSP3]
-PIC.Core.IONProc.PartitionName[25].inputs = [ST25/RSP0..ST25/RSP3]
-PIC.Core.IONProc.PartitionName[26].inputs = [ST26/RSP0..ST26/RSP3]
-PIC.Core.IONProc.PartitionName[27].inputs = [ST27/RSP0..ST27/RSP3]
-PIC.Core.IONProc.PartitionName[28].inputs = [ST28/RSP0..ST28/RSP3]
-PIC.Core.IONProc.PartitionName[29].inputs = [ST29/RSP0..ST29/RSP3]
-PIC.Core.IONProc.PartitionName[30].inputs = [ST30/RSP0..ST30/RSP3]
-PIC.Core.IONProc.PartitionName[31].inputs = [ST31/RSP0..ST31/RSP3]
-PIC.Core.IONProc.PartitionName[32].inputs = [ST32/RSP0..ST32/RSP3]
-PIC.Core.IONProc.PartitionName[33].inputs = [ST33/RSP0..ST33/RSP3]
-PIC.Core.IONProc.PartitionName[34].inputs = [ST34/RSP0..ST34/RSP3]
-PIC.Core.IONProc.PartitionName[35].inputs = [ST35/RSP0..ST35/RSP3]
-PIC.Core.IONProc.PartitionName[36].inputs = [ST36/RSP0..ST36/RSP3]
-PIC.Core.IONProc.PartitionName[37].inputs = [ST37/RSP0..ST37/RSP3]
-PIC.Core.IONProc.PartitionName[38].inputs = [ST38/RSP0..ST38/RSP3]
-PIC.Core.IONProc.PartitionName[39].inputs = [ST39/RSP0..ST39/RSP3]
-PIC.Core.IONProc.PartitionName[40].inputs = [ST40/RSP0..ST40/RSP3]
-PIC.Core.IONProc.PartitionName[41].inputs = [ST41/RSP0..ST41/RSP3]
-PIC.Core.IONProc.PartitionName[42].inputs = [ST42/RSP0..ST42/RSP3]
-PIC.Core.IONProc.PartitionName[43].inputs = [ST43/RSP0..ST43/RSP3]
-PIC.Core.IONProc.PartitionName[44].inputs = [ST44/RSP0..ST44/RSP3]
-PIC.Core.IONProc.PartitionName[45].inputs = [ST45/RSP0..ST45/RSP3]
-PIC.Core.IONProc.PartitionName[46].inputs = [ST46/RSP0..ST46/RSP3]
-PIC.Core.IONProc.PartitionName[47].inputs = [ST47/RSP0..ST47/RSP3]
-PIC.Core.IONProc.PartitionName[48].inputs = [ST48/RSP0..ST48/RSP3]
-PIC.Core.IONProc.PartitionName[49].inputs = [ST49/RSP0..ST49/RSP3]
-PIC.Core.IONProc.PartitionName[50].inputs = [ST50/RSP0..ST50/RSP3]
-PIC.Core.IONProc.PartitionName[51].inputs = [ST51/RSP0..ST51/RSP3]
-PIC.Core.IONProc.PartitionName[52].inputs = [ST52/RSP0..ST52/RSP3]
-PIC.Core.IONProc.PartitionName[53].inputs = [ST53/RSP0..ST53/RSP3]
-PIC.Core.IONProc.PartitionName[54].inputs = [ST54/RSP0..ST54/RSP3]
-PIC.Core.IONProc.PartitionName[55].inputs = [ST55/RSP0..ST55/RSP3]
-PIC.Core.IONProc.PartitionName[56].inputs = [ST56/RSP0..ST56/RSP3]
-PIC.Core.IONProc.PartitionName[57].inputs = [ST57/RSP0..ST57/RSP3]
-PIC.Core.IONProc.PartitionName[58].inputs = [ST58/RSP0..ST58/RSP3]
-PIC.Core.IONProc.PartitionName[59].inputs = [ST59/RSP0..ST59/RSP3]
-PIC.Core.IONProc.PartitionName[60].inputs = [ST60/RSP0..ST60/RSP3]
-PIC.Core.IONProc.PartitionName[61].inputs = [ST61/RSP0..ST61/RSP3]
-PIC.Core.IONProc.PartitionName[62].inputs = [ST62/RSP0..ST62/RSP3]
-PIC.Core.IONProc.PartitionName[63].inputs = [ST63/RSP0..ST63/RSP3]
-PIC.Core.IONProc.PartitionName[64].inputs = [ST64/RSP0..ST64/RSP3]
-PIC.Core.IONProc.PartitionName[65].inputs = [ST65/RSP0..ST65/RSP3]
-PIC.Core.IONProc.PartitionName[66].inputs = [ST66/RSP0..ST66/RSP3]
-PIC.Core.IONProc.PartitionName[67].inputs = [ST67/RSP0..ST67/RSP3]
-PIC.Core.IONProc.PartitionName[68].inputs = [ST68/RSP0..ST68/RSP3]
-PIC.Core.IONProc.PartitionName[69].inputs = [ST69/RSP0..ST69/RSP3]
-PIC.Core.IONProc.PartitionName[70].inputs = [ST70/RSP0..ST70/RSP3]
-PIC.Core.IONProc.PartitionName[71].inputs = [ST71/RSP0..ST71/RSP3]
-PIC.Core.IONProc.PartitionName[72].inputs = [ST72/RSP0..ST72/RSP3]
-PIC.Core.IONProc.PartitionName[73].inputs = [ST73/RSP0..ST73/RSP3]
-PIC.Core.IONProc.PartitionName[74].inputs = [ST74/RSP0..ST74/RSP3]
-PIC.Core.IONProc.PartitionName[75].inputs = [ST75/RSP0..ST75/RSP3]
-PIC.Core.IONProc.PartitionName[76].inputs = [ST76/RSP0..ST76/RSP3]
-PIC.Core.ST00.RSP.ports = [ 4 * null: ]
-PIC.Core.ST01.RSP.ports = [ 4 * null: ]
-PIC.Core.ST02.RSP.ports = [ 4 * null: ]
-PIC.Core.ST03.RSP.ports = [ 4 * null: ]
-PIC.Core.ST04.RSP.ports = [ 4 * null: ]
-PIC.Core.ST05.RSP.ports = [ 4 * null: ]
-PIC.Core.ST06.RSP.ports = [ 4 * null: ]
-PIC.Core.ST07.RSP.ports = [ 4 * null: ]
-PIC.Core.ST08.RSP.ports = [ 4 * null: ]
-PIC.Core.ST09.RSP.ports = [ 4 * null: ]
-PIC.Core.ST10.RSP.ports = [ 4 * null: ]
-PIC.Core.ST11.RSP.ports = [ 4 * null: ]
-PIC.Core.ST12.RSP.ports = [ 4 * null: ]
-PIC.Core.ST13.RSP.ports = [ 4 * null: ]
-PIC.Core.ST14.RSP.ports = [ 4 * null: ]
-PIC.Core.ST15.RSP.ports = [ 4 * null: ]
-PIC.Core.ST16.RSP.ports = [ 4 * null: ]
-PIC.Core.ST17.RSP.ports = [ 4 * null: ]
-PIC.Core.ST18.RSP.ports = [ 4 * null: ]
-PIC.Core.ST19.RSP.ports = [ 4 * null: ]
-PIC.Core.ST20.RSP.ports = [ 4 * null: ]
-PIC.Core.ST21.RSP.ports = [ 4 * null: ]
-PIC.Core.ST22.RSP.ports = [ 4 * null: ]
-PIC.Core.ST23.RSP.ports = [ 4 * null: ]
-PIC.Core.ST24.RSP.ports = [ 4 * null: ]
-PIC.Core.ST25.RSP.ports = [ 4 * null: ]
-PIC.Core.ST26.RSP.ports = [ 4 * null: ]
-PIC.Core.ST27.RSP.ports = [ 4 * null: ]
-PIC.Core.ST28.RSP.ports = [ 4 * null: ]
-PIC.Core.ST29.RSP.ports = [ 4 * null: ]
-PIC.Core.ST30.RSP.ports = [ 4 * null: ]
-PIC.Core.ST31.RSP.ports = [ 4 * null: ]
-PIC.Core.ST32.RSP.ports = [ 4 * null: ]
-PIC.Core.ST33.RSP.ports = [ 4 * null: ]
-PIC.Core.ST34.RSP.ports = [ 4 * null: ]
-PIC.Core.ST35.RSP.ports = [ 4 * null: ]
-PIC.Core.ST36.RSP.ports = [ 4 * null: ]
-PIC.Core.ST37.RSP.ports = [ 4 * null: ]
-PIC.Core.ST38.RSP.ports = [ 4 * null: ]
-PIC.Core.ST39.RSP.ports = [ 4 * null: ]
-PIC.Core.ST40.RSP.ports = [ 4 * null: ]
-PIC.Core.ST41.RSP.ports = [ 4 * null: ]
-PIC.Core.ST42.RSP.ports = [ 4 * null: ]
-PIC.Core.ST43.RSP.ports = [ 4 * null: ]
-PIC.Core.ST44.RSP.ports = [ 4 * null: ]
-PIC.Core.ST45.RSP.ports = [ 4 * null: ]
-PIC.Core.ST46.RSP.ports = [ 4 * null: ]
-PIC.Core.ST47.RSP.ports = [ 4 * null: ]
-PIC.Core.ST48.RSP.ports = [ 4 * null: ]
-PIC.Core.ST49.RSP.ports = [ 4 * null: ]
-PIC.Core.ST50.RSP.ports = [ 4 * null: ]
-PIC.Core.ST51.RSP.ports = [ 4 * null: ]
-PIC.Core.ST52.RSP.ports = [ 4 * null: ]
-PIC.Core.ST53.RSP.ports = [ 4 * null: ]
-PIC.Core.ST54.RSP.ports = [ 4 * null: ]
-PIC.Core.ST55.RSP.ports = [ 4 * null: ]
-PIC.Core.ST56.RSP.ports = [ 4 * null: ]
-PIC.Core.ST57.RSP.ports = [ 4 * null: ]
-PIC.Core.ST58.RSP.ports = [ 4 * null: ]
-PIC.Core.ST59.RSP.ports = [ 4 * null: ]
-PIC.Core.ST60.RSP.ports = [ 4 * null: ]
-PIC.Core.ST61.RSP.ports = [ 4 * null: ]
-PIC.Core.ST62.RSP.ports = [ 4 * null: ]
-PIC.Core.ST63.RSP.ports = [ 4 * null: ]
-PIC.Core.ST64.RSP.ports = [ 4 * null: ]
-PIC.Core.ST65.RSP.ports = [ 4 * null: ]
-PIC.Core.ST66.RSP.ports = [ 4 * null: ]
-PIC.Core.ST67.RSP.ports = [ 4 * null: ]
-PIC.Core.ST68.RSP.ports = [ 4 * null: ]
-PIC.Core.ST69.RSP.ports = [ 4 * null: ]
-PIC.Core.ST70.RSP.ports = [ 4 * null: ]
-PIC.Core.ST71.RSP.ports = [ 4 * null: ]
-PIC.Core.ST72.RSP.ports = [ 4 * null: ]
-PIC.Core.ST73.RSP.ports = [ 4 * null: ]
-PIC.Core.ST74.RSP.ports = [ 4 * null: ]
-PIC.Core.ST75.RSP.ports = [ 4 * null: ]
-PIC.Core.ST76.RSP.ports = [ 4 * null: ]
-Cobalt.BeamFormer.CoherentStokes.which	= IQUV # FIXME: conditional
-Cobalt.BeamFormer.CoherentStokes.timeIntegrationFactor = 1 # FIXME: conditional
-Cobalt.BeamFormer.IncoherentStokes.which	= IQUV # FIXME: conditional
-Cobalt.BeamFormer.IncoherentStokes.timeIntegrationFactor = 1 # FIXME: conditional
-OLAP.tiedArrayStationNames		= [ST00 .. ST76] # FIXME???: conditional
-Observation.referencePhaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST00.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST01.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST02.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST03.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST04.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST05.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST06.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST07.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST08.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST09.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST10.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST11.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST12.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST13.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST14.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST15.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST16.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST17.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST18.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST19.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST20.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST21.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST22.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST23.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST24.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST25.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST26.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST27.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST28.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST29.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST30.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST31.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST32.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST33.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST34.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST35.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST36.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST37.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST38.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST39.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST40.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST41.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST42.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST43.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST44.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST45.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST46.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST47.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST48.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST49.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST50.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST51.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST52.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST53.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST54.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST55.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST56.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST57.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST58.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST59.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST60.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST61.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST62.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST63.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST64.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST65.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST66.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST67.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST68.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST69.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST70.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST71.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST72.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST73.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST74.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST75.phaseCenter = [3826577.066, 461022.948, 5064892.786]
-PIC.Core.ST76.phaseCenter = [3826577.066, 461022.948, 5064892.786]
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.AARTFAAC b/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.AARTFAAC
deleted file mode 100644
index f93f92e31d0ede5a6fdd8ee03271e13d9f307dc2..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.AARTFAAC
+++ /dev/null
@@ -1,2120 +0,0 @@
-OLAP.CNProc.integrationSteps		 = 1024 #1536
-OLAP.CNProc.phaseOnePsets		 = [0..287]
-#OLAP.CNProc.phaseTwoPsets		 = [0..4]
-OLAP.CNProc.phaseTwoPsets		 = [0]
-OLAP.CNProc.phaseThreePsets		 = []
-#OLAP.CNProc.phaseOneTwoCores		 = [0]
-OLAP.CNProc.phaseOneTwoCores		 = [0..19]
-OLAP.CNProc.phaseThreeCores		 = []
-OLAP.CNProc.partition			 = PartitionName
-OLAP.CNProc.tabList			 = []
-Cobalt.realTime				 = F
-OLAP.maxNetworkDelay			 = .1
-Cobalt.correctClocks			 = T
-Cobalt.correctBandPass			 = T
-Observation.nrBitsPerSample			 = 8
-OLAP.nrTimesInFrame			 = 16
-OLAP.nrSecondsOfBuffer			 = 0.5
-OLAP.CNProc.nrPPFTaps			 = 16
-OLAP.Storage.userName			 = 
-OLAP.Storage.sshIdentityFile = 
-OLAP.Storage.msWriter			 = outputProc
-OLAP.storageNodeList			 = [288*0]
-OLAP.OLAP_Conn.IONProc_Storage_Ports	 = [8300..9000]
-OLAP.OLAP_Conn.IONProc_Storage_Transport = TCP
-OLAP.OLAP_Conn.rawDataOutputOnly	 = F
-Observation.VirtualInstrument.stationList	= [CS002D00,CS002D01,CS002D02,CS002D03,CS002D04,CS002D05,CS002D06,CS002D07,CS002D08,CS002D09,CS002D10,CS002D11,CS002D12,CS002D13,CS002D14,CS002D15,CS002D16,CS002D17,CS002D18,CS002D19,CS002D20,CS002D21,CS002D22,CS002D23,CS002D24,CS002D25,CS002D26,CS002D27,CS002D28,CS002D29,CS002D30,CS002D31,CS002D32,CS002D33,CS002D34,CS002D35,CS002D36,CS002D37,CS002D38,CS002D39,CS002D40,CS002D41,CS002D42,CS002D43,CS002D44,CS002D45,CS002D46,CS002D47,CS003D00,CS003D01,CS003D02,CS003D03,CS003D04,CS003D05,CS003D06,CS003D07,CS003D08,CS003D09,CS003D10,CS003D11,CS003D12,CS003D13,CS003D14,CS003D15,CS003D16,CS003D17,CS003D18,CS003D19,CS003D20,CS003D21,CS003D22,CS003D23,CS003D24,CS003D25,CS003D26,CS003D27,CS003D28,CS003D29,CS003D30,CS003D31,CS003D32,CS003D33,CS003D34,CS003D35,CS003D36,CS003D37,CS003D38,CS003D39,CS003D40,CS003D41,CS003D42,CS003D43,CS003D44,CS003D45,CS003D46,CS003D47,CS004D00,CS004D01,CS004D02,CS004D03,CS004D04,CS004D05,CS004D06,CS004D07,CS004D08,CS004D09,CS004D10,CS004D11,CS004D12,CS004D13,CS004D14,CS004D15,CS004D16,CS004D17,CS004D18,CS004D19,CS004D20,CS004D21,CS004D22,CS004D23,CS004D24,CS004D25,CS004D26,CS004D27,CS004D28,CS004D29,CS004D30,CS004D31,CS004D32,CS004D33,CS004D34,CS004D35,CS004D36,CS004D37,CS004D38,CS004D39,CS004D40,CS004D41,CS004D42,CS004D43,CS004D44,CS004D45,CS004D46,CS004D47,CS005D00,CS005D01,CS005D02,CS005D03,CS005D04,CS005D05,CS005D06,CS005D07,CS005D08,CS005D09,CS005D10,CS005D11,CS005D12,CS005D13,CS005D14,CS005D15,CS005D16,CS005D17,CS005D18,CS005D19,CS005D20,CS005D21,CS005D22,CS005D23,CS005D24,CS005D25,CS005D26,CS005D27,CS005D28,CS005D29,CS005D30,CS005D31,CS005D32,CS005D33,CS005D34,CS005D35,CS005D36,CS005D37,CS005D38,CS005D39,CS005D40,CS005D41,CS005D42,CS005D43,CS005D44,CS005D45,CS005D46,CS005D47,CS006D00,CS006D01,CS006D02,CS006D03,CS006D04,CS006D05,CS006D06,CS006D07,CS006D08,CS006D09,CS006D10,CS006D11,CS006D12,CS006D13,CS006D14,CS006D15,CS006D16,CS006D17,CS006D18,CS006D19,CS006D20,CS006D21,CS006D22,CS006D23,CS006D24,CS006D25,CS006D26,CS006D27,CS006D28,CS006D29,CS006D30,CS006D31,CS006D32,CS006D33,CS006D34,CS006D35,CS006D36,CS006D37,CS006D38,CS006D39,CS006D40,CS006D41,CS006D42,CS006D43,CS006D44,CS006D45,CS006D46,CS006D47,CS007D00,CS007D01,CS007D02,CS007D03,CS007D04,CS007D05,CS007D06,CS007D07,CS007D08,CS007D09,CS007D10,CS007D11,CS007D12,CS007D13,CS007D14,CS007D15,CS007D16,CS007D17,CS007D18,CS007D19,CS007D20,CS007D21,CS007D22,CS007D23,CS007D24,CS007D25,CS007D26,CS007D27,CS007D28,CS007D29,CS007D30,CS007D31,CS007D32,CS007D33,CS007D34,CS007D35,CS007D36,CS007D37,CS007D38,CS007D39,CS007D40,CS007D41,CS007D42,CS007D43,CS007D44,CS007D45,CS007D46,CS007D47]
-OLAP.storageStationNames		 = [CS002D00,CS002D01,CS002D02,CS002D03,CS002D04,CS002D05,CS002D06,CS002D07,CS002D08,CS002D09,CS002D10,CS002D11,CS002D12,CS002D13,CS002D14,CS002D15,CS002D16,CS002D17,CS002D18,CS002D19,CS002D20,CS002D21,CS002D22,CS002D23,CS002D24,CS002D25,CS002D26,CS002D27,CS002D28,CS002D29,CS002D30,CS002D31,CS002D32,CS002D33,CS002D34,CS002D35,CS002D36,CS002D37,CS002D38,CS002D39,CS002D40,CS002D41,CS002D42,CS002D43,CS002D44,CS002D45,CS002D46,CS002D47,CS003D00,CS003D01,CS003D02,CS003D03,CS003D04,CS003D05,CS003D06,CS003D07,CS003D08,CS003D09,CS003D10,CS003D11,CS003D12,CS003D13,CS003D14,CS003D15,CS003D16,CS003D17,CS003D18,CS003D19,CS003D20,CS003D21,CS003D22,CS003D23,CS003D24,CS003D25,CS003D26,CS003D27,CS003D28,CS003D29,CS003D30,CS003D31,CS003D32,CS003D33,CS003D34,CS003D35,CS003D36,CS003D37,CS003D38,CS003D39,CS003D40,CS003D41,CS003D42,CS003D43,CS003D44,CS003D45,CS003D46,CS003D47,CS004D00,CS004D01,CS004D02,CS004D03,CS004D04,CS004D05,CS004D06,CS004D07,CS004D08,CS004D09,CS004D10,CS004D11,CS004D12,CS004D13,CS004D14,CS004D15,CS004D16,CS004D17,CS004D18,CS004D19,CS004D20,CS004D21,CS004D22,CS004D23,CS004D24,CS004D25,CS004D26,CS004D27,CS004D28,CS004D29,CS004D30,CS004D31,CS004D32,CS004D33,CS004D34,CS004D35,CS004D36,CS004D37,CS004D38,CS004D39,CS004D40,CS004D41,CS004D42,CS004D43,CS004D44,CS004D45,CS004D46,CS004D47,CS005D00,CS005D01,CS005D02,CS005D03,CS005D04,CS005D05,CS005D06,CS005D07,CS005D08,CS005D09,CS005D10,CS005D11,CS005D12,CS005D13,CS005D14,CS005D15,CS005D16,CS005D17,CS005D18,CS005D19,CS005D20,CS005D21,CS005D22,CS005D23,CS005D24,CS005D25,CS005D26,CS005D27,CS005D28,CS005D29,CS005D30,CS005D31,CS005D32,CS005D33,CS005D34,CS005D35,CS005D36,CS005D37,CS005D38,CS005D39,CS005D40,CS005D41,CS005D42,CS005D43,CS005D44,CS005D45,CS005D46,CS005D47,CS006D00,CS006D01,CS006D02,CS006D03,CS006D04,CS006D05,CS006D06,CS006D07,CS006D08,CS006D09,CS006D10,CS006D11,CS006D12,CS006D13,CS006D14,CS006D15,CS006D16,CS006D17,CS006D18,CS006D19,CS006D20,CS006D21,CS006D22,CS006D23,CS006D24,CS006D25,CS006D26,CS006D27,CS006D28,CS006D29,CS006D30,CS006D31,CS006D32,CS006D33,CS006D34,CS006D35,CS006D36,CS006D37,CS006D38,CS006D39,CS006D40,CS006D41,CS006D42,CS006D43,CS006D44,CS006D45,CS006D46,CS006D47,CS007D00,CS007D01,CS007D02,CS007D03,CS007D04,CS007D05,CS007D06,CS007D07,CS007D08,CS007D09,CS007D10,CS007D11,CS007D12,CS007D13,CS007D14,CS007D15,CS007D16,CS007D17,CS007D18,CS007D19,CS007D20,CS007D21,CS007D22,CS007D23,CS007D24,CS007D25,CS007D26,CS007D27,CS007D28,CS007D29,CS007D30,CS007D31,CS007D32,CS007D33,CS007D34,CS007D35,CS007D36,CS007D37,CS007D38,CS007D39,CS007D40,CS007D41,CS007D42,CS007D43,CS007D44,CS007D45,CS007D46,CS007D47]
-OLAP.tiedArrayStationNames		 = []
-Observation.Beam[0].nrTiedArrayBeams 	 = 2
-Observation.Beam[0].TiedArrayBeam[0].absoluteAngle1 = 6.3336866848083394 # Cygnus + 1.1
-Observation.Beam[0].TiedArrayBeam[0].absoluteAngle2 = 1.91094251447010637 # Cygnus + 1.2
-Observation.Beam[0].TiedArrayBeam[1].absoluteAngle1 = 6.5336866848083394 # Cygnus + 1.3
-Observation.Beam[0].TiedArrayBeam[1].absoluteAngle2 = 2.11094251447010637 # Cygnus + 1.4
-Cobalt.Correlator.nrBlocksPerIntegration		 = 2
-Cobalt.BeamFormer.CoherentStokes.timeIntegrationFactor = 1
-Cobalt.BeamFormer.IncoherentStokes.timeIntegrationFactor = 1
-Cobalt.BeamFormer.CoherentStokes.nrChannelsPerSubband = 16
-Cobalt.BeamFormer.IncoherentStokes.nrChannelsPerSubband = 16
-Cobalt.BeamFormer.CoherentStokes.which	 = I # IQUV
-Cobalt.BeamFormer.IncoherentStokes.which	 = I # IQUV
-OLAP.PencilInfo.storageNodeList		 = []
-Cobalt.delayCompensation			 = F
-OLAP.DelayComp.positionType		 = ITRF
-OLAP.DelayComp.nrCalcDelays		 = 16
-OLAP.dispersionMeasure			 = 2
-Observation.ObserverName		 = John
-Observation.Campaign.name		 = Test
-Observation.Campaign.title		 = dr.
-Observation.Campaign.contact		 = Jan David
-Observation.Campaign.PI			 = John
-Observation.Campaign.CO_I		 = John
-Observation.ProjectName			 = AARTFAAC
-Observation.nrPolarisations		 = 2
-Observation.antennaSet			 = LBA_OUTER
-Observation.bandFilter			 = LBA_30_90
-Observation.subbandList			 = [300..315]
-Observation.beamList			 = [16*0]
-Observation.rspBoardList		 = [16*0]
-Observation.rspSlotList		 	 = [0..15]
-Cobalt.Correlator.nrChannelsPerSubband		 = 64
-Observation.sampleClock			 = 200
-Observation.nrSlotsInFrame		 = 16
-Observation.ObsID			 = 1000000
-Observation.startTime			 = '2010-04-28 17:25:03'
-#Observation.stopTime			 = '2010-04-28 17:26:03'
-Observation.stopTime			 = '2010-04-28 17:25:08'
-Observation.nrBeams			 = 1
-Observation.AnaBeam[0].directionType	 = J2000
-Observation.AnaBeam[0].angle1		 = 5.2336866848083394 # Cygnus
-Observation.AnaBeam[0].angle2		 = 0.71094251447010637
-Observation.AnaBeam[0].target		 = Cygnus A
-Observation.Beam[0].directionType	 = J2000
-Observation.Beam[0].angle1		 = 5.2336866848083394 # Cygnus
-Observation.Beam[0].angle2		 = 0.71094251447010637
-Observation.Beam[0].target		 = Cygnus A
-#Observation.MSNameMask			 = /tmp/romein${RAID}/L${YEAR}_${MSNUMBER}/SB${SUBBAND}.MS
-OLAP.Storage.hosts			 = [localhost]
-Observation.DataProducts.Output_FilteredData.enabled	 = F
-Observation.DataProducts.Output_FilteredData.locations	 = [10*localhost:/tmp]
-Observation.DataProducts.Output_FilteredData.filenames	 = [SB000.filt,SB001.filt,SB002.filt,SB003.filt,SB004.filt]
-Observation.DataProducts.Output_Correlated.enabled	 = T
-Observation.DataProducts.Output_Correlated.locations	 = [16*localhost:.]
-Observation.DataProducts.Output_Correlated.filenames	 = [SB000.MS,SB001.MS,SB002.MS,SB003.MS,SB004.MS,SB005.MS,SB006.MS,SB007.MS,SB008.MS,SB009.MS,SB010.MS,SB011.MS,SB012.MS,SB013.MS,SB014.MS,SB015.MS]
-Observation.DataProducts.Output_IncoherentStokes.enabled	 = F
-Observation.DataProducts.Output_IncoherentStokes.locations	 = [10*localhost:/tmp]
-Observation.DataProducts.Output_IncoherentStokes.filenames	 = [SB000.incStokes,SB001.incStokes,SB002.incStokes,SB003.incStokes,SB004.incStokes]
-Observation.DataProducts.Output_Beamformed.enabled	 = F
-Observation.DataProducts.Output_Beamformed.locations	 = [4*localhost:/tmp]
-Observation.DataProducts.Output_Beamformed.filenames	 = [CV001.X,CV001.Y,CV002.X,CV002.Y]
-#Observation.DataProducts.Output_Beamformed.locations	 = [2*localhost:/tmp]
-#Observation.DataProducts.Output_Beamformed.filenames	 = [CV001.X,CV001.Y]
-Observation.DataProducts.Output_CoherentStokes.enabled	 = F
-Observation.DataProducts.Output_CoherentStokes.locations = [2*localhost:/tmp]
-Observation.DataProducts.Output_CoherentStokes.filenames = [Coherent.0.I,Coherent.1.I]
-#Observation.DataProducts.Output_CoherentStokes.locations = [8*localhost:/tmp]
-#Observation.DataProducts.Output_CoherentStokes.filenames = [Coherent.0.I,Coherent.0.Q,Coherent.0.U,Coherent.0.V,Coherent.1.I,Coherent.1.Q,Coherent.1.U,Coherent.1.V]
-Observation.DataProducts.Output_Trigger.enabled		 = F
-Observation.DataProducts.Output_Trigger.locations	 = []
-Observation.DataProducts.Output_Trigger.filenames	 = []
-OLAP.Storage.subbandsPerPart		 = 5
-OLAP.Storage.partsPerStokes		 = 1
-PIC.Core.IONProc.PartitionName[0].inputs = [CS002D00/RSP0]
-PIC.Core.IONProc.PartitionName[1].inputs = [CS002D01/RSP0]
-PIC.Core.IONProc.PartitionName[2].inputs = [CS002D02/RSP0]
-PIC.Core.IONProc.PartitionName[3].inputs = [CS002D03/RSP0]
-PIC.Core.IONProc.PartitionName[4].inputs = [CS002D04/RSP0]
-PIC.Core.IONProc.PartitionName[5].inputs = [CS002D05/RSP0]
-PIC.Core.IONProc.PartitionName[6].inputs = [CS002D06/RSP0]
-PIC.Core.IONProc.PartitionName[7].inputs = [CS002D07/RSP0]
-PIC.Core.IONProc.PartitionName[8].inputs = [CS002D08/RSP0]
-PIC.Core.IONProc.PartitionName[9].inputs = [CS002D09/RSP0]
-PIC.Core.IONProc.PartitionName[10].inputs = [CS002D10/RSP0]
-PIC.Core.IONProc.PartitionName[11].inputs = [CS002D11/RSP0]
-PIC.Core.IONProc.PartitionName[12].inputs = [CS002D12/RSP0]
-PIC.Core.IONProc.PartitionName[13].inputs = [CS002D13/RSP0]
-PIC.Core.IONProc.PartitionName[14].inputs = [CS002D14/RSP0]
-PIC.Core.IONProc.PartitionName[15].inputs = [CS002D15/RSP0]
-PIC.Core.IONProc.PartitionName[16].inputs = [CS002D16/RSP0]
-PIC.Core.IONProc.PartitionName[17].inputs = [CS002D17/RSP0]
-PIC.Core.IONProc.PartitionName[18].inputs = [CS002D18/RSP0]
-PIC.Core.IONProc.PartitionName[19].inputs = [CS002D19/RSP0]
-PIC.Core.IONProc.PartitionName[20].inputs = [CS002D20/RSP0]
-PIC.Core.IONProc.PartitionName[21].inputs = [CS002D21/RSP0]
-PIC.Core.IONProc.PartitionName[22].inputs = [CS002D22/RSP0]
-PIC.Core.IONProc.PartitionName[23].inputs = [CS002D23/RSP0]
-PIC.Core.IONProc.PartitionName[24].inputs = [CS002D24/RSP0]
-PIC.Core.IONProc.PartitionName[25].inputs = [CS002D25/RSP0]
-PIC.Core.IONProc.PartitionName[26].inputs = [CS002D26/RSP0]
-PIC.Core.IONProc.PartitionName[27].inputs = [CS002D27/RSP0]
-PIC.Core.IONProc.PartitionName[28].inputs = [CS002D28/RSP0]
-PIC.Core.IONProc.PartitionName[29].inputs = [CS002D29/RSP0]
-PIC.Core.IONProc.PartitionName[30].inputs = [CS002D30/RSP0]
-PIC.Core.IONProc.PartitionName[31].inputs = [CS002D31/RSP0]
-PIC.Core.IONProc.PartitionName[32].inputs = [CS002D32/RSP0]
-PIC.Core.IONProc.PartitionName[33].inputs = [CS002D33/RSP0]
-PIC.Core.IONProc.PartitionName[34].inputs = [CS002D34/RSP0]
-PIC.Core.IONProc.PartitionName[35].inputs = [CS002D35/RSP0]
-PIC.Core.IONProc.PartitionName[36].inputs = [CS002D36/RSP0]
-PIC.Core.IONProc.PartitionName[37].inputs = [CS002D37/RSP0]
-PIC.Core.IONProc.PartitionName[38].inputs = [CS002D38/RSP0]
-PIC.Core.IONProc.PartitionName[39].inputs = [CS002D39/RSP0]
-PIC.Core.IONProc.PartitionName[40].inputs = [CS002D40/RSP0]
-PIC.Core.IONProc.PartitionName[41].inputs = [CS002D41/RSP0]
-PIC.Core.IONProc.PartitionName[42].inputs = [CS002D42/RSP0]
-PIC.Core.IONProc.PartitionName[43].inputs = [CS002D43/RSP0]
-PIC.Core.IONProc.PartitionName[44].inputs = [CS002D44/RSP0]
-PIC.Core.IONProc.PartitionName[45].inputs = [CS002D45/RSP0]
-PIC.Core.IONProc.PartitionName[46].inputs = [CS002D46/RSP0]
-PIC.Core.IONProc.PartitionName[47].inputs = [CS002D47/RSP0]
-PIC.Core.IONProc.PartitionName[48].inputs = [CS003D00/RSP0]
-PIC.Core.IONProc.PartitionName[49].inputs = [CS003D01/RSP0]
-PIC.Core.IONProc.PartitionName[50].inputs = [CS003D02/RSP0]
-PIC.Core.IONProc.PartitionName[51].inputs = [CS003D03/RSP0]
-PIC.Core.IONProc.PartitionName[52].inputs = [CS003D04/RSP0]
-PIC.Core.IONProc.PartitionName[53].inputs = [CS003D05/RSP0]
-PIC.Core.IONProc.PartitionName[54].inputs = [CS003D06/RSP0]
-PIC.Core.IONProc.PartitionName[55].inputs = [CS003D07/RSP0]
-PIC.Core.IONProc.PartitionName[56].inputs = [CS003D08/RSP0]
-PIC.Core.IONProc.PartitionName[57].inputs = [CS003D09/RSP0]
-PIC.Core.IONProc.PartitionName[58].inputs = [CS003D10/RSP0]
-PIC.Core.IONProc.PartitionName[59].inputs = [CS003D11/RSP0]
-PIC.Core.IONProc.PartitionName[60].inputs = [CS003D12/RSP0]
-PIC.Core.IONProc.PartitionName[61].inputs = [CS003D13/RSP0]
-PIC.Core.IONProc.PartitionName[62].inputs = [CS003D14/RSP0]
-PIC.Core.IONProc.PartitionName[63].inputs = [CS003D15/RSP0]
-PIC.Core.IONProc.PartitionName[64].inputs = [CS003D16/RSP0]
-PIC.Core.IONProc.PartitionName[65].inputs = [CS003D17/RSP0]
-PIC.Core.IONProc.PartitionName[66].inputs = [CS003D18/RSP0]
-PIC.Core.IONProc.PartitionName[67].inputs = [CS003D19/RSP0]
-PIC.Core.IONProc.PartitionName[68].inputs = [CS003D20/RSP0]
-PIC.Core.IONProc.PartitionName[69].inputs = [CS003D21/RSP0]
-PIC.Core.IONProc.PartitionName[70].inputs = [CS003D22/RSP0]
-PIC.Core.IONProc.PartitionName[71].inputs = [CS003D23/RSP0]
-PIC.Core.IONProc.PartitionName[72].inputs = [CS003D24/RSP0]
-PIC.Core.IONProc.PartitionName[73].inputs = [CS003D25/RSP0]
-PIC.Core.IONProc.PartitionName[74].inputs = [CS003D26/RSP0]
-PIC.Core.IONProc.PartitionName[75].inputs = [CS003D27/RSP0]
-PIC.Core.IONProc.PartitionName[76].inputs = [CS003D28/RSP0]
-PIC.Core.IONProc.PartitionName[77].inputs = [CS003D29/RSP0]
-PIC.Core.IONProc.PartitionName[78].inputs = [CS003D30/RSP0]
-PIC.Core.IONProc.PartitionName[79].inputs = [CS003D31/RSP0]
-PIC.Core.IONProc.PartitionName[80].inputs = [CS003D32/RSP0]
-PIC.Core.IONProc.PartitionName[81].inputs = [CS003D33/RSP0]
-PIC.Core.IONProc.PartitionName[82].inputs = [CS003D34/RSP0]
-PIC.Core.IONProc.PartitionName[83].inputs = [CS003D35/RSP0]
-PIC.Core.IONProc.PartitionName[84].inputs = [CS003D36/RSP0]
-PIC.Core.IONProc.PartitionName[85].inputs = [CS003D37/RSP0]
-PIC.Core.IONProc.PartitionName[86].inputs = [CS003D38/RSP0]
-PIC.Core.IONProc.PartitionName[87].inputs = [CS003D39/RSP0]
-PIC.Core.IONProc.PartitionName[88].inputs = [CS003D40/RSP0]
-PIC.Core.IONProc.PartitionName[89].inputs = [CS003D41/RSP0]
-PIC.Core.IONProc.PartitionName[90].inputs = [CS003D42/RSP0]
-PIC.Core.IONProc.PartitionName[91].inputs = [CS003D43/RSP0]
-PIC.Core.IONProc.PartitionName[92].inputs = [CS003D44/RSP0]
-PIC.Core.IONProc.PartitionName[93].inputs = [CS003D45/RSP0]
-PIC.Core.IONProc.PartitionName[94].inputs = [CS003D46/RSP0]
-PIC.Core.IONProc.PartitionName[95].inputs = [CS003D47/RSP0]
-PIC.Core.IONProc.PartitionName[96].inputs = [CS004D00/RSP0]
-PIC.Core.IONProc.PartitionName[97].inputs = [CS004D01/RSP0]
-PIC.Core.IONProc.PartitionName[98].inputs = [CS004D02/RSP0]
-PIC.Core.IONProc.PartitionName[99].inputs = [CS004D03/RSP0]
-PIC.Core.IONProc.PartitionName[100].inputs = [CS004D04/RSP0]
-PIC.Core.IONProc.PartitionName[101].inputs = [CS004D05/RSP0]
-PIC.Core.IONProc.PartitionName[102].inputs = [CS004D06/RSP0]
-PIC.Core.IONProc.PartitionName[103].inputs = [CS004D07/RSP0]
-PIC.Core.IONProc.PartitionName[104].inputs = [CS004D08/RSP0]
-PIC.Core.IONProc.PartitionName[105].inputs = [CS004D09/RSP0]
-PIC.Core.IONProc.PartitionName[106].inputs = [CS004D10/RSP0]
-PIC.Core.IONProc.PartitionName[107].inputs = [CS004D11/RSP0]
-PIC.Core.IONProc.PartitionName[108].inputs = [CS004D12/RSP0]
-PIC.Core.IONProc.PartitionName[109].inputs = [CS004D13/RSP0]
-PIC.Core.IONProc.PartitionName[110].inputs = [CS004D14/RSP0]
-PIC.Core.IONProc.PartitionName[111].inputs = [CS004D15/RSP0]
-PIC.Core.IONProc.PartitionName[112].inputs = [CS004D16/RSP0]
-PIC.Core.IONProc.PartitionName[113].inputs = [CS004D17/RSP0]
-PIC.Core.IONProc.PartitionName[114].inputs = [CS004D18/RSP0]
-PIC.Core.IONProc.PartitionName[115].inputs = [CS004D19/RSP0]
-PIC.Core.IONProc.PartitionName[116].inputs = [CS004D20/RSP0]
-PIC.Core.IONProc.PartitionName[117].inputs = [CS004D21/RSP0]
-PIC.Core.IONProc.PartitionName[118].inputs = [CS004D22/RSP0]
-PIC.Core.IONProc.PartitionName[119].inputs = [CS004D23/RSP0]
-PIC.Core.IONProc.PartitionName[120].inputs = [CS004D24/RSP0]
-PIC.Core.IONProc.PartitionName[121].inputs = [CS004D25/RSP0]
-PIC.Core.IONProc.PartitionName[122].inputs = [CS004D26/RSP0]
-PIC.Core.IONProc.PartitionName[123].inputs = [CS004D27/RSP0]
-PIC.Core.IONProc.PartitionName[124].inputs = [CS004D28/RSP0]
-PIC.Core.IONProc.PartitionName[125].inputs = [CS004D29/RSP0]
-PIC.Core.IONProc.PartitionName[126].inputs = [CS004D30/RSP0]
-PIC.Core.IONProc.PartitionName[127].inputs = [CS004D31/RSP0]
-PIC.Core.IONProc.PartitionName[128].inputs = [CS004D32/RSP0]
-PIC.Core.IONProc.PartitionName[129].inputs = [CS004D33/RSP0]
-PIC.Core.IONProc.PartitionName[130].inputs = [CS004D34/RSP0]
-PIC.Core.IONProc.PartitionName[131].inputs = [CS004D35/RSP0]
-PIC.Core.IONProc.PartitionName[132].inputs = [CS004D36/RSP0]
-PIC.Core.IONProc.PartitionName[133].inputs = [CS004D37/RSP0]
-PIC.Core.IONProc.PartitionName[134].inputs = [CS004D38/RSP0]
-PIC.Core.IONProc.PartitionName[135].inputs = [CS004D39/RSP0]
-PIC.Core.IONProc.PartitionName[136].inputs = [CS004D40/RSP0]
-PIC.Core.IONProc.PartitionName[137].inputs = [CS004D41/RSP0]
-PIC.Core.IONProc.PartitionName[138].inputs = [CS004D42/RSP0]
-PIC.Core.IONProc.PartitionName[139].inputs = [CS004D43/RSP0]
-PIC.Core.IONProc.PartitionName[140].inputs = [CS004D44/RSP0]
-PIC.Core.IONProc.PartitionName[141].inputs = [CS004D45/RSP0]
-PIC.Core.IONProc.PartitionName[142].inputs = [CS004D46/RSP0]
-PIC.Core.IONProc.PartitionName[143].inputs = [CS004D47/RSP0]
-PIC.Core.IONProc.PartitionName[144].inputs = [CS005D00/RSP0]
-PIC.Core.IONProc.PartitionName[145].inputs = [CS005D01/RSP0]
-PIC.Core.IONProc.PartitionName[146].inputs = [CS005D02/RSP0]
-PIC.Core.IONProc.PartitionName[147].inputs = [CS005D03/RSP0]
-PIC.Core.IONProc.PartitionName[148].inputs = [CS005D04/RSP0]
-PIC.Core.IONProc.PartitionName[149].inputs = [CS005D05/RSP0]
-PIC.Core.IONProc.PartitionName[150].inputs = [CS005D06/RSP0]
-PIC.Core.IONProc.PartitionName[151].inputs = [CS005D07/RSP0]
-PIC.Core.IONProc.PartitionName[152].inputs = [CS005D08/RSP0]
-PIC.Core.IONProc.PartitionName[153].inputs = [CS005D09/RSP0]
-PIC.Core.IONProc.PartitionName[154].inputs = [CS005D10/RSP0]
-PIC.Core.IONProc.PartitionName[155].inputs = [CS005D11/RSP0]
-PIC.Core.IONProc.PartitionName[156].inputs = [CS005D12/RSP0]
-PIC.Core.IONProc.PartitionName[157].inputs = [CS005D13/RSP0]
-PIC.Core.IONProc.PartitionName[158].inputs = [CS005D14/RSP0]
-PIC.Core.IONProc.PartitionName[159].inputs = [CS005D15/RSP0]
-PIC.Core.IONProc.PartitionName[160].inputs = [CS005D16/RSP0]
-PIC.Core.IONProc.PartitionName[161].inputs = [CS005D17/RSP0]
-PIC.Core.IONProc.PartitionName[162].inputs = [CS005D18/RSP0]
-PIC.Core.IONProc.PartitionName[163].inputs = [CS005D19/RSP0]
-PIC.Core.IONProc.PartitionName[164].inputs = [CS005D20/RSP0]
-PIC.Core.IONProc.PartitionName[165].inputs = [CS005D21/RSP0]
-PIC.Core.IONProc.PartitionName[166].inputs = [CS005D22/RSP0]
-PIC.Core.IONProc.PartitionName[167].inputs = [CS005D23/RSP0]
-PIC.Core.IONProc.PartitionName[168].inputs = [CS005D24/RSP0]
-PIC.Core.IONProc.PartitionName[169].inputs = [CS005D25/RSP0]
-PIC.Core.IONProc.PartitionName[170].inputs = [CS005D26/RSP0]
-PIC.Core.IONProc.PartitionName[171].inputs = [CS005D27/RSP0]
-PIC.Core.IONProc.PartitionName[172].inputs = [CS005D28/RSP0]
-PIC.Core.IONProc.PartitionName[173].inputs = [CS005D29/RSP0]
-PIC.Core.IONProc.PartitionName[174].inputs = [CS005D30/RSP0]
-PIC.Core.IONProc.PartitionName[175].inputs = [CS005D31/RSP0]
-PIC.Core.IONProc.PartitionName[176].inputs = [CS005D32/RSP0]
-PIC.Core.IONProc.PartitionName[177].inputs = [CS005D33/RSP0]
-PIC.Core.IONProc.PartitionName[178].inputs = [CS005D34/RSP0]
-PIC.Core.IONProc.PartitionName[179].inputs = [CS005D35/RSP0]
-PIC.Core.IONProc.PartitionName[180].inputs = [CS005D36/RSP0]
-PIC.Core.IONProc.PartitionName[181].inputs = [CS005D37/RSP0]
-PIC.Core.IONProc.PartitionName[182].inputs = [CS005D38/RSP0]
-PIC.Core.IONProc.PartitionName[183].inputs = [CS005D39/RSP0]
-PIC.Core.IONProc.PartitionName[184].inputs = [CS005D40/RSP0]
-PIC.Core.IONProc.PartitionName[185].inputs = [CS005D41/RSP0]
-PIC.Core.IONProc.PartitionName[186].inputs = [CS005D42/RSP0]
-PIC.Core.IONProc.PartitionName[187].inputs = [CS005D43/RSP0]
-PIC.Core.IONProc.PartitionName[188].inputs = [CS005D44/RSP0]
-PIC.Core.IONProc.PartitionName[189].inputs = [CS005D45/RSP0]
-PIC.Core.IONProc.PartitionName[190].inputs = [CS005D46/RSP0]
-PIC.Core.IONProc.PartitionName[191].inputs = [CS005D47/RSP0]
-PIC.Core.IONProc.PartitionName[192].inputs = [CS006D00/RSP0]
-PIC.Core.IONProc.PartitionName[193].inputs = [CS006D01/RSP0]
-PIC.Core.IONProc.PartitionName[194].inputs = [CS006D02/RSP0]
-PIC.Core.IONProc.PartitionName[195].inputs = [CS006D03/RSP0]
-PIC.Core.IONProc.PartitionName[196].inputs = [CS006D04/RSP0]
-PIC.Core.IONProc.PartitionName[197].inputs = [CS006D05/RSP0]
-PIC.Core.IONProc.PartitionName[198].inputs = [CS006D06/RSP0]
-PIC.Core.IONProc.PartitionName[199].inputs = [CS006D07/RSP0]
-PIC.Core.IONProc.PartitionName[200].inputs = [CS006D08/RSP0]
-PIC.Core.IONProc.PartitionName[201].inputs = [CS006D09/RSP0]
-PIC.Core.IONProc.PartitionName[202].inputs = [CS006D10/RSP0]
-PIC.Core.IONProc.PartitionName[203].inputs = [CS006D11/RSP0]
-PIC.Core.IONProc.PartitionName[204].inputs = [CS006D12/RSP0]
-PIC.Core.IONProc.PartitionName[205].inputs = [CS006D13/RSP0]
-PIC.Core.IONProc.PartitionName[206].inputs = [CS006D14/RSP0]
-PIC.Core.IONProc.PartitionName[207].inputs = [CS006D15/RSP0]
-PIC.Core.IONProc.PartitionName[208].inputs = [CS006D16/RSP0]
-PIC.Core.IONProc.PartitionName[209].inputs = [CS006D17/RSP0]
-PIC.Core.IONProc.PartitionName[210].inputs = [CS006D18/RSP0]
-PIC.Core.IONProc.PartitionName[211].inputs = [CS006D19/RSP0]
-PIC.Core.IONProc.PartitionName[212].inputs = [CS006D20/RSP0]
-PIC.Core.IONProc.PartitionName[213].inputs = [CS006D21/RSP0]
-PIC.Core.IONProc.PartitionName[214].inputs = [CS006D22/RSP0]
-PIC.Core.IONProc.PartitionName[215].inputs = [CS006D23/RSP0]
-PIC.Core.IONProc.PartitionName[216].inputs = [CS006D24/RSP0]
-PIC.Core.IONProc.PartitionName[217].inputs = [CS006D25/RSP0]
-PIC.Core.IONProc.PartitionName[218].inputs = [CS006D26/RSP0]
-PIC.Core.IONProc.PartitionName[219].inputs = [CS006D27/RSP0]
-PIC.Core.IONProc.PartitionName[220].inputs = [CS006D28/RSP0]
-PIC.Core.IONProc.PartitionName[221].inputs = [CS006D29/RSP0]
-PIC.Core.IONProc.PartitionName[222].inputs = [CS006D30/RSP0]
-PIC.Core.IONProc.PartitionName[223].inputs = [CS006D31/RSP0]
-PIC.Core.IONProc.PartitionName[224].inputs = [CS006D32/RSP0]
-PIC.Core.IONProc.PartitionName[225].inputs = [CS006D33/RSP0]
-PIC.Core.IONProc.PartitionName[226].inputs = [CS006D34/RSP0]
-PIC.Core.IONProc.PartitionName[227].inputs = [CS006D35/RSP0]
-PIC.Core.IONProc.PartitionName[228].inputs = [CS006D36/RSP0]
-PIC.Core.IONProc.PartitionName[229].inputs = [CS006D37/RSP0]
-PIC.Core.IONProc.PartitionName[230].inputs = [CS006D38/RSP0]
-PIC.Core.IONProc.PartitionName[231].inputs = [CS006D39/RSP0]
-PIC.Core.IONProc.PartitionName[232].inputs = [CS006D40/RSP0]
-PIC.Core.IONProc.PartitionName[233].inputs = [CS006D41/RSP0]
-PIC.Core.IONProc.PartitionName[234].inputs = [CS006D42/RSP0]
-PIC.Core.IONProc.PartitionName[235].inputs = [CS006D43/RSP0]
-PIC.Core.IONProc.PartitionName[236].inputs = [CS006D44/RSP0]
-PIC.Core.IONProc.PartitionName[237].inputs = [CS006D45/RSP0]
-PIC.Core.IONProc.PartitionName[238].inputs = [CS006D46/RSP0]
-PIC.Core.IONProc.PartitionName[239].inputs = [CS006D47/RSP0]
-PIC.Core.IONProc.PartitionName[240].inputs = [CS007D00/RSP0]
-PIC.Core.IONProc.PartitionName[241].inputs = [CS007D01/RSP0]
-PIC.Core.IONProc.PartitionName[242].inputs = [CS007D02/RSP0]
-PIC.Core.IONProc.PartitionName[243].inputs = [CS007D03/RSP0]
-PIC.Core.IONProc.PartitionName[244].inputs = [CS007D04/RSP0]
-PIC.Core.IONProc.PartitionName[245].inputs = [CS007D05/RSP0]
-PIC.Core.IONProc.PartitionName[246].inputs = [CS007D06/RSP0]
-PIC.Core.IONProc.PartitionName[247].inputs = [CS007D07/RSP0]
-PIC.Core.IONProc.PartitionName[248].inputs = [CS007D08/RSP0]
-PIC.Core.IONProc.PartitionName[249].inputs = [CS007D09/RSP0]
-PIC.Core.IONProc.PartitionName[250].inputs = [CS007D10/RSP0]
-PIC.Core.IONProc.PartitionName[251].inputs = [CS007D11/RSP0]
-PIC.Core.IONProc.PartitionName[252].inputs = [CS007D12/RSP0]
-PIC.Core.IONProc.PartitionName[253].inputs = [CS007D13/RSP0]
-PIC.Core.IONProc.PartitionName[254].inputs = [CS007D14/RSP0]
-PIC.Core.IONProc.PartitionName[255].inputs = [CS007D15/RSP0]
-PIC.Core.IONProc.PartitionName[256].inputs = [CS007D16/RSP0]
-PIC.Core.IONProc.PartitionName[257].inputs = [CS007D17/RSP0]
-PIC.Core.IONProc.PartitionName[258].inputs = [CS007D18/RSP0]
-PIC.Core.IONProc.PartitionName[259].inputs = [CS007D19/RSP0]
-PIC.Core.IONProc.PartitionName[260].inputs = [CS007D20/RSP0]
-PIC.Core.IONProc.PartitionName[261].inputs = [CS007D21/RSP0]
-PIC.Core.IONProc.PartitionName[262].inputs = [CS007D22/RSP0]
-PIC.Core.IONProc.PartitionName[263].inputs = [CS007D23/RSP0]
-PIC.Core.IONProc.PartitionName[264].inputs = [CS007D24/RSP0]
-PIC.Core.IONProc.PartitionName[265].inputs = [CS007D25/RSP0]
-PIC.Core.IONProc.PartitionName[266].inputs = [CS007D26/RSP0]
-PIC.Core.IONProc.PartitionName[267].inputs = [CS007D27/RSP0]
-PIC.Core.IONProc.PartitionName[268].inputs = [CS007D28/RSP0]
-PIC.Core.IONProc.PartitionName[269].inputs = [CS007D29/RSP0]
-PIC.Core.IONProc.PartitionName[270].inputs = [CS007D30/RSP0]
-PIC.Core.IONProc.PartitionName[271].inputs = [CS007D31/RSP0]
-PIC.Core.IONProc.PartitionName[272].inputs = [CS007D32/RSP0]
-PIC.Core.IONProc.PartitionName[273].inputs = [CS007D33/RSP0]
-PIC.Core.IONProc.PartitionName[274].inputs = [CS007D34/RSP0]
-PIC.Core.IONProc.PartitionName[275].inputs = [CS007D35/RSP0]
-PIC.Core.IONProc.PartitionName[276].inputs = [CS007D36/RSP0]
-PIC.Core.IONProc.PartitionName[277].inputs = [CS007D37/RSP0]
-PIC.Core.IONProc.PartitionName[278].inputs = [CS007D38/RSP0]
-PIC.Core.IONProc.PartitionName[279].inputs = [CS007D39/RSP0]
-PIC.Core.IONProc.PartitionName[280].inputs = [CS007D40/RSP0]
-PIC.Core.IONProc.PartitionName[281].inputs = [CS007D41/RSP0]
-PIC.Core.IONProc.PartitionName[282].inputs = [CS007D42/RSP0]
-PIC.Core.IONProc.PartitionName[283].inputs = [CS007D43/RSP0]
-PIC.Core.IONProc.PartitionName[284].inputs = [CS007D44/RSP0]
-PIC.Core.IONProc.PartitionName[285].inputs = [CS007D45/RSP0]
-PIC.Core.IONProc.PartitionName[286].inputs = [CS007D46/RSP0]
-PIC.Core.IONProc.PartitionName[287].inputs = [CS007D47/RSP0]
-PIC.Core.CS002D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D00.raw]
-PIC.Core.CS002D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D01.raw]
-PIC.Core.CS002D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D02.raw]
-PIC.Core.CS002D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D03.raw]
-PIC.Core.CS002D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D04.raw]
-PIC.Core.CS002D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D05.raw]
-PIC.Core.CS002D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D06.raw]
-PIC.Core.CS002D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D07.raw]
-PIC.Core.CS002D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D08.raw]
-PIC.Core.CS002D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D09.raw]
-PIC.Core.CS002D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D10.raw]
-PIC.Core.CS002D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D11.raw]
-PIC.Core.CS002D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D12.raw]
-PIC.Core.CS002D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D13.raw]
-PIC.Core.CS002D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D14.raw]
-PIC.Core.CS002D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D15.raw]
-PIC.Core.CS002D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D16.raw]
-PIC.Core.CS002D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D17.raw]
-PIC.Core.CS002D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D18.raw]
-PIC.Core.CS002D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D19.raw]
-PIC.Core.CS002D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D20.raw]
-PIC.Core.CS002D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D21.raw]
-PIC.Core.CS002D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D22.raw]
-PIC.Core.CS002D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D23.raw]
-PIC.Core.CS002D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D24.raw]
-PIC.Core.CS002D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D25.raw]
-PIC.Core.CS002D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D26.raw]
-PIC.Core.CS002D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D27.raw]
-PIC.Core.CS002D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D28.raw]
-PIC.Core.CS002D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D29.raw]
-PIC.Core.CS002D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D30.raw]
-PIC.Core.CS002D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D31.raw]
-PIC.Core.CS002D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D32.raw]
-PIC.Core.CS002D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D33.raw]
-PIC.Core.CS002D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D34.raw]
-PIC.Core.CS002D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D35.raw]
-PIC.Core.CS002D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D36.raw]
-PIC.Core.CS002D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D37.raw]
-PIC.Core.CS002D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D38.raw]
-PIC.Core.CS002D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D39.raw]
-PIC.Core.CS002D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D40.raw]
-PIC.Core.CS002D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D41.raw]
-PIC.Core.CS002D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D42.raw]
-PIC.Core.CS002D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D43.raw]
-PIC.Core.CS002D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D44.raw]
-PIC.Core.CS002D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D45.raw]
-PIC.Core.CS002D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D46.raw]
-PIC.Core.CS002D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D47.raw]
-PIC.Core.CS003D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D00.raw]
-PIC.Core.CS003D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D01.raw]
-PIC.Core.CS003D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D02.raw]
-PIC.Core.CS003D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D03.raw]
-PIC.Core.CS003D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D04.raw]
-PIC.Core.CS003D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D05.raw]
-PIC.Core.CS003D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D06.raw]
-PIC.Core.CS003D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D07.raw]
-PIC.Core.CS003D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D08.raw]
-PIC.Core.CS003D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D09.raw]
-PIC.Core.CS003D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D10.raw]
-PIC.Core.CS003D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D11.raw]
-PIC.Core.CS003D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D12.raw]
-PIC.Core.CS003D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D13.raw]
-PIC.Core.CS003D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D14.raw]
-PIC.Core.CS003D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D15.raw]
-PIC.Core.CS003D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D16.raw]
-PIC.Core.CS003D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D17.raw]
-PIC.Core.CS003D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D18.raw]
-PIC.Core.CS003D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D19.raw]
-PIC.Core.CS003D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D20.raw]
-PIC.Core.CS003D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D21.raw]
-PIC.Core.CS003D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D22.raw]
-PIC.Core.CS003D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D23.raw]
-PIC.Core.CS003D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D24.raw]
-PIC.Core.CS003D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D25.raw]
-PIC.Core.CS003D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D26.raw]
-PIC.Core.CS003D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D27.raw]
-PIC.Core.CS003D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D28.raw]
-PIC.Core.CS003D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D29.raw]
-PIC.Core.CS003D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D30.raw]
-PIC.Core.CS003D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D31.raw]
-PIC.Core.CS003D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D32.raw]
-PIC.Core.CS003D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D33.raw]
-PIC.Core.CS003D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D34.raw]
-PIC.Core.CS003D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D35.raw]
-PIC.Core.CS003D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D36.raw]
-PIC.Core.CS003D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D37.raw]
-PIC.Core.CS003D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D38.raw]
-PIC.Core.CS003D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D39.raw]
-PIC.Core.CS003D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D40.raw]
-PIC.Core.CS003D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D41.raw]
-PIC.Core.CS003D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D42.raw]
-PIC.Core.CS003D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D43.raw]
-PIC.Core.CS003D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D44.raw]
-PIC.Core.CS003D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D45.raw]
-PIC.Core.CS003D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D46.raw]
-PIC.Core.CS003D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D47.raw]
-PIC.Core.CS004D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D00.raw]
-PIC.Core.CS004D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D01.raw]
-PIC.Core.CS004D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D02.raw]
-PIC.Core.CS004D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D03.raw]
-PIC.Core.CS004D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D04.raw]
-PIC.Core.CS004D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D05.raw]
-PIC.Core.CS004D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D06.raw]
-PIC.Core.CS004D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D07.raw]
-PIC.Core.CS004D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D08.raw]
-PIC.Core.CS004D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D09.raw]
-PIC.Core.CS004D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D10.raw]
-PIC.Core.CS004D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D11.raw]
-PIC.Core.CS004D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D12.raw]
-PIC.Core.CS004D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D13.raw]
-PIC.Core.CS004D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D14.raw]
-PIC.Core.CS004D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D15.raw]
-PIC.Core.CS004D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D16.raw]
-PIC.Core.CS004D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D17.raw]
-PIC.Core.CS004D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D18.raw]
-PIC.Core.CS004D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D19.raw]
-PIC.Core.CS004D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D20.raw]
-PIC.Core.CS004D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D21.raw]
-PIC.Core.CS004D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D22.raw]
-PIC.Core.CS004D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D23.raw]
-PIC.Core.CS004D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D24.raw]
-PIC.Core.CS004D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D25.raw]
-PIC.Core.CS004D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D26.raw]
-PIC.Core.CS004D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D27.raw]
-PIC.Core.CS004D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D28.raw]
-PIC.Core.CS004D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D29.raw]
-PIC.Core.CS004D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D30.raw]
-PIC.Core.CS004D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D31.raw]
-PIC.Core.CS004D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D32.raw]
-PIC.Core.CS004D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D33.raw]
-PIC.Core.CS004D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D34.raw]
-PIC.Core.CS004D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D35.raw]
-PIC.Core.CS004D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D36.raw]
-PIC.Core.CS004D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D37.raw]
-PIC.Core.CS004D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D38.raw]
-PIC.Core.CS004D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D39.raw]
-PIC.Core.CS004D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D40.raw]
-PIC.Core.CS004D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D41.raw]
-PIC.Core.CS004D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D42.raw]
-PIC.Core.CS004D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D43.raw]
-PIC.Core.CS004D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D44.raw]
-PIC.Core.CS004D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D45.raw]
-PIC.Core.CS004D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D46.raw]
-PIC.Core.CS004D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D47.raw]
-PIC.Core.CS005D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D00.raw]
-PIC.Core.CS005D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D01.raw]
-PIC.Core.CS005D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D02.raw]
-PIC.Core.CS005D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D03.raw]
-PIC.Core.CS005D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D04.raw]
-PIC.Core.CS005D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D05.raw]
-PIC.Core.CS005D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D06.raw]
-PIC.Core.CS005D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D07.raw]
-PIC.Core.CS005D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D08.raw]
-PIC.Core.CS005D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D09.raw]
-PIC.Core.CS005D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D10.raw]
-PIC.Core.CS005D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D11.raw]
-PIC.Core.CS005D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D12.raw]
-PIC.Core.CS005D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D13.raw]
-PIC.Core.CS005D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D14.raw]
-PIC.Core.CS005D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D15.raw]
-PIC.Core.CS005D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D16.raw]
-PIC.Core.CS005D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D17.raw]
-PIC.Core.CS005D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D18.raw]
-PIC.Core.CS005D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D19.raw]
-PIC.Core.CS005D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D20.raw]
-PIC.Core.CS005D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D21.raw]
-PIC.Core.CS005D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D22.raw]
-PIC.Core.CS005D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D23.raw]
-PIC.Core.CS005D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D24.raw]
-PIC.Core.CS005D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D25.raw]
-PIC.Core.CS005D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D26.raw]
-PIC.Core.CS005D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D27.raw]
-PIC.Core.CS005D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D28.raw]
-PIC.Core.CS005D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D29.raw]
-PIC.Core.CS005D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D30.raw]
-PIC.Core.CS005D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D31.raw]
-PIC.Core.CS005D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D32.raw]
-PIC.Core.CS005D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D33.raw]
-PIC.Core.CS005D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D34.raw]
-PIC.Core.CS005D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D35.raw]
-PIC.Core.CS005D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D36.raw]
-PIC.Core.CS005D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D37.raw]
-PIC.Core.CS005D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D38.raw]
-PIC.Core.CS005D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D39.raw]
-PIC.Core.CS005D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D40.raw]
-PIC.Core.CS005D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D41.raw]
-PIC.Core.CS005D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D42.raw]
-PIC.Core.CS005D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D43.raw]
-PIC.Core.CS005D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D44.raw]
-PIC.Core.CS005D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D45.raw]
-PIC.Core.CS005D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D46.raw]
-PIC.Core.CS005D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D47.raw]
-PIC.Core.CS006D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D00.raw]
-PIC.Core.CS006D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D01.raw]
-PIC.Core.CS006D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D02.raw]
-PIC.Core.CS006D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D03.raw]
-PIC.Core.CS006D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D04.raw]
-PIC.Core.CS006D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D05.raw]
-PIC.Core.CS006D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D06.raw]
-PIC.Core.CS006D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D07.raw]
-PIC.Core.CS006D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D08.raw]
-PIC.Core.CS006D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D09.raw]
-PIC.Core.CS006D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D10.raw]
-PIC.Core.CS006D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D11.raw]
-PIC.Core.CS006D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D12.raw]
-PIC.Core.CS006D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D13.raw]
-PIC.Core.CS006D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D14.raw]
-PIC.Core.CS006D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D15.raw]
-PIC.Core.CS006D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D16.raw]
-PIC.Core.CS006D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D17.raw]
-PIC.Core.CS006D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D18.raw]
-PIC.Core.CS006D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D19.raw]
-PIC.Core.CS006D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D20.raw]
-PIC.Core.CS006D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D21.raw]
-PIC.Core.CS006D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D22.raw]
-PIC.Core.CS006D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D23.raw]
-PIC.Core.CS006D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D24.raw]
-PIC.Core.CS006D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D25.raw]
-PIC.Core.CS006D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D26.raw]
-PIC.Core.CS006D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D27.raw]
-PIC.Core.CS006D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D28.raw]
-PIC.Core.CS006D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D29.raw]
-PIC.Core.CS006D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D30.raw]
-PIC.Core.CS006D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D31.raw]
-PIC.Core.CS006D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D32.raw]
-PIC.Core.CS006D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D33.raw]
-PIC.Core.CS006D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D34.raw]
-PIC.Core.CS006D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D35.raw]
-PIC.Core.CS006D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D36.raw]
-PIC.Core.CS006D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D37.raw]
-PIC.Core.CS006D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D38.raw]
-PIC.Core.CS006D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D39.raw]
-PIC.Core.CS006D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D40.raw]
-PIC.Core.CS006D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D41.raw]
-PIC.Core.CS006D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D42.raw]
-PIC.Core.CS006D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D43.raw]
-PIC.Core.CS006D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D44.raw]
-PIC.Core.CS006D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D45.raw]
-PIC.Core.CS006D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D46.raw]
-PIC.Core.CS006D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D47.raw]
-PIC.Core.CS007D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D00.raw]
-PIC.Core.CS007D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D01.raw]
-PIC.Core.CS007D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D02.raw]
-PIC.Core.CS007D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D03.raw]
-PIC.Core.CS007D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D04.raw]
-PIC.Core.CS007D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D05.raw]
-PIC.Core.CS007D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D06.raw]
-PIC.Core.CS007D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D07.raw]
-PIC.Core.CS007D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D08.raw]
-PIC.Core.CS007D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D09.raw]
-PIC.Core.CS007D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D10.raw]
-PIC.Core.CS007D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D11.raw]
-PIC.Core.CS007D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D12.raw]
-PIC.Core.CS007D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D13.raw]
-PIC.Core.CS007D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D14.raw]
-PIC.Core.CS007D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D15.raw]
-PIC.Core.CS007D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D16.raw]
-PIC.Core.CS007D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D17.raw]
-PIC.Core.CS007D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D18.raw]
-PIC.Core.CS007D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D19.raw]
-PIC.Core.CS007D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D20.raw]
-PIC.Core.CS007D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D21.raw]
-PIC.Core.CS007D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D22.raw]
-PIC.Core.CS007D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D23.raw]
-PIC.Core.CS007D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D24.raw]
-PIC.Core.CS007D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D25.raw]
-PIC.Core.CS007D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D26.raw]
-PIC.Core.CS007D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D27.raw]
-PIC.Core.CS007D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D28.raw]
-PIC.Core.CS007D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D29.raw]
-PIC.Core.CS007D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D30.raw]
-PIC.Core.CS007D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D31.raw]
-PIC.Core.CS007D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D32.raw]
-PIC.Core.CS007D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D33.raw]
-PIC.Core.CS007D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D34.raw]
-PIC.Core.CS007D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D35.raw]
-PIC.Core.CS007D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D36.raw]
-PIC.Core.CS007D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D37.raw]
-PIC.Core.CS007D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D38.raw]
-PIC.Core.CS007D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D39.raw]
-PIC.Core.CS007D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D40.raw]
-PIC.Core.CS007D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D41.raw]
-PIC.Core.CS007D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D42.raw]
-PIC.Core.CS007D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D43.raw]
-PIC.Core.CS007D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D44.raw]
-PIC.Core.CS007D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D45.raw]
-PIC.Core.CS007D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D46.raw]
-PIC.Core.CS007D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D47.raw]
-PIC.Core.CS002D00.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D01.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D02.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D03.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D04.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D05.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D06.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D07.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D08.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D09.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D10.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D11.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D12.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D13.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D14.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D15.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D16.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D17.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D18.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D19.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D20.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D21.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D22.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D23.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D24.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D25.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D26.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D27.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D28.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D29.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D30.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D31.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D32.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D33.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D34.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D35.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D36.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D37.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D38.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D39.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D40.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D41.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D42.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D43.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D44.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D45.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D46.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D47.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS003D00.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D01.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D02.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D03.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D04.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D05.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D06.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D07.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D08.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D09.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D10.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D11.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D12.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D13.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D14.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D15.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D16.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D17.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D18.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D19.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D20.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D21.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D22.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D23.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D24.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D25.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D26.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D27.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D28.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D29.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D30.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D31.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D32.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D33.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D34.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D35.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D36.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D37.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D38.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D39.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D40.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D41.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D42.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D43.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D44.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D45.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D46.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D47.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS004D00.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D01.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D02.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D03.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D04.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D05.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D06.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D07.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D08.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D09.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D10.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D11.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D12.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D13.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D14.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D15.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D16.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D17.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D18.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D19.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D20.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D21.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D22.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D23.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D24.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D25.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D26.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D27.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D28.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D29.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D30.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D31.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D32.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D33.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D34.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D35.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D36.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D37.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D38.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D39.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D40.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D41.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D42.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D43.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D44.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D45.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D46.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D47.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS005D00.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D01.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D02.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D03.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D04.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D05.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D06.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D07.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D08.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D09.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D10.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D11.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D12.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D13.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D14.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D15.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D16.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D17.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D18.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D19.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D20.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D21.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D22.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D23.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D24.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D25.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D26.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D27.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D28.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D29.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D30.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D31.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D32.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D33.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D34.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D35.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D36.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D37.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D38.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D39.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D40.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D41.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D42.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D43.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D44.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D45.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D46.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D47.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS006D00.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D01.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D02.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D03.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D04.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D05.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D06.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D07.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D08.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D09.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D10.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D11.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D12.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D13.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D14.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D15.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D16.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D17.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D18.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D19.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D20.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D21.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D22.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D23.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D24.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D25.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D26.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D27.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D28.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D29.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D30.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D31.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D32.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D33.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D34.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D35.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D36.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D37.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D38.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D39.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D40.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D41.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D42.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D43.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D44.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D45.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D46.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D47.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS007D00.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D01.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D02.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D03.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D04.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D05.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D06.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D07.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D08.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D09.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D10.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D11.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D12.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D13.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D14.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D15.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D16.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D17.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D18.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D19.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D20.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D21.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D22.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D23.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D24.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D25.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D26.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D27.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D28.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D29.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D30.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D31.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D32.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D33.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D34.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D35.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D36.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D37.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D38.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D39.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D40.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D41.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D42.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D43.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D44.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D45.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D46.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D47.clockCorrectionTime = 7.885136e-06
-Observation.referencePhaseCenter	 = [3826577.110,461022.900,5064892.758]
-# LBA_INNER
-#PIC.Core.CS002D00.phaseCenter = [3826577.109500,461022.900196,5064892.758000]
-#PIC.Core.CS002D01.phaseCenter = [3826575.090500,461022.657196,5064894.296000]
-#PIC.Core.CS002D02.phaseCenter = [3826575.771500,461025.005196,5064893.572000]
-#PIC.Core.CS002D03.phaseCenter = [3826577.909500,461025.263196,5064891.944000]
-#PIC.Core.CS002D04.phaseCenter = [3826579.128500,461023.143196,5064891.220000]
-#PIC.Core.CS002D05.phaseCenter = [3826578.447500,461020.795196,5064891.944000]
-#PIC.Core.CS002D06.phaseCenter = [3826576.309500,461020.537196,5064893.572000]
-#PIC.Core.CS002D07.phaseCenter = [3826574.036500,461018.775195,5064895.437000]
-#PIC.Core.CS002D08.phaseCenter = [3826572.516500,461022.347195,5064896.256000]
-#PIC.Core.CS002D09.phaseCenter = [3826573.144500,461026.177195,5064895.438000]
-#PIC.Core.CS002D10.phaseCenter = [3826575.628500,461028.475196,5064893.365000]
-#PIC.Core.CS002D11.phaseCenter = [3826578.805500,461028.164196,5064891.009000]
-#PIC.Core.CS002D12.phaseCenter = [3826581.188500,461025.390196,5064889.471000]
-#PIC.Core.CS002D13.phaseCenter = [3826581.662500,461021.450196,5064889.471000]
-#PIC.Core.CS002D14.phaseCenter = [3826580.006500,461018.190196,5064891.009000]
-#PIC.Core.CS002D15.phaseCenter = [3826576.995500,461017.133196,5064893.365000]
-#PIC.Core.CS002D16.phaseCenter = [3826576.272500,461013.726196,5064894.215000]
-#PIC.Core.CS002D17.phaseCenter = [3826573.376500,461014.469195,5064896.322000]
-#PIC.Core.CS002D18.phaseCenter = [3826570.181500,461017.749195,5064898.424000]
-#PIC.Core.CS002D19.phaseCenter = [3826569.112500,461024.945195,5064898.576000]
-#PIC.Core.CS002D20.phaseCenter = [3826569.852500,461027.976195,5064897.746000]
-#PIC.Core.CS002D21.phaseCenter = [3826572.070500,461031.095195,5064895.800000]
-#PIC.Core.CS002D22.phaseCenter = [3826575.368500,461031.959196,5064893.246000]
-#PIC.Core.CS002D23.phaseCenter = [3826579.971500,461030.917196,5064889.885000]
-#PIC.Core.CS002D24.phaseCenter = [3826583.385500,461028.524196,5064887.539000]
-#PIC.Core.CS002D25.phaseCenter = [3826584.999500,461024.537196,5064886.688000]
-#PIC.Core.CS002D26.phaseCenter = [3826584.442500,461020.707196,5064887.452000]
-#PIC.Core.CS002D27.phaseCenter = [3826582.564500,461016.605196,5064889.232000]
-#PIC.Core.CS002D28.phaseCenter = [3826579.539500,461014.081196,5064891.731000]
-#PIC.Core.CS002D29.phaseCenter = [3826574.724500,461009.083195,5064895.797000]
-#PIC.Core.CS002D30.phaseCenter = [3826571.744500,461010.132195,5064897.939000]
-#PIC.Core.CS002D31.phaseCenter = [3826569.960500,461012.435195,5064899.070000]
-#PIC.Core.CS002D32.phaseCenter = [3826567.013500,461019.699195,5064900.626000]
-#PIC.Core.CS002D33.phaseCenter = [3826565.109500,461021.640195,5064901.880000]
-#PIC.Core.CS002D34.phaseCenter = [3826567.204500,461028.490195,5064899.688000]
-#PIC.Core.CS002D35.phaseCenter = [3826569.542500,461032.470195,5064897.573000]
-#PIC.Core.CS002D36.phaseCenter = [3826571.812500,461036.793195,5064895.478000]
-#PIC.Core.CS002D37.phaseCenter = [3826574.471500,461036.116195,5064893.544000]
-#PIC.Core.CS002D38.phaseCenter = [3826578.276500,461035.734196,5064890.722000]
-#PIC.Core.CS002D39.phaseCenter = [3826583.531500,461032.936196,5064887.030000]
-#PIC.Core.CS002D40.phaseCenter = [3826585.419500,461031.329196,5064885.758000]
-#PIC.Core.CS002D41.phaseCenter = [3826587.195500,461026.381196,5064884.873000]
-#PIC.Core.CS002D42.phaseCenter = [3826589.188500,461022.935197,5064883.688000]
-#PIC.Core.CS002D43.phaseCenter = [3826586.727500,461014.817196,5064886.269000]
-#PIC.Core.CS002D44.phaseCenter = [3826584.542500,461012.072196,5064888.157000]
-#PIC.Core.CS002D45.phaseCenter = [3826581.014500,461009.055196,5064891.078000]
-#PIC.Core.CS002D46.phaseCenter = [3826603.455510,460977.274198,5064877.107000]
-#PIC.Core.CS002D47.phaseCenter = [3826612.589500,461053.051198,5064863.401000]
-##PIC.Core.CS003D00.phaseCenter = [3826516.791510,460930.018191,5064946.429000]
-#PIC.Core.CS003D01.phaseCenter = [3826514.771510,460929.774191,5064947.967000]
-#PIC.Core.CS003D02.phaseCenter = [3826515.452500,460932.123191,5064947.243000]
-#PIC.Core.CS003D03.phaseCenter = [3826517.591510,460932.380191,5064945.615000]
-#PIC.Core.CS003D04.phaseCenter = [3826518.810510,460930.261191,5064944.891000]
-#PIC.Core.CS003D05.phaseCenter = [3826518.129510,460927.913191,5064945.615000]
-#PIC.Core.CS003D06.phaseCenter = [3826515.991510,460927.655191,5064947.243000]
-#PIC.Core.CS003D07.phaseCenter = [3826521.344510,460928.568192,5064943.142000]
-#PIC.Core.CS003D08.phaseCenter = [3826519.688510,460925.308191,5064944.680000]
-#PIC.Core.CS003D09.phaseCenter = [3826516.676510,460924.251191,5064947.036000]
-#PIC.Core.CS003D10.phaseCenter = [3826513.718510,460925.893191,5064949.109000]
-#PIC.Core.CS003D11.phaseCenter = [3826512.197510,460929.464191,5064949.927000]
-#PIC.Core.CS003D12.phaseCenter = [3826512.826500,460933.295191,5064949.109000]
-#PIC.Core.CS003D13.phaseCenter = [3826515.310500,460935.593191,5064947.037000]
-#PIC.Core.CS003D14.phaseCenter = [3826518.487500,460935.281191,5064944.680000]
-#PIC.Core.CS003D15.phaseCenter = [3826520.870510,460932.508192,5064943.142000]
-#PIC.Core.CS003D16.phaseCenter = [3826523.638510,460933.271192,5064940.995000]
-#PIC.Core.CS003D17.phaseCenter = [3826524.704510,460929.807192,5064940.509000]
-#PIC.Core.CS003D18.phaseCenter = [3826524.166510,460924.869192,5064941.358000]
-#PIC.Core.CS003D19.phaseCenter = [3826519.739510,460920.454191,5064945.080000]
-#PIC.Core.CS003D20.phaseCenter = [3826517.224510,460919.880191,5064947.020000]
-#PIC.Core.CS003D21.phaseCenter = [3826513.839510,460920.862191,5064949.472000]
-#PIC.Core.CS003D22.phaseCenter = [3826511.434510,460924.032191,5064950.991000]
-#PIC.Core.CS003D23.phaseCenter = [3826509.643500,460929.476191,5064951.844000]
-#PIC.Core.CS003D24.phaseCenter = [3826509.441500,460934.248191,5064951.563000]
-#PIC.Core.CS003D25.phaseCenter = [3826511.336500,460937.797191,5064949.821000]
-#PIC.Core.CS003D26.phaseCenter = [3826514.308500,460938.931191,5064947.487000]
-#PIC.Core.CS003D27.phaseCenter = [3826518.191500,460938.761191,5064944.588000]
-#PIC.Core.CS003D28.phaseCenter = [3826521.604500,460936.638192,5064942.218000]
-#PIC.Core.CS003D29.phaseCenter = [3826527.718510,460933.703192,5064937.894000]
-#PIC.Core.CS003D30.phaseCenter = [3826528.618510,460930.008192,5064937.552000]
-#PIC.Core.CS003D31.phaseCenter = [3826527.989510,460927.039192,5064938.293000]
-#PIC.Core.CS003D32.phaseCenter = [3826524.541510,460920.564192,5064941.466000]
-#PIC.Core.CS003D33.phaseCenter = [3826524.230510,460917.628192,5064941.965000]
-#PIC.Core.CS003D34.phaseCenter = [3826518.314510,460916.787191,5064946.482000]
-#PIC.Core.CS003D35.phaseCenter = [3826514.264510,460917.509191,5064949.456000]
-#PIC.Core.CS003D36.phaseCenter = [3826510.012510,460918.002191,5064952.604000]
-#PIC.Core.CS003D37.phaseCenter = [3826509.029510,460921.180191,5064953.054000]
-#PIC.Core.CS003D38.phaseCenter = [3826507.214510,460925.463191,5064954.029000]
-#PIC.Core.CS003D39.phaseCenter = [3826506.289500,460932.406191,5064954.096000]
-#PIC.Core.CS003D40.phaseCenter = [3826506.376500,460935.174191,5064953.780000]
-#PIC.Core.CS003D41.phaseCenter = [3826508.850500,460939.333191,5064951.547000]
-#PIC.Core.CS003D42.phaseCenter = [3826510.161500,460943.047191,5064950.228000]
-#PIC.Core.CS003D43.phaseCenter = [3826517.161500,460944.068191,5064944.882000]
-#PIC.Core.CS003D44.phaseCenter = [3826520.267500,460942.952192,5064942.651000]
-#PIC.Core.CS003D45.phaseCenter = [3826524.297500,460940.509192,5064939.846000]
-#PIC.Core.CS003D46.phaseCenter = [3826478.141510,460906.374188,5064977.577990]
-#PIC.Core.CS003D47.phaseCenter = [3826495.639500,460979.543190,5064957.829990]
-#PIC.Core.CS004D00.phaseCenter = [3826654.240510,460939.528201,5064842.397000]
-#PIC.Core.CS004D01.phaseCenter = [3826652.220510,460939.284201,5064843.935000]
-#PIC.Core.CS004D02.phaseCenter = [3826652.902510,460941.633201,5064843.211000]
-#PIC.Core.CS004D03.phaseCenter = [3826655.040510,460941.890201,5064841.583000]
-#PIC.Core.CS004D04.phaseCenter = [3826656.259510,460939.771202,5064840.859000]
-#PIC.Core.CS004D05.phaseCenter = [3826655.578510,460937.423201,5064841.583000]
-#PIC.Core.CS004D06.phaseCenter = [3826653.440510,460937.165201,5064843.211000]
-#PIC.Core.CS004D07.phaseCenter = [3826652.759510,460945.103201,5064843.004000]
-#PIC.Core.CS004D08.phaseCenter = [3826655.936510,460944.791202,5064840.648000]
-#PIC.Core.CS004D09.phaseCenter = [3826658.319510,460942.018202,5064839.110000]
-#PIC.Core.CS004D10.phaseCenter = [3826658.793510,460938.078202,5064839.110000]
-#PIC.Core.CS004D11.phaseCenter = [3826657.137510,460934.818202,5064840.648000]
-#PIC.Core.CS004D12.phaseCenter = [3826654.126510,460933.761201,5064843.004000]
-#PIC.Core.CS004D13.phaseCenter = [3826651.167510,460935.403201,5064845.076000]
-#PIC.Core.CS004D14.phaseCenter = [3826649.647510,460938.974201,5064845.895000]
-#PIC.Core.CS004D15.phaseCenter = [3826650.275510,460942.805201,5064845.077000]
-#PIC.Core.CS004D16.phaseCenter = [3826648.230510,460945.448201,5064846.373000]
-#PIC.Core.CS004D17.phaseCenter = [3826650.060510,460948.170201,5064844.753000]
-#PIC.Core.CS004D18.phaseCenter = [3826653.792510,460949.826201,5064841.802000]
-#PIC.Core.CS004D19.phaseCenter = [3826659.289510,460947.047202,5064837.928000]
-#PIC.Core.CS004D20.phaseCenter = [3826661.064510,460944.589202,5064836.817000]
-#PIC.Core.CS004D21.phaseCenter = [3826662.230510,460940.488202,5064836.312000]
-#PIC.Core.CS004D22.phaseCenter = [3826661.338510,460936.455202,5064837.347000]
-#PIC.Core.CS004D23.phaseCenter = [3826658.527510,460932.053202,5064839.855000]
-#PIC.Core.CS004D24.phaseCenter = [3826655.313510,460929.673201,5064842.482000]
-#PIC.Core.CS004D25.phaseCenter = [3826651.805510,460930.112201,5064845.075000]
-#PIC.Core.CS004D26.phaseCenter = [3826649.390510,460932.807201,5064846.645000]
-#PIC.Core.CS004D27.phaseCenter = [3826647.384510,460937.078201,5064847.764000]
-#PIC.Core.CS004D28.phaseCenter = [3826646.997510,460941.726201,5064847.635000]
-#PIC.Core.CS004D29.phaseCenter = [3826645.698510,460949.660201,5064847.893000]
-#PIC.Core.CS004D30.phaseCenter = [3826647.779510,460952.306201,5064846.092000]
-#PIC.Core.CS004D31.phaseCenter = [3826650.191510,460952.972201,5064844.221000]
-#PIC.Core.CS004D32.phaseCenter = [3826656.586510,460952.182202,5064839.492000]
-#PIC.Core.CS004D33.phaseCenter = [3826658.801510,460953.177202,5064837.740000]
-#PIC.Core.CS004D34.phaseCenter = [3826662.622510,460947.168202,5064835.415000]
-#PIC.Core.CS004D35.phaseCenter = [3826664.333510,460942.467202,5064834.555000]
-#PIC.Core.CS004D36.phaseCenter = [3826666.316510,460937.651202,5064833.502000]
-#PIC.Core.CS004D37.phaseCenter = [3826664.640510,460935.149202,5064834.986000]
-#PIC.Core.CS004D38.phaseCenter = [3826662.649510,460931.249202,5064836.833000]
-#PIC.Core.CS004D39.phaseCenter = [3826658.320510,460927.104202,5064840.458000]
-#PIC.Core.CS004D40.phaseCenter = [3826656.344510,460925.943202,5064842.045000]
-#PIC.Core.CS004D41.phaseCenter = [3826652.094510,460926.731201,5064845.164000]
-#PIC.Core.CS004D42.phaseCenter = [3826648.791510,460926.463201,5064847.668000]
-#PIC.Core.CS004D43.phaseCenter = [3826644.252510,460933.560201,5064850.433000]
-#PIC.Core.CS004D44.phaseCenter = [3826643.331510,460937.422201,5064850.775000]
-#PIC.Core.CS004D45.phaseCenter = [3826642.828510,460942.882201,5064850.660000]
-#PIC.Core.CS004D46.phaseCenter = [3826664.882510,460885.708202,5064839.274000]
-#PIC.Core.CS004D47.phaseCenter = [3826611.489510,460929.214198,5064875.419000]
-#PIC.Core.CS005D00.phaseCenter = [3826668.793500,461069.502202,5064819.725000]
-#PIC.Core.CS005D01.phaseCenter = [3826666.773500,461069.259202,5064821.263000]
-#PIC.Core.CS005D02.phaseCenter = [3826667.455500,461071.607202,5064820.540000]
-#PIC.Core.CS005D03.phaseCenter = [3826669.593500,461071.865202,5064818.911000]
-#PIC.Core.CS005D04.phaseCenter = [3826670.812500,461069.745203,5064818.188000]
-#PIC.Core.CS005D05.phaseCenter = [3826670.131500,461067.397202,5064818.911000]
-#PIC.Core.CS005D06.phaseCenter = [3826667.993500,461067.139202,5064820.539000]
-#PIC.Core.CS005D07.phaseCenter = [3826672.168500,461065.304203,5064817.572000]
-#PIC.Core.CS005D08.phaseCenter = [3826669.326500,461063.728202,5064819.847000]
-#PIC.Core.CS005D09.phaseCenter = [3826666.235500,461064.852202,5064822.066000]
-#PIC.Core.CS005D10.phaseCenter = [3826664.341500,461068.153202,5064823.189000]
-#PIC.Core.CS005D11.phaseCenter = [3826664.530500,461072.084202,5064822.692000]
-#PIC.Core.CS005D12.phaseCenter = [3826666.714500,461074.807202,5064820.806000]
-#PIC.Core.CS005D13.phaseCenter = [3826669.871500,461075.049202,5064818.415000]
-#PIC.Core.CS005D14.phaseCenter = [3826672.523500,461072.694203,5064816.637000]
-#PIC.Core.CS005D15.phaseCenter = [3826673.430500,461068.846203,5064816.304000]
-#PIC.Core.CS005D16.phaseCenter = [3826676.182500,461067.642203,5064814.347000]
-#PIC.Core.CS005D17.phaseCenter = [3826675.640500,461064.099203,5064815.074000]
-#PIC.Core.CS005D18.phaseCenter = [3826673.065500,461060.409203,5064817.341000]
-#PIC.Core.CS005D19.phaseCenter = [3826667.303500,461059.716202,5064821.728000]
-#PIC.Core.CS005D20.phaseCenter = [3826664.852500,461060.909202,5064823.460000]
-#PIC.Core.CS005D21.phaseCenter = [3826662.304500,461063.951202,5064825.098000]
-#PIC.Core.CS005D22.phaseCenter = [3826661.545500,461068.138202,5064825.289000]
-#PIC.Core.CS005D23.phaseCenter = [3826662.295500,461073.781202,5064824.216000]
-#PIC.Core.CS005D24.phaseCenter = [3826664.152500,461077.825202,5064822.456000]
-#PIC.Core.CS005D25.phaseCenter = [3826667.326500,461079.481202,5064819.925000]
-#PIC.Core.CS005D26.phaseCenter = [3826670.414500,461078.446203,5064817.700000]
-#PIC.Core.CS005D27.phaseCenter = [3826673.748500,461075.740203,5064815.443000]
-#PIC.Core.CS005D28.phaseCenter = [3826675.834500,461071.745203,5064814.237000]
-#PIC.Core.CS005D29.phaseCenter = [3826679.944500,461065.300203,5064811.735000]
-#PIC.Core.CS005D30.phaseCenter = [3826679.158500,461061.679203,5064812.652000]
-#PIC.Core.CS005D31.phaseCenter = [3826677.340500,461059.661203,5064814.199000]
-#PIC.Core.CS005D32.phaseCenter = [3826671.560500,461056.633203,5064818.812000]
-#PIC.Core.CS005D33.phaseCenter = [3826670.035500,461054.433202,5064820.155000]
-#PIC.Core.CS005D34.phaseCenter = [3826664.490500,461057.654202,5064824.026000]
-#PIC.Core.CS005D35.phaseCenter = [3826661.247500,461060.923202,5064826.165000]
-#PIC.Core.CS005D36.phaseCenter = [3826657.728500,461064.137202,5064828.516000]
-#PIC.Core.CS005D37.phaseCenter = [3826658.222500,461067.390202,5064827.851000]
-#PIC.Core.CS005D38.phaseCenter = [3826658.456500,461072.098202,5064827.250000]
-#PIC.Core.CS005D39.phaseCenter = [3826660.603500,461078.399202,5064825.068000]
-#PIC.Core.CS005D40.phaseCenter = [3826661.860500,461080.609202,5064823.926000]
-#PIC.Core.CS005D41.phaseCenter = [3826665.802500,461082.383202,5064820.807000]
-#PIC.Core.CS005D42.phaseCenter = [3826668.533500,461084.560202,5064818.560000]
-#PIC.Core.CS005D43.phaseCenter = [3826675.105500,461080.770203,5064813.969000]
-#PIC.Core.CS005D44.phaseCenter = [3826677.353500,461077.802203,5064812.550000]
-#PIC.Core.CS005D45.phaseCenter = [3826679.846500,461073.137203,5064811.100000]
-#PIC.Core.CS005D46.phaseCenter = [3826687.931510,461018.878204,5064809.936000]
-#PIC.Core.CS005D47.phaseCenter = [3826629.117500,461048.374199,5064851.417000]
-#PIC.Core.CS006D00.phaseCenter = [3826596.773490,461145.130197,5064866.950000]
-#PIC.Core.CS006D01.phaseCenter = [3826594.753490,461144.887197,5064868.488000]
-#PIC.Core.CS006D02.phaseCenter = [3826595.435490,461147.235197,5064867.764000]
-#PIC.Core.CS006D03.phaseCenter = [3826597.573490,461147.492197,5064866.136000]
-#PIC.Core.CS006D04.phaseCenter = [3826598.792490,461145.373197,5064865.412000]
-#PIC.Core.CS006D05.phaseCenter = [3826598.111490,461143.025197,5064866.136000]
-#PIC.Core.CS006D06.phaseCenter = [3826595.973490,461142.767197,5064867.764000]
-#PIC.Core.CS006D07.phaseCenter = [3826597.851490,461150.677197,5064865.640000]
-#PIC.Core.CS006D08.phaseCenter = [3826600.503490,461148.322197,5064863.862000]
-#PIC.Core.CS006D09.phaseCenter = [3826601.410490,461144.474197,5064863.529000]
-#PIC.Core.CS006D10.phaseCenter = [3826600.147490,461140.933197,5064864.796000]
-#PIC.Core.CS006D11.phaseCenter = [3826597.306490,461139.356197,5064867.072000]
-#PIC.Core.CS006D12.phaseCenter = [3826594.215490,461140.480197,5064869.291000]
-#PIC.Core.CS006D13.phaseCenter = [3826592.320490,461143.781197,5064870.414000]
-#PIC.Core.CS006D14.phaseCenter = [3826592.510490,461147.711197,5064869.917000]
-#PIC.Core.CS006D15.phaseCenter = [3826594.694490,461150.435197,5064868.031000]
-#PIC.Core.CS006D16.phaseCenter = [3826594.027490,461153.953197,5064868.214000]
-#PIC.Core.CS006D17.phaseCenter = [3826596.791490,461154.973197,5064866.047000]
-#PIC.Core.CS006D18.phaseCenter = [3826600.770490,461153.865197,5064863.161000]
-#PIC.Core.CS006D19.phaseCenter = [3826604.403490,461147.954198,5064860.968000]
-#PIC.Core.CS006D20.phaseCenter = [3826604.912490,461144.768198,5064860.874000]
-#PIC.Core.CS006D21.phaseCenter = [3826604.188490,461140.637198,5064861.791000]
-#PIC.Core.CS006D22.phaseCenter = [3826601.686490,461137.921197,5064863.914000]
-#PIC.Core.CS006D23.phaseCenter = [3826597.346490,461136.172197,5064867.330000]
-#PIC.Core.CS006D24.phaseCenter = [3826593.514490,461136.346197,5064870.190000]
-#PIC.Core.CS006D25.phaseCenter = [3826590.625490,461139.024197,5064872.117000]
-#PIC.Core.CS006D26.phaseCenter = [3826589.657490,461142.828197,5064872.500000]
-#PIC.Core.CS006D27.phaseCenter = [3826589.718490,461147.654197,5064872.017000]
-#PIC.Core.CS006D28.phaseCenter = [3826591.359490,461151.718197,5064870.418000]
-#PIC.Core.CS006D29.phaseCenter = [3826593.601490,461159.078197,5064868.070000]
-#PIC.Core.CS006D30.phaseCenter = [3826596.554490,461159.869197,5064865.783000]
-#PIC.Core.CS006D31.phaseCenter = [3826598.953490,461158.822197,5064864.076000]
-#PIC.Core.CS006D32.phaseCenter = [3826604.222490,461153.948198,5064860.561000]
-#PIC.Core.CS006D33.phaseCenter = [3826606.588490,461153.301198,5064858.844000]
-#PIC.Core.CS006D34.phaseCenter = [3826607.378490,461145.851198,5064858.925000]
-#PIC.Core.CS006D35.phaseCenter = [3826606.875490,461140.868198,5064859.753000]
-#PIC.Core.CS006D36.phaseCenter = [3826606.561490,461135.611198,5064860.464000]
-#PIC.Core.CS006D37.phaseCenter = [3826604.025490,461134.669198,5064862.452000]
-#PIC.Core.CS006D38.phaseCenter = [3826600.618490,461132.789197,5064865.180000]
-#PIC.Core.CS006D39.phaseCenter = [3826595.055490,461132.253197,5064869.404000]
-#PIC.Core.CS006D40.phaseCenter = [3826592.828490,461132.608197,5064871.043000]
-#PIC.Core.CS006D41.phaseCenter = [3826589.439490,461136.062197,5064873.275000]
-#PIC.Core.CS006D42.phaseCenter = [3826586.428490,461138.026196,5064875.358000]
-#PIC.Core.CS006D43.phaseCenter = [3826585.474490,461146.840196,5064875.277000]
-#PIC.Core.CS006D44.phaseCenter = [3826586.311490,461150.614196,5064874.307000]
-#PIC.Core.CS006D45.phaseCenter = [3826588.196490,461155.420196,5064872.458000]
-#PIC.Core.CS006D46.phaseCenter = [3826629.969490,461178.945199,5064838.976000]
-#PIC.Core.CS006D47.phaseCenter = [3826626.771500,461100.374199,5064848.479000]
-#PIC.Core.CS007D00.phaseCenter = [3826533.404490,461098.918192,5064918.692000]
-#PIC.Core.CS007D01.phaseCenter = [3826531.384490,461098.674192,5064920.230000]
-#PIC.Core.CS007D02.phaseCenter = [3826532.065490,461101.023192,5064919.506000]
-#PIC.Core.CS007D03.phaseCenter = [3826534.204490,461101.280192,5064917.878000]
-#PIC.Core.CS007D04.phaseCenter = [3826535.423490,461099.161193,5064917.154000]
-#PIC.Core.CS007D05.phaseCenter = [3826534.742490,461096.813193,5064917.878000]
-#PIC.Core.CS007D06.phaseCenter = [3826532.604490,461096.555192,5064919.506000]
-#PIC.Core.CS007D07.phaseCenter = [3826528.951490,461097.568192,5064922.156000]
-#PIC.Core.CS007D08.phaseCenter = [3826529.140490,461101.500192,5064921.659000]
-#PIC.Core.CS007D09.phaseCenter = [3826531.325490,461104.223192,5064919.773000]
-#PIC.Core.CS007D10.phaseCenter = [3826534.481490,461104.465192,5064917.382000]
-#PIC.Core.CS007D11.phaseCenter = [3826537.134490,461102.110193,5064915.604000]
-#PIC.Core.CS007D12.phaseCenter = [3826538.041490,461098.262193,5064915.271000]
-#PIC.Core.CS007D13.phaseCenter = [3826536.778490,461094.721193,5064916.538000]
-#PIC.Core.CS007D14.phaseCenter = [3826533.937490,461093.144192,5064918.814000]
-#PIC.Core.CS007D15.phaseCenter = [3826530.846490,461094.268192,5064921.032000]
-#PIC.Core.CS007D16.phaseCenter = [3826528.761490,461091.953192,5064922.807000]
-#PIC.Core.CS007D17.phaseCenter = [3826526.538490,461094.477192,5064924.247000]
-#PIC.Core.CS007D18.phaseCenter = [3826525.135490,461099.276192,5064924.866000]
-#PIC.Core.CS007D19.phaseCenter = [3826527.264490,461105.878192,5064922.671000]
-#PIC.Core.CS007D20.phaseCenter = [3826529.204490,461107.873192,5064921.035000]
-#PIC.Core.CS007D21.phaseCenter = [3826532.478490,461108.962192,5064918.479000]
-#PIC.Core.CS007D22.phaseCenter = [3826535.737490,461107.492193,5064916.165000]
-#PIC.Core.CS007D23.phaseCenter = [3826539.329490,461103.595193,5064913.822000]
-#PIC.Core.CS007D24.phaseCenter = [3826541.303490,461099.378193,5064912.721000]
-#PIC.Core.CS007D25.phaseCenter = [3826541.018490,461095.045193,5064913.326000]
-#PIC.Core.CS007D26.phaseCenter = [3826538.898490,461092.275193,5064915.168000]
-#PIC.Core.CS007D27.phaseCenter = [3826535.504490,461090.155193,5064917.908000]
-#PIC.Core.CS007D28.phaseCenter = [3826531.776490,461090.087192,5064920.712000]
-#PIC.Core.CS007D29.phaseCenter = [3826525.424490,461089.172192,5064925.563000]
-#PIC.Core.CS007D30.phaseCenter = [3826523.258490,461092.002192,5064926.932000]
-#PIC.Core.CS007D31.phaseCenter = [3826522.676490,461095.068192,5064927.092000]
-#PIC.Core.CS007D32.phaseCenter = [3826523.188490,461102.967192,5064925.994000]
-#PIC.Core.CS007D33.phaseCenter = [3826522.346490,461105.817192,5064926.369000]
-#PIC.Core.CS007D34.phaseCenter = [3826527.102490,461110.045192,5064922.416000]
-#PIC.Core.CS007D35.phaseCenter = [3826530.848490,461111.759192,5064919.450000]
-#PIC.Core.CS007D36.phaseCenter = [3826534.681490,461113.802193,5064916.388000]
-#PIC.Core.CS007D37.phaseCenter = [3826536.724490,461111.490193,5064915.064000]
-#PIC.Core.CS007D38.phaseCenter = [3826539.896490,461108.662193,5064912.938000]
-#PIC.Core.CS007D39.phaseCenter = [3826543.311490,461102.898193,5064910.896000]
-#PIC.Core.CS007D40.phaseCenter = [3826544.282490,461100.331193,5064910.399000]
-#PIC.Core.CS007D41.phaseCenter = [3826543.729490,461095.105193,5064911.286000]
-#PIC.Core.CS007D42.phaseCenter = [3826544.009490,461090.964193,5064911.451000]
-#PIC.Core.CS007D43.phaseCenter = [3826538.391490,461085.938193,5064916.121000]
-#PIC.Core.CS007D44.phaseCenter = [3826535.306490,461085.134193,5064918.510000]
-#PIC.Core.CS007D45.phaseCenter = [3826530.927490,461084.993192,5064921.810000]
-#PIC.Core.CS007D46.phaseCenter = [3826523.497490,461153.009192,5064921.239000]
-#PIC.Core.CS007D47.phaseCenter = [3826576.322490,461108.390196,5064885.621000]
-#PIC.Core.CS002D00.position = [3826577.109500,461022.900196,5064892.758000]
-#PIC.Core.CS002D01.position = [3826575.090500,461022.657196,5064894.296000]
-#PIC.Core.CS002D02.position = [3826575.771500,461025.005196,5064893.572000]
-#PIC.Core.CS002D03.position = [3826577.909500,461025.263196,5064891.944000]
-#PIC.Core.CS002D04.position = [3826579.128500,461023.143196,5064891.220000]
-#PIC.Core.CS002D05.position = [3826578.447500,461020.795196,5064891.944000]
-#PIC.Core.CS002D06.position = [3826576.309500,461020.537196,5064893.572000]
-#PIC.Core.CS002D07.position = [3826574.036500,461018.775195,5064895.437000]
-#PIC.Core.CS002D08.position = [3826572.516500,461022.347195,5064896.256000]
-#PIC.Core.CS002D09.position = [3826573.144500,461026.177195,5064895.438000]
-#PIC.Core.CS002D10.position = [3826575.628500,461028.475196,5064893.365000]
-#PIC.Core.CS002D11.position = [3826578.805500,461028.164196,5064891.009000]
-#PIC.Core.CS002D12.position = [3826581.188500,461025.390196,5064889.471000]
-#PIC.Core.CS002D13.position = [3826581.662500,461021.450196,5064889.471000]
-#PIC.Core.CS002D14.position = [3826580.006500,461018.190196,5064891.009000]
-#PIC.Core.CS002D15.position = [3826576.995500,461017.133196,5064893.365000]
-#PIC.Core.CS002D16.position = [3826576.272500,461013.726196,5064894.215000]
-#PIC.Core.CS002D17.position = [3826573.376500,461014.469195,5064896.322000]
-#PIC.Core.CS002D18.position = [3826570.181500,461017.749195,5064898.424000]
-#PIC.Core.CS002D19.position = [3826569.112500,461024.945195,5064898.576000]
-#PIC.Core.CS002D20.position = [3826569.852500,461027.976195,5064897.746000]
-#PIC.Core.CS002D21.position = [3826572.070500,461031.095195,5064895.800000]
-#PIC.Core.CS002D22.position = [3826575.368500,461031.959196,5064893.246000]
-#PIC.Core.CS002D23.position = [3826579.971500,461030.917196,5064889.885000]
-#PIC.Core.CS002D24.position = [3826583.385500,461028.524196,5064887.539000]
-#PIC.Core.CS002D25.position = [3826584.999500,461024.537196,5064886.688000]
-#PIC.Core.CS002D26.position = [3826584.442500,461020.707196,5064887.452000]
-#PIC.Core.CS002D27.position = [3826582.564500,461016.605196,5064889.232000]
-#PIC.Core.CS002D28.position = [3826579.539500,461014.081196,5064891.731000]
-#PIC.Core.CS002D29.position = [3826574.724500,461009.083195,5064895.797000]
-#PIC.Core.CS002D30.position = [3826571.744500,461010.132195,5064897.939000]
-#PIC.Core.CS002D31.position = [3826569.960500,461012.435195,5064899.070000]
-#PIC.Core.CS002D32.position = [3826567.013500,461019.699195,5064900.626000]
-#PIC.Core.CS002D33.position = [3826565.109500,461021.640195,5064901.880000]
-#PIC.Core.CS002D34.position = [3826567.204500,461028.490195,5064899.688000]
-#PIC.Core.CS002D35.position = [3826569.542500,461032.470195,5064897.573000]
-#PIC.Core.CS002D36.position = [3826571.812500,461036.793195,5064895.478000]
-#PIC.Core.CS002D37.position = [3826574.471500,461036.116195,5064893.544000]
-#PIC.Core.CS002D38.position = [3826578.276500,461035.734196,5064890.722000]
-#PIC.Core.CS002D39.position = [3826583.531500,461032.936196,5064887.030000]
-#PIC.Core.CS002D40.position = [3826585.419500,461031.329196,5064885.758000]
-#PIC.Core.CS002D41.position = [3826587.195500,461026.381196,5064884.873000]
-#PIC.Core.CS002D42.position = [3826589.188500,461022.935197,5064883.688000]
-#PIC.Core.CS002D43.position = [3826586.727500,461014.817196,5064886.269000]
-#PIC.Core.CS002D44.position = [3826584.542500,461012.072196,5064888.157000]
-#PIC.Core.CS002D45.position = [3826581.014500,461009.055196,5064891.078000]
-#PIC.Core.CS002D46.position = [3826603.455510,460977.274198,5064877.107000]
-#PIC.Core.CS002D47.position = [3826612.589500,461053.051198,5064863.401000]
-##PIC.Core.CS003D00.position = [3826516.791510,460930.018191,5064946.429000]
-#PIC.Core.CS003D01.position = [3826514.771510,460929.774191,5064947.967000]
-#PIC.Core.CS003D02.position = [3826515.452500,460932.123191,5064947.243000]
-#PIC.Core.CS003D03.position = [3826517.591510,460932.380191,5064945.615000]
-#PIC.Core.CS003D04.position = [3826518.810510,460930.261191,5064944.891000]
-#PIC.Core.CS003D05.position = [3826518.129510,460927.913191,5064945.615000]
-#PIC.Core.CS003D06.position = [3826515.991510,460927.655191,5064947.243000]
-#PIC.Core.CS003D07.position = [3826521.344510,460928.568192,5064943.142000]
-#PIC.Core.CS003D08.position = [3826519.688510,460925.308191,5064944.680000]
-#PIC.Core.CS003D09.position = [3826516.676510,460924.251191,5064947.036000]
-#PIC.Core.CS003D10.position = [3826513.718510,460925.893191,5064949.109000]
-#PIC.Core.CS003D11.position = [3826512.197510,460929.464191,5064949.927000]
-#PIC.Core.CS003D12.position = [3826512.826500,460933.295191,5064949.109000]
-#PIC.Core.CS003D13.position = [3826515.310500,460935.593191,5064947.037000]
-#PIC.Core.CS003D14.position = [3826518.487500,460935.281191,5064944.680000]
-#PIC.Core.CS003D15.position = [3826520.870510,460932.508192,5064943.142000]
-#PIC.Core.CS003D16.position = [3826523.638510,460933.271192,5064940.995000]
-#PIC.Core.CS003D17.position = [3826524.704510,460929.807192,5064940.509000]
-#PIC.Core.CS003D18.position = [3826524.166510,460924.869192,5064941.358000]
-#PIC.Core.CS003D19.position = [3826519.739510,460920.454191,5064945.080000]
-#PIC.Core.CS003D20.position = [3826517.224510,460919.880191,5064947.020000]
-#PIC.Core.CS003D21.position = [3826513.839510,460920.862191,5064949.472000]
-#PIC.Core.CS003D22.position = [3826511.434510,460924.032191,5064950.991000]
-#PIC.Core.CS003D23.position = [3826509.643500,460929.476191,5064951.844000]
-#PIC.Core.CS003D24.position = [3826509.441500,460934.248191,5064951.563000]
-#PIC.Core.CS003D25.position = [3826511.336500,460937.797191,5064949.821000]
-#PIC.Core.CS003D26.position = [3826514.308500,460938.931191,5064947.487000]
-#PIC.Core.CS003D27.position = [3826518.191500,460938.761191,5064944.588000]
-#PIC.Core.CS003D28.position = [3826521.604500,460936.638192,5064942.218000]
-#PIC.Core.CS003D29.position = [3826527.718510,460933.703192,5064937.894000]
-#PIC.Core.CS003D30.position = [3826528.618510,460930.008192,5064937.552000]
-#PIC.Core.CS003D31.position = [3826527.989510,460927.039192,5064938.293000]
-#PIC.Core.CS003D32.position = [3826524.541510,460920.564192,5064941.466000]
-#PIC.Core.CS003D33.position = [3826524.230510,460917.628192,5064941.965000]
-#PIC.Core.CS003D34.position = [3826518.314510,460916.787191,5064946.482000]
-#PIC.Core.CS003D35.position = [3826514.264510,460917.509191,5064949.456000]
-#PIC.Core.CS003D36.position = [3826510.012510,460918.002191,5064952.604000]
-#PIC.Core.CS003D37.position = [3826509.029510,460921.180191,5064953.054000]
-#PIC.Core.CS003D38.position = [3826507.214510,460925.463191,5064954.029000]
-#PIC.Core.CS003D39.position = [3826506.289500,460932.406191,5064954.096000]
-#PIC.Core.CS003D40.position = [3826506.376500,460935.174191,5064953.780000]
-#PIC.Core.CS003D41.position = [3826508.850500,460939.333191,5064951.547000]
-#PIC.Core.CS003D42.position = [3826510.161500,460943.047191,5064950.228000]
-#PIC.Core.CS003D43.position = [3826517.161500,460944.068191,5064944.882000]
-#PIC.Core.CS003D44.position = [3826520.267500,460942.952192,5064942.651000]
-#PIC.Core.CS003D45.position = [3826524.297500,460940.509192,5064939.846000]
-#PIC.Core.CS003D46.position = [3826478.141510,460906.374188,5064977.577990]
-#PIC.Core.CS003D47.position = [3826495.639500,460979.543190,5064957.829990]
-#PIC.Core.CS004D00.position = [3826654.240510,460939.528201,5064842.397000]
-#PIC.Core.CS004D01.position = [3826652.220510,460939.284201,5064843.935000]
-#PIC.Core.CS004D02.position = [3826652.902510,460941.633201,5064843.211000]
-#PIC.Core.CS004D03.position = [3826655.040510,460941.890201,5064841.583000]
-#PIC.Core.CS004D04.position = [3826656.259510,460939.771202,5064840.859000]
-#PIC.Core.CS004D05.position = [3826655.578510,460937.423201,5064841.583000]
-#PIC.Core.CS004D06.position = [3826653.440510,460937.165201,5064843.211000]
-#PIC.Core.CS004D07.position = [3826652.759510,460945.103201,5064843.004000]
-#PIC.Core.CS004D08.position = [3826655.936510,460944.791202,5064840.648000]
-#PIC.Core.CS004D09.position = [3826658.319510,460942.018202,5064839.110000]
-#PIC.Core.CS004D10.position = [3826658.793510,460938.078202,5064839.110000]
-#PIC.Core.CS004D11.position = [3826657.137510,460934.818202,5064840.648000]
-#PIC.Core.CS004D12.position = [3826654.126510,460933.761201,5064843.004000]
-#PIC.Core.CS004D13.position = [3826651.167510,460935.403201,5064845.076000]
-#PIC.Core.CS004D14.position = [3826649.647510,460938.974201,5064845.895000]
-#PIC.Core.CS004D15.position = [3826650.275510,460942.805201,5064845.077000]
-#PIC.Core.CS004D16.position = [3826648.230510,460945.448201,5064846.373000]
-#PIC.Core.CS004D17.position = [3826650.060510,460948.170201,5064844.753000]
-#PIC.Core.CS004D18.position = [3826653.792510,460949.826201,5064841.802000]
-#PIC.Core.CS004D19.position = [3826659.289510,460947.047202,5064837.928000]
-#PIC.Core.CS004D20.position = [3826661.064510,460944.589202,5064836.817000]
-#PIC.Core.CS004D21.position = [3826662.230510,460940.488202,5064836.312000]
-#PIC.Core.CS004D22.position = [3826661.338510,460936.455202,5064837.347000]
-#PIC.Core.CS004D23.position = [3826658.527510,460932.053202,5064839.855000]
-#PIC.Core.CS004D24.position = [3826655.313510,460929.673201,5064842.482000]
-#PIC.Core.CS004D25.position = [3826651.805510,460930.112201,5064845.075000]
-#PIC.Core.CS004D26.position = [3826649.390510,460932.807201,5064846.645000]
-#PIC.Core.CS004D27.position = [3826647.384510,460937.078201,5064847.764000]
-#PIC.Core.CS004D28.position = [3826646.997510,460941.726201,5064847.635000]
-#PIC.Core.CS004D29.position = [3826645.698510,460949.660201,5064847.893000]
-#PIC.Core.CS004D30.position = [3826647.779510,460952.306201,5064846.092000]
-#PIC.Core.CS004D31.position = [3826650.191510,460952.972201,5064844.221000]
-#PIC.Core.CS004D32.position = [3826656.586510,460952.182202,5064839.492000]
-#PIC.Core.CS004D33.position = [3826658.801510,460953.177202,5064837.740000]
-#PIC.Core.CS004D34.position = [3826662.622510,460947.168202,5064835.415000]
-#PIC.Core.CS004D35.position = [3826664.333510,460942.467202,5064834.555000]
-#PIC.Core.CS004D36.position = [3826666.316510,460937.651202,5064833.502000]
-#PIC.Core.CS004D37.position = [3826664.640510,460935.149202,5064834.986000]
-#PIC.Core.CS004D38.position = [3826662.649510,460931.249202,5064836.833000]
-#PIC.Core.CS004D39.position = [3826658.320510,460927.104202,5064840.458000]
-#PIC.Core.CS004D40.position = [3826656.344510,460925.943202,5064842.045000]
-#PIC.Core.CS004D41.position = [3826652.094510,460926.731201,5064845.164000]
-#PIC.Core.CS004D42.position = [3826648.791510,460926.463201,5064847.668000]
-#PIC.Core.CS004D43.position = [3826644.252510,460933.560201,5064850.433000]
-#PIC.Core.CS004D44.position = [3826643.331510,460937.422201,5064850.775000]
-#PIC.Core.CS004D45.position = [3826642.828510,460942.882201,5064850.660000]
-#PIC.Core.CS004D46.position = [3826664.882510,460885.708202,5064839.274000]
-#PIC.Core.CS004D47.position = [3826611.489510,460929.214198,5064875.419000]
-#PIC.Core.CS005D00.position = [3826668.793500,461069.502202,5064819.725000]
-#PIC.Core.CS005D01.position = [3826666.773500,461069.259202,5064821.263000]
-#PIC.Core.CS005D02.position = [3826667.455500,461071.607202,5064820.540000]
-#PIC.Core.CS005D03.position = [3826669.593500,461071.865202,5064818.911000]
-#PIC.Core.CS005D04.position = [3826670.812500,461069.745203,5064818.188000]
-#PIC.Core.CS005D05.position = [3826670.131500,461067.397202,5064818.911000]
-#PIC.Core.CS005D06.position = [3826667.993500,461067.139202,5064820.539000]
-#PIC.Core.CS005D07.position = [3826672.168500,461065.304203,5064817.572000]
-#PIC.Core.CS005D08.position = [3826669.326500,461063.728202,5064819.847000]
-#PIC.Core.CS005D09.position = [3826666.235500,461064.852202,5064822.066000]
-#PIC.Core.CS005D10.position = [3826664.341500,461068.153202,5064823.189000]
-#PIC.Core.CS005D11.position = [3826664.530500,461072.084202,5064822.692000]
-#PIC.Core.CS005D12.position = [3826666.714500,461074.807202,5064820.806000]
-#PIC.Core.CS005D13.position = [3826669.871500,461075.049202,5064818.415000]
-#PIC.Core.CS005D14.position = [3826672.523500,461072.694203,5064816.637000]
-#PIC.Core.CS005D15.position = [3826673.430500,461068.846203,5064816.304000]
-#PIC.Core.CS005D16.position = [3826676.182500,461067.642203,5064814.347000]
-#PIC.Core.CS005D17.position = [3826675.640500,461064.099203,5064815.074000]
-#PIC.Core.CS005D18.position = [3826673.065500,461060.409203,5064817.341000]
-#PIC.Core.CS005D19.position = [3826667.303500,461059.716202,5064821.728000]
-#PIC.Core.CS005D20.position = [3826664.852500,461060.909202,5064823.460000]
-#PIC.Core.CS005D21.position = [3826662.304500,461063.951202,5064825.098000]
-#PIC.Core.CS005D22.position = [3826661.545500,461068.138202,5064825.289000]
-#PIC.Core.CS005D23.position = [3826662.295500,461073.781202,5064824.216000]
-#PIC.Core.CS005D24.position = [3826664.152500,461077.825202,5064822.456000]
-#PIC.Core.CS005D25.position = [3826667.326500,461079.481202,5064819.925000]
-#PIC.Core.CS005D26.position = [3826670.414500,461078.446203,5064817.700000]
-#PIC.Core.CS005D27.position = [3826673.748500,461075.740203,5064815.443000]
-#PIC.Core.CS005D28.position = [3826675.834500,461071.745203,5064814.237000]
-#PIC.Core.CS005D29.position = [3826679.944500,461065.300203,5064811.735000]
-#PIC.Core.CS005D30.position = [3826679.158500,461061.679203,5064812.652000]
-#PIC.Core.CS005D31.position = [3826677.340500,461059.661203,5064814.199000]
-#PIC.Core.CS005D32.position = [3826671.560500,461056.633203,5064818.812000]
-#PIC.Core.CS005D33.position = [3826670.035500,461054.433202,5064820.155000]
-#PIC.Core.CS005D34.position = [3826664.490500,461057.654202,5064824.026000]
-#PIC.Core.CS005D35.position = [3826661.247500,461060.923202,5064826.165000]
-#PIC.Core.CS005D36.position = [3826657.728500,461064.137202,5064828.516000]
-#PIC.Core.CS005D37.position = [3826658.222500,461067.390202,5064827.851000]
-#PIC.Core.CS005D38.position = [3826658.456500,461072.098202,5064827.250000]
-#PIC.Core.CS005D39.position = [3826660.603500,461078.399202,5064825.068000]
-#PIC.Core.CS005D40.position = [3826661.860500,461080.609202,5064823.926000]
-#PIC.Core.CS005D41.position = [3826665.802500,461082.383202,5064820.807000]
-#PIC.Core.CS005D42.position = [3826668.533500,461084.560202,5064818.560000]
-#PIC.Core.CS005D43.position = [3826675.105500,461080.770203,5064813.969000]
-#PIC.Core.CS005D44.position = [3826677.353500,461077.802203,5064812.550000]
-#PIC.Core.CS005D45.position = [3826679.846500,461073.137203,5064811.100000]
-#PIC.Core.CS005D46.position = [3826687.931510,461018.878204,5064809.936000]
-#PIC.Core.CS005D47.position = [3826629.117500,461048.374199,5064851.417000]
-#PIC.Core.CS006D00.position = [3826596.773490,461145.130197,5064866.950000]
-#PIC.Core.CS006D01.position = [3826594.753490,461144.887197,5064868.488000]
-#PIC.Core.CS006D02.position = [3826595.435490,461147.235197,5064867.764000]
-#PIC.Core.CS006D03.position = [3826597.573490,461147.492197,5064866.136000]
-#PIC.Core.CS006D04.position = [3826598.792490,461145.373197,5064865.412000]
-#PIC.Core.CS006D05.position = [3826598.111490,461143.025197,5064866.136000]
-#PIC.Core.CS006D06.position = [3826595.973490,461142.767197,5064867.764000]
-#PIC.Core.CS006D07.position = [3826597.851490,461150.677197,5064865.640000]
-#PIC.Core.CS006D08.position = [3826600.503490,461148.322197,5064863.862000]
-#PIC.Core.CS006D09.position = [3826601.410490,461144.474197,5064863.529000]
-#PIC.Core.CS006D10.position = [3826600.147490,461140.933197,5064864.796000]
-#PIC.Core.CS006D11.position = [3826597.306490,461139.356197,5064867.072000]
-#PIC.Core.CS006D12.position = [3826594.215490,461140.480197,5064869.291000]
-#PIC.Core.CS006D13.position = [3826592.320490,461143.781197,5064870.414000]
-#PIC.Core.CS006D14.position = [3826592.510490,461147.711197,5064869.917000]
-#PIC.Core.CS006D15.position = [3826594.694490,461150.435197,5064868.031000]
-#PIC.Core.CS006D16.position = [3826594.027490,461153.953197,5064868.214000]
-#PIC.Core.CS006D17.position = [3826596.791490,461154.973197,5064866.047000]
-#PIC.Core.CS006D18.position = [3826600.770490,461153.865197,5064863.161000]
-#PIC.Core.CS006D19.position = [3826604.403490,461147.954198,5064860.968000]
-#PIC.Core.CS006D20.position = [3826604.912490,461144.768198,5064860.874000]
-#PIC.Core.CS006D21.position = [3826604.188490,461140.637198,5064861.791000]
-#PIC.Core.CS006D22.position = [3826601.686490,461137.921197,5064863.914000]
-#PIC.Core.CS006D23.position = [3826597.346490,461136.172197,5064867.330000]
-#PIC.Core.CS006D24.position = [3826593.514490,461136.346197,5064870.190000]
-#PIC.Core.CS006D25.position = [3826590.625490,461139.024197,5064872.117000]
-#PIC.Core.CS006D26.position = [3826589.657490,461142.828197,5064872.500000]
-#PIC.Core.CS006D27.position = [3826589.718490,461147.654197,5064872.017000]
-#PIC.Core.CS006D28.position = [3826591.359490,461151.718197,5064870.418000]
-#PIC.Core.CS006D29.position = [3826593.601490,461159.078197,5064868.070000]
-#PIC.Core.CS006D30.position = [3826596.554490,461159.869197,5064865.783000]
-#PIC.Core.CS006D31.position = [3826598.953490,461158.822197,5064864.076000]
-#PIC.Core.CS006D32.position = [3826604.222490,461153.948198,5064860.561000]
-#PIC.Core.CS006D33.position = [3826606.588490,461153.301198,5064858.844000]
-#PIC.Core.CS006D34.position = [3826607.378490,461145.851198,5064858.925000]
-#PIC.Core.CS006D35.position = [3826606.875490,461140.868198,5064859.753000]
-#PIC.Core.CS006D36.position = [3826606.561490,461135.611198,5064860.464000]
-#PIC.Core.CS006D37.position = [3826604.025490,461134.669198,5064862.452000]
-#PIC.Core.CS006D38.position = [3826600.618490,461132.789197,5064865.180000]
-#PIC.Core.CS006D39.position = [3826595.055490,461132.253197,5064869.404000]
-#PIC.Core.CS006D40.position = [3826592.828490,461132.608197,5064871.043000]
-#PIC.Core.CS006D41.position = [3826589.439490,461136.062197,5064873.275000]
-#PIC.Core.CS006D42.position = [3826586.428490,461138.026196,5064875.358000]
-#PIC.Core.CS006D43.position = [3826585.474490,461146.840196,5064875.277000]
-#PIC.Core.CS006D44.position = [3826586.311490,461150.614196,5064874.307000]
-#PIC.Core.CS006D45.position = [3826588.196490,461155.420196,5064872.458000]
-#PIC.Core.CS006D46.position = [3826629.969490,461178.945199,5064838.976000]
-#PIC.Core.CS006D47.position = [3826626.771500,461100.374199,5064848.479000]
-#PIC.Core.CS007D00.position = [3826533.404490,461098.918192,5064918.692000]
-#PIC.Core.CS007D01.position = [3826531.384490,461098.674192,5064920.230000]
-#PIC.Core.CS007D02.position = [3826532.065490,461101.023192,5064919.506000]
-#PIC.Core.CS007D03.position = [3826534.204490,461101.280192,5064917.878000]
-#PIC.Core.CS007D04.position = [3826535.423490,461099.161193,5064917.154000]
-#PIC.Core.CS007D05.position = [3826534.742490,461096.813193,5064917.878000]
-#PIC.Core.CS007D06.position = [3826532.604490,461096.555192,5064919.506000]
-#PIC.Core.CS007D07.position = [3826528.951490,461097.568192,5064922.156000]
-#PIC.Core.CS007D08.position = [3826529.140490,461101.500192,5064921.659000]
-#PIC.Core.CS007D09.position = [3826531.325490,461104.223192,5064919.773000]
-#PIC.Core.CS007D10.position = [3826534.481490,461104.465192,5064917.382000]
-#PIC.Core.CS007D11.position = [3826537.134490,461102.110193,5064915.604000]
-#PIC.Core.CS007D12.position = [3826538.041490,461098.262193,5064915.271000]
-#PIC.Core.CS007D13.position = [3826536.778490,461094.721193,5064916.538000]
-#PIC.Core.CS007D14.position = [3826533.937490,461093.144192,5064918.814000]
-#PIC.Core.CS007D15.position = [3826530.846490,461094.268192,5064921.032000]
-#PIC.Core.CS007D16.position = [3826528.761490,461091.953192,5064922.807000]
-#PIC.Core.CS007D17.position = [3826526.538490,461094.477192,5064924.247000]
-#PIC.Core.CS007D18.position = [3826525.135490,461099.276192,5064924.866000]
-#PIC.Core.CS007D19.position = [3826527.264490,461105.878192,5064922.671000]
-#PIC.Core.CS007D20.position = [3826529.204490,461107.873192,5064921.035000]
-#PIC.Core.CS007D21.position = [3826532.478490,461108.962192,5064918.479000]
-#PIC.Core.CS007D22.position = [3826535.737490,461107.492193,5064916.165000]
-#PIC.Core.CS007D23.position = [3826539.329490,461103.595193,5064913.822000]
-#PIC.Core.CS007D24.position = [3826541.303490,461099.378193,5064912.721000]
-#PIC.Core.CS007D25.position = [3826541.018490,461095.045193,5064913.326000]
-#PIC.Core.CS007D26.position = [3826538.898490,461092.275193,5064915.168000]
-#PIC.Core.CS007D27.position = [3826535.504490,461090.155193,5064917.908000]
-#PIC.Core.CS007D28.position = [3826531.776490,461090.087192,5064920.712000]
-#PIC.Core.CS007D29.position = [3826525.424490,461089.172192,5064925.563000]
-#PIC.Core.CS007D30.position = [3826523.258490,461092.002192,5064926.932000]
-#PIC.Core.CS007D31.position = [3826522.676490,461095.068192,5064927.092000]
-#PIC.Core.CS007D32.position = [3826523.188490,461102.967192,5064925.994000]
-#PIC.Core.CS007D33.position = [3826522.346490,461105.817192,5064926.369000]
-#PIC.Core.CS007D34.position = [3826527.102490,461110.045192,5064922.416000]
-#PIC.Core.CS007D35.position = [3826530.848490,461111.759192,5064919.450000]
-#PIC.Core.CS007D36.position = [3826534.681490,461113.802193,5064916.388000]
-#PIC.Core.CS007D37.position = [3826536.724490,461111.490193,5064915.064000]
-#PIC.Core.CS007D38.position = [3826539.896490,461108.662193,5064912.938000]
-#PIC.Core.CS007D39.position = [3826543.311490,461102.898193,5064910.896000]
-#PIC.Core.CS007D40.position = [3826544.282490,461100.331193,5064910.399000]
-#PIC.Core.CS007D41.position = [3826543.729490,461095.105193,5064911.286000]
-#PIC.Core.CS007D42.position = [3826544.009490,461090.964193,5064911.451000]
-#PIC.Core.CS007D43.position = [3826538.391490,461085.938193,5064916.121000]
-#PIC.Core.CS007D44.position = [3826535.306490,461085.134193,5064918.510000]
-#PIC.Core.CS007D45.position = [3826530.927490,461084.993192,5064921.810000]
-#PIC.Core.CS007D46.position = [3826523.497490,461153.009192,5064921.239000]
-#PIC.Core.CS007D47.position = [3826576.322490,461108.390196,5064885.621000]
-# LBA_OUTER
-PIC.Core.CS002D00.phaseCenter = [3826579.492500,461005.105196,5064892.578000]
-PIC.Core.CS002D01.phaseCenter = [3826578.065500,461002.706196,5064893.866000]
-PIC.Core.CS002D02.phaseCenter = [3826566.278500,461008.429195,5064902.196000]
-PIC.Core.CS002D03.phaseCenter = [3826561.238500,461023.545195,5064904.613000]
-PIC.Core.CS002D04.phaseCenter = [3826561.048500,461028.462194,5064904.311000]
-PIC.Core.CS002D05.phaseCenter = [3826567.371500,461037.218195,5064898.774000]
-PIC.Core.CS002D06.phaseCenter = [3826577.471500,461040.701196,5064890.878000]
-PIC.Core.CS002D07.phaseCenter = [3826583.820500,461041.021196,5064886.083000]
-PIC.Core.CS002D08.phaseCenter = [3826590.492500,461028.842197,5064882.175000]
-PIC.Core.CS002D09.phaseCenter = [3826593.010500,461021.160197,5064880.980000]
-PIC.Core.CS002D10.phaseCenter = [3826589.881500,461012.254197,5064884.134000]
-PIC.Core.CS002D11.phaseCenter = [3826590.888500,461004.124197,5064884.112000]
-PIC.Core.CS002D12.phaseCenter = [3826581.799500,460998.392196,5064891.453000]
-PIC.Core.CS002D13.phaseCenter = [3826571.486500,460998.986195,5064899.140000]
-PIC.Core.CS002D14.phaseCenter = [3826566.799500,461001.550195,5064902.426000]
-PIC.Core.CS002D15.phaseCenter = [3826561.056500,461006.369194,5064906.301000]
-PIC.Core.CS002D16.phaseCenter = [3826557.923500,461023.707194,5064907.087000]
-PIC.Core.CS002D17.phaseCenter = [3826558.452500,461031.588194,5064905.977000]
-PIC.Core.CS002D18.phaseCenter = [3826563.447500,461043.574195,5064901.145000]
-PIC.Core.CS002D19.phaseCenter = [3826574.094500,461047.864195,5064892.765000]
-PIC.Core.CS002D20.phaseCenter = [3826581.534500,461047.956196,5064887.172000]
-PIC.Core.CS002D21.phaseCenter = [3826589.542500,461041.302197,5064881.763000]
-PIC.Core.CS002D22.phaseCenter = [3826597.988500,461028.593197,5064876.571000]
-PIC.Core.CS002D23.phaseCenter = [3826597.031500,461011.026197,5064878.878000]
-PIC.Core.CS002D24.phaseCenter = [3826596.814500,460997.283197,5064880.282000]
-PIC.Core.CS002D25.phaseCenter = [3826585.611500,460992.916196,5064889.087000]
-PIC.Core.CS002D26.phaseCenter = [3826573.967500,460992.191195,5064897.892000]
-PIC.Core.CS002D27.phaseCenter = [3826567.574500,460993.250195,5064902.595000]
-PIC.Core.CS002D28.phaseCenter = [3826556.250500,461006.503194,5064909.897000]
-PIC.Core.CS002D29.phaseCenter = [3826549.777500,461023.012194,5064913.263000]
-PIC.Core.CS002D30.phaseCenter = [3826551.123500,461035.050194,5064911.165000]
-PIC.Core.CS002D31.phaseCenter = [3826556.956500,461040.527194,5064906.292000]
-PIC.Core.CS002D32.phaseCenter = [3826562.717500,461052.851195,5064900.854000]
-PIC.Core.CS002D33.phaseCenter = [3826577.449500,461056.665196,5064889.451000]
-PIC.Core.CS002D34.phaseCenter = [3826584.539500,461054.769196,5064884.300000]
-PIC.Core.CS002D35.phaseCenter = [3826595.997500,461046.957197,5064876.406000]
-PIC.Core.CS002D36.phaseCenter = [3826598.671500,461039.287197,5064875.092000]
-PIC.Core.CS002D37.phaseCenter = [3826603.738500,461019.411198,5064873.085000]
-PIC.Core.CS002D38.phaseCenter = [3826600.940500,461013.887197,5064875.685000]
-PIC.Core.CS002D39.phaseCenter = [3826605.295500,461010.467198,5064872.725000]
-PIC.Core.CS002D40.phaseCenter = [3826585.073500,460981.955196,5064890.481000]
-PIC.Core.CS002D41.phaseCenter = [3826564.739500,460986.971195,5064905.291000]
-PIC.Core.CS002D42.phaseCenter = [3826551.009500,460998.299194,5064914.572000]
-PIC.Core.CS002D43.phaseCenter = [3826546.172500,461013.473193,5064916.832000]
-PIC.Core.CS002D44.phaseCenter = [3826556.131500,461055.945194,5064905.517000]
-PIC.Core.CS002D45.phaseCenter = [3826573.680500,461059.292195,5064892.043000]
-PIC.Core.CS002D46.phaseCenter = [3826586.498500,461061.863196,5064882.189000]
-PIC.Core.CS002D47.phaseCenter = [3826607.822500,461026.590198,5064869.371000]
-PIC.Core.CS003D00.phaseCenter = [3826527.881500,460940.655192,5064937.143000]
-PIC.Core.CS003D01.phaseCenter = [3826530.332500,460940.201192,5064935.344000]
-PIC.Core.CS003D02.phaseCenter = [3826532.793510,460924.878192,5064934.882000]
-PIC.Core.CS003D03.phaseCenter = [3826525.021510,460912.584192,5064941.827000]
-PIC.Core.CS003D04.phaseCenter = [3826521.701510,460910.152192,5064944.539000]
-PIC.Core.CS003D05.phaseCenter = [3826512.144510,460913.012191,5064951.454000]
-PIC.Core.CS003D06.phaseCenter = [3826504.196510,460922.342190,5064956.577000]
-PIC.Core.CS003D07.phaseCenter = [3826500.500500,460929.054190,5064958.744000]
-PIC.Core.CS003D08.phaseCenter = [3826505.334500,460941.780190,5064953.966000]
-PIC.Core.CS003D09.phaseCenter = [3826509.307500,460947.981191,5064950.423000]
-PIC.Core.CS003D10.phaseCenter = [3826517.220500,460948.636191,5064944.424000]
-PIC.Core.CS003D11.phaseCenter = [3826522.331500,460953.408192,5064940.156000]
-PIC.Core.CS003D12.phaseCenter = [3826531.295500,460946.188192,5064934.080000]
-PIC.Core.CS003D13.phaseCenter = [3826536.521510,460934.781193,5064931.189000]
-PIC.Core.CS003D14.phaseCenter = [3826537.298510,460928.557193,5064931.168000]
-PIC.Core.CS003D15.phaseCenter = [3826537.082510,460920.171193,5064932.088000]
-PIC.Core.CS003D16.phaseCenter = [3826526.721510,460908.930192,5064940.881000]
-PIC.Core.CS003D17.phaseCenter = [3826520.943510,460905.931192,5064945.489000]
-PIC.Core.CS003D18.phaseCenter = [3826509.863510,460905.894191,5064953.809000]
-PIC.Core.CS003D19.phaseCenter = [3826501.054510,460915.450190,5064959.558000]
-PIC.Core.CS003D20.phaseCenter = [3826496.920500,460923.443190,5064961.938000]
-PIC.Core.CS003D21.phaseCenter = [3826497.175500,460935.107190,5064960.693000]
-PIC.Core.CS003D22.phaseCenter = [3826501.408500,460949.988190,5064956.171000]
-PIC.Core.CS003D23.phaseCenter = [3826514.166500,460956.915191,5064945.968000]
-PIC.Core.CS003D24.phaseCenter = [3826523.855500,460962.908192,5064938.154000]
-PIC.Core.CS003D25.phaseCenter = [3826533.025500,460952.786192,5064932.186000]
-PIC.Core.CS003D26.phaseCenter = [3826539.897510,460940.539193,5064928.134000]
-PIC.Core.CS003D27.phaseCenter = [3826542.655510,460933.155193,5064926.731000]
-PIC.Core.CS003D28.phaseCenter = [3826539.617510,460914.920193,5064930.660000]
-PIC.Core.CS003D29.phaseCenter = [3826531.660510,460900.448192,5064937.941000]
-PIC.Core.CS003D30.phaseCenter = [3826522.539510,460896.447192,5064945.148000]
-PIC.Core.CS003D31.phaseCenter = [3826515.535510,460900.265191,5064950.061000]
-PIC.Core.CS003D32.phaseCenter = [3826503.801510,460900.903190,5064958.811000]
-PIC.Core.CS003D33.phaseCenter = [3826493.089510,460915.084190,5064965.570000]
-PIC.Core.CS003D34.phaseCenter = [3826490.532500,460923.602189,5064966.718990]
-PIC.Core.CS003D35.phaseCenter = [3826489.706500,460939.517189,5064965.900990]
-PIC.Core.CS003D36.phaseCenter = [3826493.586500,460945.880190,5064962.412990]
-PIC.Core.CS003D37.phaseCenter = [3826504.658500,460960.358190,5064952.794000]
-PIC.Core.CS003D38.phaseCenter = [3826510.036500,460959.840191,5064948.804000]
-PIC.Core.CS003D39.phaseCenter = [3826510.036500,460966.093191,5064948.239000]
-PIC.Core.CS003D40.phaseCenter = [3826540.952500,460957.174193,5064925.839000]
-PIC.Core.CS003D41.phaseCenter = [3826548.578510,460932.938194,5064922.305000]
-PIC.Core.CS003D42.phaseCenter = [3826548.197510,460912.976194,5064924.395000]
-PIC.Core.CS003D43.phaseCenter = [3826540.275510,460900.877193,5064931.436000]
-PIC.Core.CS003D44.phaseCenter = [3826505.248510,460892.388190,5064958.494000]
-PIC.Core.CS003D45.phaseCenter = [3826493.321510,460909.823190,5064965.871000]
-PIC.Core.CS003D46.phaseCenter = [3826484.521500,460922.503189,5064971.330990]
-PIC.Core.CS003D47.phaseCenter = [3826497.425500,460961.517190,5064958.119000]
-PIC.Core.CS004D00.phaseCenter = [3826640.767510,460946.686200,5064851.863000]
-PIC.Core.CS004D01.phaseCenter = [3826639.743510,460949.538200,5064852.374000]
-PIC.Core.CS004D02.phaseCenter = [3826649.069510,460959.139201,5064844.506000]
-PIC.Core.CS004D03.phaseCenter = [3826661.881510,460956.316202,5064835.144000]
-PIC.Core.CS004D04.phaseCenter = [3826665.390510,460953.832202,5064832.734000]
-PIC.Core.CS004D05.phaseCenter = [3826668.624510,460942.216202,5064831.357000]
-PIC.Core.CS004D06.phaseCenter = [3826666.474510,460929.403202,5064834.129000]
-PIC.Core.CS004D07.phaseCenter = [3826663.820510,460922.371202,5064836.757000]
-PIC.Core.CS004D08.phaseCenter = [3826652.313510,460921.824201,5064845.443000]
-PIC.Core.CS004D09.phaseCenter = [3826645.822510,460923.306201,5064850.182000]
-PIC.Core.CS004D10.phaseCenter = [3826641.039510,460931.555200,5064853.027000]
-PIC.Core.CS004D11.phaseCenter = [3826634.920510,460934.914200,5064857.316000]
-PIC.Core.CS004D12.phaseCenter = [3826635.046510,460947.866200,5064856.050000]
-PIC.Core.CS004D13.phaseCenter = [3826640.133510,460958.679200,5064851.255000]
-PIC.Core.CS004D14.phaseCenter = [3826644.043510,460962.338201,5064847.989000]
-PIC.Core.CS004D15.phaseCenter = [3826650.001510,460965.905201,5064843.194000]
-PIC.Core.CS004D16.phaseCenter = [3826663.496510,460959.809202,5064833.616000]
-PIC.Core.CS004D17.phaseCenter = [3826668.745510,460954.927202,5064830.117000]
-PIC.Core.CS004D18.phaseCenter = [3826674.830510,460942.977203,5064826.630000]
-PIC.Core.CS004D19.phaseCenter = [3826672.992510,460929.132203,5064829.261000]
-PIC.Core.CS004D20.phaseCenter = [3826669.685510,460921.047203,5064832.474000]
-PIC.Core.CS004D21.phaseCenter = [3826661.423510,460916.036202,5064839.129000]
-PIC.Core.CS004D22.phaseCenter = [3826648.744510,460913.865201,5064848.842000]
-PIC.Core.CS004D23.phaseCenter = [3826636.943510,460924.505200,5064856.738000]
-PIC.Core.CS004D24.phaseCenter = [3826627.470510,460932.254199,5064863.148000]
-PIC.Core.CS004D25.phaseCenter = [3826629.505510,460946.744200,5064860.311000]
-PIC.Core.CS004D26.phaseCenter = [3826634.276510,460959.716200,5064855.557000]
-PIC.Core.CS004D27.phaseCenter = [3826637.911510,460966.041200,5064852.258000]
-PIC.Core.CS004D28.phaseCenter = [3826652.272510,460971.023201,5064841.027000]
-PIC.Core.CS004D29.phaseCenter = [3826666.703510,460968.985202,5064830.380000]
-PIC.Core.CS004D30.phaseCenter = [3826674.477510,460960.948203,5064825.271000]
-PIC.Core.CS004D31.phaseCenter = [3826675.648510,460951.654203,5064825.232000]
-PIC.Core.CS004D32.phaseCenter = [3826681.621510,460938.692203,5064821.920000]
-PIC.Core.CS004D33.phaseCenter = [3826677.602510,460920.696203,5064826.563000]
-PIC.Core.CS004D34.phaseCenter = [3826673.068510,460914.075203,5064830.565000]
-PIC.Core.CS004D35.phaseCenter = [3826662.436510,460905.971202,5064839.278000]
-PIC.Core.CS004D36.phaseCenter = [3826655.882510,460907.279202,5064844.079000]
-PIC.Core.CS004D37.phaseCenter = [3826639.744510,460912.676200,5064855.705000]
-PIC.Core.CS004D38.phaseCenter = [3826637.164510,460918.719200,5064857.095000]
-PIC.Core.CS004D39.phaseCenter = [3826632.809510,460915.885200,5064860.620000]
-PIC.Core.CS004D40.phaseCenter = [3826622.115510,460953.317199,5064865.264000]
-PIC.Core.CS004D41.phaseCenter = [3826634.822510,460972.536200,5064853.989000]
-PIC.Core.CS004D42.phaseCenter = [3826648.933510,460981.170201,5064842.617000]
-PIC.Core.CS004D43.phaseCenter = [3826661.693510,460978.096202,5064833.316000]
-PIC.Core.CS004D44.phaseCenter = [3826686.760510,460944.113204,5064817.572000]
-PIC.Core.CS004D45.phaseCenter = [3826681.140510,460923.330203,5064823.669000]
-PIC.Core.CS004D46.phaseCenter = [3826677.121510,460908.080203,5064828.064000]
-PIC.Core.CS004D47.phaseCenter = [3826642.893510,460904.339201,5064854.095000]
-PIC.Core.CS005D00.phaseCenter = [3826683.049500,461070.888203,5064808.900000]
-PIC.Core.CS005D01.phaseCenter = [3826685.005500,461068.896204,5064807.611000]
-PIC.Core.CS005D02.phaseCenter = [3826680.632500,461054.715203,5064812.176000]
-PIC.Core.CS005D03.phaseCenter = [3826668.579500,461049.779202,5064821.668000]
-PIC.Core.CS005D04.phaseCenter = [3826664.631500,461049.979202,5064824.614000]
-PIC.Core.CS005D05.phaseCenter = [3826657.472500,461058.639202,5064829.205000]
-PIC.Core.CS005D06.phaseCenter = [3826654.480500,461071.536201,5064830.285000]
-PIC.Core.CS005D07.phaseCenter = [3826654.101500,461079.478201,5064829.852000]
-PIC.Core.CS005D08.phaseCenter = [3826663.761500,461086.710202,5064821.947000]
-PIC.Core.CS005D09.phaseCenter = [3826669.887500,461089.165202,5064817.127000]
-PIC.Core.CS005D10.phaseCenter = [3826677.104500,461084.473203,5064812.134000]
-PIC.Core.CS005D11.phaseCenter = [3826683.619500,461085.005203,5064807.196000]
-PIC.Core.CS005D12.phaseCenter = [3826688.400500,461073.167204,5064804.677000]
-PIC.Core.CS005D13.phaseCenter = [3826688.121500,461060.365204,5064806.043000]
-PIC.Core.CS005D14.phaseCenter = [3826686.149500,461054.752204,5064808.031000]
-PIC.Core.CS005D15.phaseCenter = [3826682.387500,461048.024203,5064811.463000]
-PIC.Core.CS005D16.phaseCenter = [3826668.512500,461045.661202,5064822.091000]
-PIC.Core.CS005D17.phaseCenter = [3826662.169500,461047.021202,5064826.729000]
-PIC.Core.CS005D18.phaseCenter = [3826652.439500,461054.314201,5064833.374000]
-PIC.Core.CS005D19.phaseCenter = [3826648.787500,461067.965201,5064834.881000]
-PIC.Core.CS005D20.phaseCenter = [3826648.570500,461077.246201,5064834.205000]
-PIC.Core.CS005D21.phaseCenter = [3826653.765500,461086.635201,5064829.457000]
-PIC.Core.CS005D22.phaseCenter = [3826663.817500,461096.031202,5064821.063000]
-PIC.Core.CS005D23.phaseCenter = [3826677.955500,461093.274203,5064810.700000]
-PIC.Core.CS005D24.phaseCenter = [3826689.003500,461091.782204,5064802.541000]
-PIC.Core.CS005D25.phaseCenter = [3826692.729500,461077.430204,5064801.042000]
-PIC.Core.CS005D26.phaseCenter = [3826693.534500,461062.853204,5064801.755000]
-PIC.Core.CS005D27.phaseCenter = [3826692.806500,461054.979204,5064803.014000]
-PIC.Core.CS005D28.phaseCenter = [3826682.372500,461042.045203,5064812.015000]
-PIC.Core.CS005D29.phaseCenter = [3826669.227500,461035.447202,5064822.477000]
-PIC.Core.CS005D30.phaseCenter = [3826659.527500,461038.196202,5064829.511000]
-PIC.Core.CS005D31.phaseCenter = [3826655.013500,461045.953201,5064832.198000]
-PIC.Core.CS005D32.phaseCenter = [3826644.998500,461054.230201,5064838.967000]
-PIC.Core.CS005D33.phaseCenter = [3826641.649500,461072.931200,5064839.790000]
-PIC.Core.CS005D34.phaseCenter = [3826643.037500,461081.599200,5064837.965000]
-PIC.Core.CS005D35.phaseCenter = [3826649.096500,461095.184201,5064832.189000]
-PIC.Core.CS005D36.phaseCenter = [3826655.209500,461097.834201,5064827.361000]
-PIC.Core.CS005D37.phaseCenter = [3826671.086500,461102.380203,5064815.033000]
-PIC.Core.CS005D38.phaseCenter = [3826675.580500,461098.401203,5064812.019000]
-PIC.Core.CS005D39.phaseCenter = [3826678.245500,461103.525203,5064809.556000]
-PIC.Core.CS005D40.phaseCenter = [3826701.548500,461075.785205,5064794.571000]
-PIC.Core.CS005D41.phaseCenter = [3826697.907500,461050.887205,5064799.555000]
-PIC.Core.CS005D42.phaseCenter = [3826689.066500,461034.784204,5064807.646000]
-PIC.Core.CS005D43.phaseCenter = [3826676.963500,461030.104203,5064817.154000]
-PIC.Core.CS005D44.phaseCenter = [3826642.637500,461046.296200,5064841.456000]
-PIC.Core.CS005D45.phaseCenter = [3826639.610500,461068.466200,5064841.724000]
-PIC.Core.CS005D46.phaseCenter = [3826637.298500,461084.670200,5064841.995000]
-PIC.Core.CS005D47.phaseCenter = [3826665.238500,461108.110202,5064818.904000]
-PIC.Core.CS006D00.phaseCenter = [3826588.011490,461159.899196,5064872.192000]
-PIC.Core.CS006D01.phaseCenter = [3826588.329490,461162.913196,5064871.681000]
-PIC.Core.CS006D02.phaseCenter = [3826600.597490,461164.616197,5064862.319000]
-PIC.Core.CS006D03.phaseCenter = [3826610.626490,461153.837198,5064855.765000]
-PIC.Core.CS006D04.phaseCenter = [3826612.645490,461149.482198,5064854.643000]
-PIC.Core.CS006D05.phaseCenter = [3826610.530490,461137.826198,5064857.284000]
-PIC.Core.CS006D06.phaseCenter = [3826603.184490,461128.748198,5064863.619000]
-PIC.Core.CS006D07.phaseCenter = [3826597.860490,461124.740197,5064867.977000]
-PIC.Core.CS006D08.phaseCenter = [3826587.540490,461131.897196,5064875.077000]
-PIC.Core.CS006D09.phaseCenter = [3826582.480490,461137.401196,5064878.377000]
-PIC.Core.CS006D10.phaseCenter = [3826581.802490,461147.323196,5064877.990000]
-PIC.Core.CS006D11.phaseCenter = [3826577.868490,461154.117196,5064880.328000]
-PIC.Core.CS006D12.phaseCenter = [3826583.498490,461164.646196,5064875.150000]
-PIC.Core.CS006D13.phaseCenter = [3826592.566490,461170.144197,5064867.847000]
-PIC.Core.CS006D14.phaseCenter = [3826597.553490,461170.559197,5064864.066000]
-PIC.Core.CS006D15.phaseCenter = [3826604.298490,461169.544198,5064859.095000]
-PIC.Core.CS006D16.phaseCenter = [3826613.531490,461155.630198,5064853.422000]
-PIC.Core.CS006D17.phaseCenter = [3826616.052490,461148.162198,5064852.205000]
-PIC.Core.CS006D18.phaseCenter = [3826616.294490,461134.350198,5064853.271000]
-PIC.Core.CS006D19.phaseCenter = [3826608.784490,461124.219198,5064859.825000]
-PIC.Core.CS006D20.phaseCenter = [3826602.439490,461119.780197,5064864.989000]
-PIC.Core.CS006D21.phaseCenter = [3826593.059490,461121.135197,5064871.907000]
-PIC.Core.CS006D22.phaseCenter = [3826581.018490,461127.734196,5064880.348000]
-PIC.Core.CS006D23.phaseCenter = [3826575.206490,461144.252195,5064883.218000]
-PIC.Core.CS006D24.phaseCenter = [3826570.204490,461156.862195,5064885.833000]
-PIC.Core.CS006D25.phaseCenter = [3826578.162490,461167.388196,5064878.908000]
-PIC.Core.CS006D26.phaseCenter = [3826587.873490,461174.865196,5064870.943000]
-PIC.Core.CS006D27.phaseCenter = [3826593.755490,461177.645197,5064866.276000]
-PIC.Core.CS006D28.phaseCenter = [3826608.469490,461172.237198,5064855.721000]
-PIC.Core.CS006D29.phaseCenter = [3826620.253490,461161.031199,5064847.889000]
-PIC.Core.CS006D30.phaseCenter = [3826623.644490,461149.308199,5064846.403000]
-PIC.Core.CS006D31.phaseCenter = [3826620.710490,461140.918199,5064849.364000]
-PIC.Core.CS006D32.phaseCenter = [3826620.422490,461126.350199,5064850.896000]
-PIC.Core.CS006D33.phaseCenter = [3826609.230500,461114.260198,5064860.390000]
-PIC.Core.CS006D34.phaseCenter = [3826602.433500,461111.832197,5064865.712000]
-PIC.Core.CS006D35.phaseCenter = [3826589.658490,461112.218197,5064875.266000]
-PIC.Core.CS006D36.phaseCenter = [3826584.469490,461117.621196,5064878.672000]
-PIC.Core.CS006D37.phaseCenter = [3826572.621490,461132.708195,5064886.202000]
-PIC.Core.CS006D38.phaseCenter = [3826572.934490,461139.365195,5064885.365000]
-PIC.Core.CS006D39.phaseCenter = [3826567.908490,461139.921195,5064889.087000]
-PIC.Core.CS006D40.phaseCenter = [3826574.484490,461177.659195,5064880.740000]
-PIC.Core.CS006D41.phaseCenter = [3826593.816490,461185.008197,5064865.565000]
-PIC.Core.CS006D42.phaseCenter = [3826609.866490,461182.757198,5064853.721000]
-PIC.Core.CS006D43.phaseCenter = [3826619.744490,461171.806199,5064847.297000]
-PIC.Core.CS006D44.phaseCenter = [3826627.238500,461127.396199,5064845.686000]
-PIC.Core.CS006D45.phaseCenter = [3826613.453500,461114.081198,5064857.236000]
-PIC.Core.CS006D46.phaseCenter = [3826603.432500,461104.241198,5064865.647000]
-PIC.Core.CS006D47.phaseCenter = [3826571.828490,461123.796195,5064887.603000]
-PIC.Core.CS007D00.phaseCenter = [3826527.909490,461082.763192,5064924.277000]
-PIC.Core.CS007D01.phaseCenter = [3826525.636490,461081.740192,5064926.075000]
-PIC.Core.CS007D02.phaseCenter = [3826517.741490,461094.218191,5064930.874000]
-PIC.Core.CS007D03.phaseCenter = [3826519.764490,461109.935191,5064927.935000]
-PIC.Core.CS007D04.phaseCenter = [3826521.693490,461114.089192,5064926.111000]
-PIC.Core.CS007D05.phaseCenter = [3826530.968490,461117.085192,5064918.878000]
-PIC.Core.CS007D06.phaseCenter = [3826541.306490,461113.264193,5064911.463000]
-PIC.Core.CS007D07.phaseCenter = [3826547.009490,461109.331193,5064907.538000]
-PIC.Core.CS007D08.phaseCenter = [3826547.669490,461094.942193,5064908.344000]
-PIC.Core.CS007D09.phaseCenter = [3826546.603490,461086.983193,5064909.863000]
-PIC.Core.CS007D10.phaseCenter = [3826540.064500,461081.754193,5064915.244000]
-PIC.Core.CS007D11.phaseCenter = [3826537.483500,461074.428193,5064917.844000]
-PIC.Core.CS007D12.phaseCenter = [3826527.071490,461075.738192,5064925.540000]
-PIC.Core.CS007D13.phaseCenter = [3826518.282490,461083.039191,5064931.477000]
-PIC.Core.CS007D14.phaseCenter = [3826515.266490,461088.238191,5064933.272000]
-PIC.Core.CS007D15.phaseCenter = [3826512.285490,461095.982191,5064934.809000]
-PIC.Core.CS007D16.phaseCenter = [3826516.926490,461112.259191,5064929.854000]
-PIC.Core.CS007D17.phaseCenter = [3826520.749490,461118.367191,5064926.433000]
-PIC.Core.CS007D18.phaseCenter = [3826530.236490,461124.886192,5064918.722000]
-PIC.Core.CS007D19.phaseCenter = [3826541.398490,461121.365193,5064910.662000]
-PIC.Core.CS007D20.phaseCenter = [3826547.961490,461116.524193,5064906.174000]
-PIC.Core.CS007D21.phaseCenter = [3826552.146490,461105.780194,5064904.004000]
-PIC.Core.CS007D22.phaseCenter = [3826554.135490,461089.784194,5064903.957000]
-PIC.Core.CS007D23.phaseCenter = [3826545.809500,461076.022193,5064911.449000]
-PIC.Core.CS007D24.phaseCenter = [3826539.762500,461064.905193,5064916.993000]
-PIC.Core.CS007D25.phaseCenter = [3826528.079500,461068.731192,5064925.417000]
-PIC.Core.CS007D26.phaseCenter = [3826517.561490,461075.832191,5064932.670000]
-PIC.Core.CS007D27.phaseCenter = [3826512.409490,461080.924191,5064936.078000]
-PIC.Core.CS007D28.phaseCenter = [3826508.128490,461099.268191,5064937.631990]
-PIC.Core.CS007D29.phaseCenter = [3826509.489490,461117.072191,5064935.001990]
-PIC.Core.CS007D30.phaseCenter = [3826515.799490,461126.046191,5064929.454000]
-PIC.Core.CS007D31.phaseCenter = [3826523.247490,461126.679192,5064923.806000]
-PIC.Core.CS007D32.phaseCenter = [3826533.550490,461132.970192,5064915.505000]
-PIC.Core.CS007D33.phaseCenter = [3826548.091490,461126.360193,5064905.187000]
-PIC.Core.CS007D34.phaseCenter = [3826553.499490,461120.120194,5064901.692000]
-PIC.Core.CS007D35.phaseCenter = [3826560.216490,461106.147194,5064897.913000]
-PIC.Core.CS007D36.phaseCenter = [3826559.291490,461098.095194,5064899.335000]
-PIC.Core.CS007D37.phaseCenter = [3826555.263500,461078.462194,5064904.133000]
-PIC.Core.CS007D38.phaseCenter = [3826550.456500,461075.783194,5064907.984000]
-PIC.Core.CS007D39.phaseCenter = [3826552.817500,461070.104194,5064906.725000]
-PIC.Core.CS007D40.phaseCenter = [3826522.937500,461060.105192,5064930.056000]
-PIC.Core.CS007D41.phaseCenter = [3826507.247490,461077.654191,5064940.246990]
-PIC.Core.CS007D42.phaseCenter = [3826500.037490,461096.010190,5064943.999990]
-PIC.Core.CS007D43.phaseCenter = [3826502.263490,461111.639190,5064940.916990]
-PIC.Core.CS007D44.phaseCenter = [3826529.095490,461139.857192,5064918.226000]
-PIC.Core.CS007D45.phaseCenter = [3826545.906490,461131.003193,5064906.408000]
-PIC.Core.CS007D46.phaseCenter = [3826558.240490,461124.638194,5064897.725000]
-PIC.Core.CS007D47.phaseCenter = [3826561.903500,461081.644195,5064898.861000]
-PIC.Core.CS002D00.position = [3826579.492500,461005.105196,5064892.578000]
-PIC.Core.CS002D01.position = [3826578.065500,461002.706196,5064893.866000]
-PIC.Core.CS002D02.position = [3826566.278500,461008.429195,5064902.196000]
-PIC.Core.CS002D03.position = [3826561.238500,461023.545195,5064904.613000]
-PIC.Core.CS002D04.position = [3826561.048500,461028.462194,5064904.311000]
-PIC.Core.CS002D05.position = [3826567.371500,461037.218195,5064898.774000]
-PIC.Core.CS002D06.position = [3826577.471500,461040.701196,5064890.878000]
-PIC.Core.CS002D07.position = [3826583.820500,461041.021196,5064886.083000]
-PIC.Core.CS002D08.position = [3826590.492500,461028.842197,5064882.175000]
-PIC.Core.CS002D09.position = [3826593.010500,461021.160197,5064880.980000]
-PIC.Core.CS002D10.position = [3826589.881500,461012.254197,5064884.134000]
-PIC.Core.CS002D11.position = [3826590.888500,461004.124197,5064884.112000]
-PIC.Core.CS002D12.position = [3826581.799500,460998.392196,5064891.453000]
-PIC.Core.CS002D13.position = [3826571.486500,460998.986195,5064899.140000]
-PIC.Core.CS002D14.position = [3826566.799500,461001.550195,5064902.426000]
-PIC.Core.CS002D15.position = [3826561.056500,461006.369194,5064906.301000]
-PIC.Core.CS002D16.position = [3826557.923500,461023.707194,5064907.087000]
-PIC.Core.CS002D17.position = [3826558.452500,461031.588194,5064905.977000]
-PIC.Core.CS002D18.position = [3826563.447500,461043.574195,5064901.145000]
-PIC.Core.CS002D19.position = [3826574.094500,461047.864195,5064892.765000]
-PIC.Core.CS002D20.position = [3826581.534500,461047.956196,5064887.172000]
-PIC.Core.CS002D21.position = [3826589.542500,461041.302197,5064881.763000]
-PIC.Core.CS002D22.position = [3826597.988500,461028.593197,5064876.571000]
-PIC.Core.CS002D23.position = [3826597.031500,461011.026197,5064878.878000]
-PIC.Core.CS002D24.position = [3826596.814500,460997.283197,5064880.282000]
-PIC.Core.CS002D25.position = [3826585.611500,460992.916196,5064889.087000]
-PIC.Core.CS002D26.position = [3826573.967500,460992.191195,5064897.892000]
-PIC.Core.CS002D27.position = [3826567.574500,460993.250195,5064902.595000]
-PIC.Core.CS002D28.position = [3826556.250500,461006.503194,5064909.897000]
-PIC.Core.CS002D29.position = [3826549.777500,461023.012194,5064913.263000]
-PIC.Core.CS002D30.position = [3826551.123500,461035.050194,5064911.165000]
-PIC.Core.CS002D31.position = [3826556.956500,461040.527194,5064906.292000]
-PIC.Core.CS002D32.position = [3826562.717500,461052.851195,5064900.854000]
-PIC.Core.CS002D33.position = [3826577.449500,461056.665196,5064889.451000]
-PIC.Core.CS002D34.position = [3826584.539500,461054.769196,5064884.300000]
-PIC.Core.CS002D35.position = [3826595.997500,461046.957197,5064876.406000]
-PIC.Core.CS002D36.position = [3826598.671500,461039.287197,5064875.092000]
-PIC.Core.CS002D37.position = [3826603.738500,461019.411198,5064873.085000]
-PIC.Core.CS002D38.position = [3826600.940500,461013.887197,5064875.685000]
-PIC.Core.CS002D39.position = [3826605.295500,461010.467198,5064872.725000]
-PIC.Core.CS002D40.position = [3826585.073500,460981.955196,5064890.481000]
-PIC.Core.CS002D41.position = [3826564.739500,460986.971195,5064905.291000]
-PIC.Core.CS002D42.position = [3826551.009500,460998.299194,5064914.572000]
-PIC.Core.CS002D43.position = [3826546.172500,461013.473193,5064916.832000]
-PIC.Core.CS002D44.position = [3826556.131500,461055.945194,5064905.517000]
-PIC.Core.CS002D45.position = [3826573.680500,461059.292195,5064892.043000]
-PIC.Core.CS002D46.position = [3826586.498500,461061.863196,5064882.189000]
-PIC.Core.CS002D47.position = [3826607.822500,461026.590198,5064869.371000]
-PIC.Core.CS003D00.position = [3826527.881500,460940.655192,5064937.143000]
-PIC.Core.CS003D01.position = [3826530.332500,460940.201192,5064935.344000]
-PIC.Core.CS003D02.position = [3826532.793510,460924.878192,5064934.882000]
-PIC.Core.CS003D03.position = [3826525.021510,460912.584192,5064941.827000]
-PIC.Core.CS003D04.position = [3826521.701510,460910.152192,5064944.539000]
-PIC.Core.CS003D05.position = [3826512.144510,460913.012191,5064951.454000]
-PIC.Core.CS003D06.position = [3826504.196510,460922.342190,5064956.577000]
-PIC.Core.CS003D07.position = [3826500.500500,460929.054190,5064958.744000]
-PIC.Core.CS003D08.position = [3826505.334500,460941.780190,5064953.966000]
-PIC.Core.CS003D09.position = [3826509.307500,460947.981191,5064950.423000]
-PIC.Core.CS003D10.position = [3826517.220500,460948.636191,5064944.424000]
-PIC.Core.CS003D11.position = [3826522.331500,460953.408192,5064940.156000]
-PIC.Core.CS003D12.position = [3826531.295500,460946.188192,5064934.080000]
-PIC.Core.CS003D13.position = [3826536.521510,460934.781193,5064931.189000]
-PIC.Core.CS003D14.position = [3826537.298510,460928.557193,5064931.168000]
-PIC.Core.CS003D15.position = [3826537.082510,460920.171193,5064932.088000]
-PIC.Core.CS003D16.position = [3826526.721510,460908.930192,5064940.881000]
-PIC.Core.CS003D17.position = [3826520.943510,460905.931192,5064945.489000]
-PIC.Core.CS003D18.position = [3826509.863510,460905.894191,5064953.809000]
-PIC.Core.CS003D19.position = [3826501.054510,460915.450190,5064959.558000]
-PIC.Core.CS003D20.position = [3826496.920500,460923.443190,5064961.938000]
-PIC.Core.CS003D21.position = [3826497.175500,460935.107190,5064960.693000]
-PIC.Core.CS003D22.position = [3826501.408500,460949.988190,5064956.171000]
-PIC.Core.CS003D23.position = [3826514.166500,460956.915191,5064945.968000]
-PIC.Core.CS003D24.position = [3826523.855500,460962.908192,5064938.154000]
-PIC.Core.CS003D25.position = [3826533.025500,460952.786192,5064932.186000]
-PIC.Core.CS003D26.position = [3826539.897510,460940.539193,5064928.134000]
-PIC.Core.CS003D27.position = [3826542.655510,460933.155193,5064926.731000]
-PIC.Core.CS003D28.position = [3826539.617510,460914.920193,5064930.660000]
-PIC.Core.CS003D29.position = [3826531.660510,460900.448192,5064937.941000]
-PIC.Core.CS003D30.position = [3826522.539510,460896.447192,5064945.148000]
-PIC.Core.CS003D31.position = [3826515.535510,460900.265191,5064950.061000]
-PIC.Core.CS003D32.position = [3826503.801510,460900.903190,5064958.811000]
-PIC.Core.CS003D33.position = [3826493.089510,460915.084190,5064965.570000]
-PIC.Core.CS003D34.position = [3826490.532500,460923.602189,5064966.718990]
-PIC.Core.CS003D35.position = [3826489.706500,460939.517189,5064965.900990]
-PIC.Core.CS003D36.position = [3826493.586500,460945.880190,5064962.412990]
-PIC.Core.CS003D37.position = [3826504.658500,460960.358190,5064952.794000]
-PIC.Core.CS003D38.position = [3826510.036500,460959.840191,5064948.804000]
-PIC.Core.CS003D39.position = [3826510.036500,460966.093191,5064948.239000]
-PIC.Core.CS003D40.position = [3826540.952500,460957.174193,5064925.839000]
-PIC.Core.CS003D41.position = [3826548.578510,460932.938194,5064922.305000]
-PIC.Core.CS003D42.position = [3826548.197510,460912.976194,5064924.395000]
-PIC.Core.CS003D43.position = [3826540.275510,460900.877193,5064931.436000]
-PIC.Core.CS003D44.position = [3826505.248510,460892.388190,5064958.494000]
-PIC.Core.CS003D45.position = [3826493.321510,460909.823190,5064965.871000]
-PIC.Core.CS003D46.position = [3826484.521500,460922.503189,5064971.330990]
-PIC.Core.CS003D47.position = [3826497.425500,460961.517190,5064958.119000]
-PIC.Core.CS004D00.position = [3826640.767510,460946.686200,5064851.863000]
-PIC.Core.CS004D01.position = [3826639.743510,460949.538200,5064852.374000]
-PIC.Core.CS004D02.position = [3826649.069510,460959.139201,5064844.506000]
-PIC.Core.CS004D03.position = [3826661.881510,460956.316202,5064835.144000]
-PIC.Core.CS004D04.position = [3826665.390510,460953.832202,5064832.734000]
-PIC.Core.CS004D05.position = [3826668.624510,460942.216202,5064831.357000]
-PIC.Core.CS004D06.position = [3826666.474510,460929.403202,5064834.129000]
-PIC.Core.CS004D07.position = [3826663.820510,460922.371202,5064836.757000]
-PIC.Core.CS004D08.position = [3826652.313510,460921.824201,5064845.443000]
-PIC.Core.CS004D09.position = [3826645.822510,460923.306201,5064850.182000]
-PIC.Core.CS004D10.position = [3826641.039510,460931.555200,5064853.027000]
-PIC.Core.CS004D11.position = [3826634.920510,460934.914200,5064857.316000]
-PIC.Core.CS004D12.position = [3826635.046510,460947.866200,5064856.050000]
-PIC.Core.CS004D13.position = [3826640.133510,460958.679200,5064851.255000]
-PIC.Core.CS004D14.position = [3826644.043510,460962.338201,5064847.989000]
-PIC.Core.CS004D15.position = [3826650.001510,460965.905201,5064843.194000]
-PIC.Core.CS004D16.position = [3826663.496510,460959.809202,5064833.616000]
-PIC.Core.CS004D17.position = [3826668.745510,460954.927202,5064830.117000]
-PIC.Core.CS004D18.position = [3826674.830510,460942.977203,5064826.630000]
-PIC.Core.CS004D19.position = [3826672.992510,460929.132203,5064829.261000]
-PIC.Core.CS004D20.position = [3826669.685510,460921.047203,5064832.474000]
-PIC.Core.CS004D21.position = [3826661.423510,460916.036202,5064839.129000]
-PIC.Core.CS004D22.position = [3826648.744510,460913.865201,5064848.842000]
-PIC.Core.CS004D23.position = [3826636.943510,460924.505200,5064856.738000]
-PIC.Core.CS004D24.position = [3826627.470510,460932.254199,5064863.148000]
-PIC.Core.CS004D25.position = [3826629.505510,460946.744200,5064860.311000]
-PIC.Core.CS004D26.position = [3826634.276510,460959.716200,5064855.557000]
-PIC.Core.CS004D27.position = [3826637.911510,460966.041200,5064852.258000]
-PIC.Core.CS004D28.position = [3826652.272510,460971.023201,5064841.027000]
-PIC.Core.CS004D29.position = [3826666.703510,460968.985202,5064830.380000]
-PIC.Core.CS004D30.position = [3826674.477510,460960.948203,5064825.271000]
-PIC.Core.CS004D31.position = [3826675.648510,460951.654203,5064825.232000]
-PIC.Core.CS004D32.position = [3826681.621510,460938.692203,5064821.920000]
-PIC.Core.CS004D33.position = [3826677.602510,460920.696203,5064826.563000]
-PIC.Core.CS004D34.position = [3826673.068510,460914.075203,5064830.565000]
-PIC.Core.CS004D35.position = [3826662.436510,460905.971202,5064839.278000]
-PIC.Core.CS004D36.position = [3826655.882510,460907.279202,5064844.079000]
-PIC.Core.CS004D37.position = [3826639.744510,460912.676200,5064855.705000]
-PIC.Core.CS004D38.position = [3826637.164510,460918.719200,5064857.095000]
-PIC.Core.CS004D39.position = [3826632.809510,460915.885200,5064860.620000]
-PIC.Core.CS004D40.position = [3826622.115510,460953.317199,5064865.264000]
-PIC.Core.CS004D41.position = [3826634.822510,460972.536200,5064853.989000]
-PIC.Core.CS004D42.position = [3826648.933510,460981.170201,5064842.617000]
-PIC.Core.CS004D43.position = [3826661.693510,460978.096202,5064833.316000]
-PIC.Core.CS004D44.position = [3826686.760510,460944.113204,5064817.572000]
-PIC.Core.CS004D45.position = [3826681.140510,460923.330203,5064823.669000]
-PIC.Core.CS004D46.position = [3826677.121510,460908.080203,5064828.064000]
-PIC.Core.CS004D47.position = [3826642.893510,460904.339201,5064854.095000]
-PIC.Core.CS005D00.position = [3826683.049500,461070.888203,5064808.900000]
-PIC.Core.CS005D01.position = [3826685.005500,461068.896204,5064807.611000]
-PIC.Core.CS005D02.position = [3826680.632500,461054.715203,5064812.176000]
-PIC.Core.CS005D03.position = [3826668.579500,461049.779202,5064821.668000]
-PIC.Core.CS005D04.position = [3826664.631500,461049.979202,5064824.614000]
-PIC.Core.CS005D05.position = [3826657.472500,461058.639202,5064829.205000]
-PIC.Core.CS005D06.position = [3826654.480500,461071.536201,5064830.285000]
-PIC.Core.CS005D07.position = [3826654.101500,461079.478201,5064829.852000]
-PIC.Core.CS005D08.position = [3826663.761500,461086.710202,5064821.947000]
-PIC.Core.CS005D09.position = [3826669.887500,461089.165202,5064817.127000]
-PIC.Core.CS005D10.position = [3826677.104500,461084.473203,5064812.134000]
-PIC.Core.CS005D11.position = [3826683.619500,461085.005203,5064807.196000]
-PIC.Core.CS005D12.position = [3826688.400500,461073.167204,5064804.677000]
-PIC.Core.CS005D13.position = [3826688.121500,461060.365204,5064806.043000]
-PIC.Core.CS005D14.position = [3826686.149500,461054.752204,5064808.031000]
-PIC.Core.CS005D15.position = [3826682.387500,461048.024203,5064811.463000]
-PIC.Core.CS005D16.position = [3826668.512500,461045.661202,5064822.091000]
-PIC.Core.CS005D17.position = [3826662.169500,461047.021202,5064826.729000]
-PIC.Core.CS005D18.position = [3826652.439500,461054.314201,5064833.374000]
-PIC.Core.CS005D19.position = [3826648.787500,461067.965201,5064834.881000]
-PIC.Core.CS005D20.position = [3826648.570500,461077.246201,5064834.205000]
-PIC.Core.CS005D21.position = [3826653.765500,461086.635201,5064829.457000]
-PIC.Core.CS005D22.position = [3826663.817500,461096.031202,5064821.063000]
-PIC.Core.CS005D23.position = [3826677.955500,461093.274203,5064810.700000]
-PIC.Core.CS005D24.position = [3826689.003500,461091.782204,5064802.541000]
-PIC.Core.CS005D25.position = [3826692.729500,461077.430204,5064801.042000]
-PIC.Core.CS005D26.position = [3826693.534500,461062.853204,5064801.755000]
-PIC.Core.CS005D27.position = [3826692.806500,461054.979204,5064803.014000]
-PIC.Core.CS005D28.position = [3826682.372500,461042.045203,5064812.015000]
-PIC.Core.CS005D29.position = [3826669.227500,461035.447202,5064822.477000]
-PIC.Core.CS005D30.position = [3826659.527500,461038.196202,5064829.511000]
-PIC.Core.CS005D31.position = [3826655.013500,461045.953201,5064832.198000]
-PIC.Core.CS005D32.position = [3826644.998500,461054.230201,5064838.967000]
-PIC.Core.CS005D33.position = [3826641.649500,461072.931200,5064839.790000]
-PIC.Core.CS005D34.position = [3826643.037500,461081.599200,5064837.965000]
-PIC.Core.CS005D35.position = [3826649.096500,461095.184201,5064832.189000]
-PIC.Core.CS005D36.position = [3826655.209500,461097.834201,5064827.361000]
-PIC.Core.CS005D37.position = [3826671.086500,461102.380203,5064815.033000]
-PIC.Core.CS005D38.position = [3826675.580500,461098.401203,5064812.019000]
-PIC.Core.CS005D39.position = [3826678.245500,461103.525203,5064809.556000]
-PIC.Core.CS005D40.position = [3826701.548500,461075.785205,5064794.571000]
-PIC.Core.CS005D41.position = [3826697.907500,461050.887205,5064799.555000]
-PIC.Core.CS005D42.position = [3826689.066500,461034.784204,5064807.646000]
-PIC.Core.CS005D43.position = [3826676.963500,461030.104203,5064817.154000]
-PIC.Core.CS005D44.position = [3826642.637500,461046.296200,5064841.456000]
-PIC.Core.CS005D45.position = [3826639.610500,461068.466200,5064841.724000]
-PIC.Core.CS005D46.position = [3826637.298500,461084.670200,5064841.995000]
-PIC.Core.CS005D47.position = [3826665.238500,461108.110202,5064818.904000]
-PIC.Core.CS006D00.position = [3826588.011490,461159.899196,5064872.192000]
-PIC.Core.CS006D01.position = [3826588.329490,461162.913196,5064871.681000]
-PIC.Core.CS006D02.position = [3826600.597490,461164.616197,5064862.319000]
-PIC.Core.CS006D03.position = [3826610.626490,461153.837198,5064855.765000]
-PIC.Core.CS006D04.position = [3826612.645490,461149.482198,5064854.643000]
-PIC.Core.CS006D05.position = [3826610.530490,461137.826198,5064857.284000]
-PIC.Core.CS006D06.position = [3826603.184490,461128.748198,5064863.619000]
-PIC.Core.CS006D07.position = [3826597.860490,461124.740197,5064867.977000]
-PIC.Core.CS006D08.position = [3826587.540490,461131.897196,5064875.077000]
-PIC.Core.CS006D09.position = [3826582.480490,461137.401196,5064878.377000]
-PIC.Core.CS006D10.position = [3826581.802490,461147.323196,5064877.990000]
-PIC.Core.CS006D11.position = [3826577.868490,461154.117196,5064880.328000]
-PIC.Core.CS006D12.position = [3826583.498490,461164.646196,5064875.150000]
-PIC.Core.CS006D13.position = [3826592.566490,461170.144197,5064867.847000]
-PIC.Core.CS006D14.position = [3826597.553490,461170.559197,5064864.066000]
-PIC.Core.CS006D15.position = [3826604.298490,461169.544198,5064859.095000]
-PIC.Core.CS006D16.position = [3826613.531490,461155.630198,5064853.422000]
-PIC.Core.CS006D17.position = [3826616.052490,461148.162198,5064852.205000]
-PIC.Core.CS006D18.position = [3826616.294490,461134.350198,5064853.271000]
-PIC.Core.CS006D19.position = [3826608.784490,461124.219198,5064859.825000]
-PIC.Core.CS006D20.position = [3826602.439490,461119.780197,5064864.989000]
-PIC.Core.CS006D21.position = [3826593.059490,461121.135197,5064871.907000]
-PIC.Core.CS006D22.position = [3826581.018490,461127.734196,5064880.348000]
-PIC.Core.CS006D23.position = [3826575.206490,461144.252195,5064883.218000]
-PIC.Core.CS006D24.position = [3826570.204490,461156.862195,5064885.833000]
-PIC.Core.CS006D25.position = [3826578.162490,461167.388196,5064878.908000]
-PIC.Core.CS006D26.position = [3826587.873490,461174.865196,5064870.943000]
-PIC.Core.CS006D27.position = [3826593.755490,461177.645197,5064866.276000]
-PIC.Core.CS006D28.position = [3826608.469490,461172.237198,5064855.721000]
-PIC.Core.CS006D29.position = [3826620.253490,461161.031199,5064847.889000]
-PIC.Core.CS006D30.position = [3826623.644490,461149.308199,5064846.403000]
-PIC.Core.CS006D31.position = [3826620.710490,461140.918199,5064849.364000]
-PIC.Core.CS006D32.position = [3826620.422490,461126.350199,5064850.896000]
-PIC.Core.CS006D33.position = [3826609.230500,461114.260198,5064860.390000]
-PIC.Core.CS006D34.position = [3826602.433500,461111.832197,5064865.712000]
-PIC.Core.CS006D35.position = [3826589.658490,461112.218197,5064875.266000]
-PIC.Core.CS006D36.position = [3826584.469490,461117.621196,5064878.672000]
-PIC.Core.CS006D37.position = [3826572.621490,461132.708195,5064886.202000]
-PIC.Core.CS006D38.position = [3826572.934490,461139.365195,5064885.365000]
-PIC.Core.CS006D39.position = [3826567.908490,461139.921195,5064889.087000]
-PIC.Core.CS006D40.position = [3826574.484490,461177.659195,5064880.740000]
-PIC.Core.CS006D41.position = [3826593.816490,461185.008197,5064865.565000]
-PIC.Core.CS006D42.position = [3826609.866490,461182.757198,5064853.721000]
-PIC.Core.CS006D43.position = [3826619.744490,461171.806199,5064847.297000]
-PIC.Core.CS006D44.position = [3826627.238500,461127.396199,5064845.686000]
-PIC.Core.CS006D45.position = [3826613.453500,461114.081198,5064857.236000]
-PIC.Core.CS006D46.position = [3826603.432500,461104.241198,5064865.647000]
-PIC.Core.CS006D47.position = [3826571.828490,461123.796195,5064887.603000]
-PIC.Core.CS007D00.position = [3826527.909490,461082.763192,5064924.277000]
-PIC.Core.CS007D01.position = [3826525.636490,461081.740192,5064926.075000]
-PIC.Core.CS007D02.position = [3826517.741490,461094.218191,5064930.874000]
-PIC.Core.CS007D03.position = [3826519.764490,461109.935191,5064927.935000]
-PIC.Core.CS007D04.position = [3826521.693490,461114.089192,5064926.111000]
-PIC.Core.CS007D05.position = [3826530.968490,461117.085192,5064918.878000]
-PIC.Core.CS007D06.position = [3826541.306490,461113.264193,5064911.463000]
-PIC.Core.CS007D07.position = [3826547.009490,461109.331193,5064907.538000]
-PIC.Core.CS007D08.position = [3826547.669490,461094.942193,5064908.344000]
-PIC.Core.CS007D09.position = [3826546.603490,461086.983193,5064909.863000]
-PIC.Core.CS007D10.position = [3826540.064500,461081.754193,5064915.244000]
-PIC.Core.CS007D11.position = [3826537.483500,461074.428193,5064917.844000]
-PIC.Core.CS007D12.position = [3826527.071490,461075.738192,5064925.540000]
-PIC.Core.CS007D13.position = [3826518.282490,461083.039191,5064931.477000]
-PIC.Core.CS007D14.position = [3826515.266490,461088.238191,5064933.272000]
-PIC.Core.CS007D15.position = [3826512.285490,461095.982191,5064934.809000]
-PIC.Core.CS007D16.position = [3826516.926490,461112.259191,5064929.854000]
-PIC.Core.CS007D17.position = [3826520.749490,461118.367191,5064926.433000]
-PIC.Core.CS007D18.position = [3826530.236490,461124.886192,5064918.722000]
-PIC.Core.CS007D19.position = [3826541.398490,461121.365193,5064910.662000]
-PIC.Core.CS007D20.position = [3826547.961490,461116.524193,5064906.174000]
-PIC.Core.CS007D21.position = [3826552.146490,461105.780194,5064904.004000]
-PIC.Core.CS007D22.position = [3826554.135490,461089.784194,5064903.957000]
-PIC.Core.CS007D23.position = [3826545.809500,461076.022193,5064911.449000]
-PIC.Core.CS007D24.position = [3826539.762500,461064.905193,5064916.993000]
-PIC.Core.CS007D25.position = [3826528.079500,461068.731192,5064925.417000]
-PIC.Core.CS007D26.position = [3826517.561490,461075.832191,5064932.670000]
-PIC.Core.CS007D27.position = [3826512.409490,461080.924191,5064936.078000]
-PIC.Core.CS007D28.position = [3826508.128490,461099.268191,5064937.631990]
-PIC.Core.CS007D29.position = [3826509.489490,461117.072191,5064935.001990]
-PIC.Core.CS007D30.position = [3826515.799490,461126.046191,5064929.454000]
-PIC.Core.CS007D31.position = [3826523.247490,461126.679192,5064923.806000]
-PIC.Core.CS007D32.position = [3826533.550490,461132.970192,5064915.505000]
-PIC.Core.CS007D33.position = [3826548.091490,461126.360193,5064905.187000]
-PIC.Core.CS007D34.position = [3826553.499490,461120.120194,5064901.692000]
-PIC.Core.CS007D35.position = [3826560.216490,461106.147194,5064897.913000]
-PIC.Core.CS007D36.position = [3826559.291490,461098.095194,5064899.335000]
-PIC.Core.CS007D37.position = [3826555.263500,461078.462194,5064904.133000]
-PIC.Core.CS007D38.position = [3826550.456500,461075.783194,5064907.984000]
-PIC.Core.CS007D39.position = [3826552.817500,461070.104194,5064906.725000]
-PIC.Core.CS007D40.position = [3826522.937500,461060.105192,5064930.056000]
-PIC.Core.CS007D41.position = [3826507.247490,461077.654191,5064940.246990]
-PIC.Core.CS007D42.position = [3826500.037490,461096.010190,5064943.999990]
-PIC.Core.CS007D43.position = [3826502.263490,461111.639190,5064940.916990]
-PIC.Core.CS007D44.position = [3826529.095490,461139.857192,5064918.226000]
-PIC.Core.CS007D45.position = [3826545.906490,461131.003193,5064906.408000]
-PIC.Core.CS007D46.position = [3826558.240490,461124.638194,5064897.725000]
-PIC.Core.CS007D47.position = [3826561.903500,461081.644195,5064898.861000]
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.small-test b/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.small-test
deleted file mode 100644
index d82a2dc4296ce67f8f90843a410b806331dbb43f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.parset.small-test
+++ /dev/null
@@ -1,2113 +0,0 @@
-OLAP.CNProc.phaseTwoPsets = [0..7]
-OLAP.CNProc.integrationSteps		 = 1536
-OLAP.CNProc.partition			 = PartitionName
-OLAP.CNProc.tabList			 = []
-Cobalt.realTime				 = F
-OLAP.maxNetworkDelay			 = .1
-Cobalt.correctClocks			 = T
-Cobalt.correctBandPass			 = T
-Observation.nrBitsPerSample			 = 8
-OLAP.nrTimesInFrame			 = 16
-OLAP.nrSecondsOfBuffer			 = 3.5
-OLAP.CNProc.nrPPFTaps			 = 16
-OLAP.Storage.userName			 = 
-OLAP.Storage.sshIdentityFile =
-OLAP.Storage.msWriter			 = outputProc
-OLAP.storageNodeList			 = [8*0]
-OLAP.OLAP_Conn.IONProc_Storage_Ports	 = [8300..9000]
-OLAP.OLAP_Conn.IONProc_Storage_Transport = TCP
-OLAP.OLAP_Conn.rawDataOutputOnly	 = F
-OLAP.storageStationNames		 = [CS002D00,CS002D01,CS002D02,CS002D03,CS002D04,CS002D05,CS002D06,CS002D07]
-OLAP.tiedArrayStationNames		 = []
-Observation.Beam[0].nrTiedArrayBeams 	 = 2
-Observation.Beam[0].TiedArrayBeam[0].absoluteAngle1 = 6.3336866848083394 # Cygnus + 1.1
-Observation.Beam[0].TiedArrayBeam[0].absoluteAngle2 = 1.91094251447010637 # Cygnus + 1.2
-Observation.Beam[0].TiedArrayBeam[1].absoluteAngle1 = 6.4336866848083394 # Cygnus + 1.3
-Observation.Beam[0].TiedArrayBeam[1].absoluteAngle2 = 2.11094251447010637 # Cygnus + 1.4
-Cobalt.Correlator.nrBlocksPerIntegration		 = 2
-Cobalt.BeamFormer.CoherentStokes.timeIntegrationFactor = 1
-Cobalt.BeamFormer.IncoherentStokes.timeIntegrationFactor = 1
-Cobalt.BeamFormer.CoherentStokes.nrChannelsPerSubband = 16
-Cobalt.BeamFormer.IncoherentStokes.nrChannelsPerSubband = 16
-Cobalt.BeamFormer.CoherentStokes.which	 = I # IQUV
-Cobalt.BeamFormer.IncoherentStokes.which	 = I # IQUV
-OLAP.PencilInfo.storageNodeList		 = []
-Cobalt.delayCompensation			 = T
-OLAP.DelayComp.positionType		 = ITRF
-OLAP.DelayComp.nrCalcDelays		 = 16
-OLAP.dispersionMeasure			 = 2
-Observation.ObserverName		 = John
-Observation.Campaign.name		 = Test
-Observation.Campaign.title		 = dr.
-Observation.Campaign.contact		 = Jan David
-Observation.Campaign.PI			 = John
-Observation.Campaign.CO_I		 = John
-Observation.ProjectName			 = AARTFAAC
-Observation.nrPolarisations		 = 2
-Observation.antennaSet			 = LBA_OUTER
-Observation.bandFilter			 = LBA_30_90
-Observation.subbandList			 = [300..309]
-Observation.beamList			 = [10*0]
-Observation.rspBoardList		 = [10*0]
-Observation.rspSlotList		 	 = [0..9]
-Cobalt.Correlator.nrChannelsPerSubband		 = 64
-Observation.sampleClock			 = 200
-Observation.nrSlotsInFrame		 = 10
-Observation.ObsID			 = 1000000
-Observation.startTime			 = '2010-04-28 17:25:03'
-#Observation.stopTime			 = '2010-04-28 17:26:03'
-Observation.stopTime			 = '2010-04-28 17:25:08'
-Observation.nrBeams			 = 1
-Observation.AnaBeam[0].directionType	 = J2000
-Observation.AnaBeam[0].angle1		 = 5.2336866848083394 # Cygnus
-Observation.AnaBeam[0].angle2		 = 0.71094251447010637
-Observation.AnaBeam[0].target		 = Cygnus A
-Observation.Beam[0].directionType	 = J2000
-Observation.Beam[0].angle1		 = 5.2336866848083394 # Cygnus
-Observation.Beam[0].angle2		 = 0.71094251447010637
-Observation.Beam[0].target		 = Cygnus A
-#Observation.MSNameMask			 = /tmp/romein${RAID}/L${YEAR}_${MSNUMBER}/SB${SUBBAND}.MS
-OLAP.Storage.hosts			 = [localhost]
-Observation.DataProducts.Output_FilteredData.enabled	 = F
-Observation.DataProducts.Output_FilteredData.locations	 = [10*localhost:/tmp]
-Observation.DataProducts.Output_FilteredData.filenames	 = [SB000.filt,SB001.filt,SB002.filt,SB003.filt,SB004.filt]
-Observation.DataProducts.Output_Correlated.enabled	 = T
-Observation.DataProducts.Output_Correlated.locations	 = [10*localhost:/var/tmp/romein/AARTFAAC-dataset]
-Observation.DataProducts.Output_Correlated.filenames	 = [SB000.MS,SB001.MS,SB002.MS,SB003.MS,SB004.MS,SB005.MS,SB006.MS,SB007.MS,SB008.MS,SB009.MS]
-Observation.DataProducts.Output_IncoherentStokes.enabled	 = F
-Observation.DataProducts.Output_IncoherentStokes.locations	 = [10*localhost:/tmp]
-Observation.DataProducts.Output_IncoherentStokes.filenames	 = [SB000.incStokes,SB001.incStokes,SB002.incStokes,SB003.incStokes,SB004.incStokes]
-Observation.DataProducts.Output_Beamformed.enabled	 = F
-Observation.DataProducts.Output_Beamformed.locations	 = [4*localhost:/tmp]
-Observation.DataProducts.Output_Beamformed.filenames	 = [CV001.X,CV001.Y,CV002.X,CV002.Y]
-#Observation.DataProducts.Output_Beamformed.locations	 = [2*localhost:/tmp]
-#Observation.DataProducts.Output_Beamformed.filenames	 = [CV001.X,CV001.Y]
-Observation.DataProducts.Output_CoherentStokes.enabled	 = F
-Observation.DataProducts.Output_CoherentStokes.locations = [2*localhost:/tmp]
-Observation.DataProducts.Output_CoherentStokes.filenames = [Coherent.0.I,Coherent.1.I]
-#Observation.DataProducts.Output_CoherentStokes.locations = [8*localhost:/tmp]
-#Observation.DataProducts.Output_CoherentStokes.filenames = [Coherent.0.I,Coherent.0.Q,Coherent.0.U,Coherent.0.V,Coherent.1.I,Coherent.1.Q,Coherent.1.U,Coherent.1.V]
-Observation.DataProducts.Output_Trigger.enabled		 = F
-Observation.DataProducts.Output_Trigger.locations	 = []
-Observation.DataProducts.Output_Trigger.filenames	 = []
-OLAP.Storage.subbandsPerPart		 = 5
-OLAP.Storage.partsPerStokes		 = 1
-PIC.Core.IONProc.PartitionName[0].inputs = [CS002D00/RSP0]
-PIC.Core.IONProc.PartitionName[1].inputs = [CS002D01/RSP0]
-PIC.Core.IONProc.PartitionName[2].inputs = [CS002D02/RSP0]
-PIC.Core.IONProc.PartitionName[3].inputs = [CS002D03/RSP0]
-PIC.Core.IONProc.PartitionName[4].inputs = [CS002D04/RSP0]
-PIC.Core.IONProc.PartitionName[5].inputs = [CS002D05/RSP0]
-PIC.Core.IONProc.PartitionName[6].inputs = [CS002D06/RSP0]
-PIC.Core.IONProc.PartitionName[7].inputs = [CS002D07/RSP0]
-PIC.Core.IONProc.PartitionName[8].inputs = [CS002D08/RSP0]
-PIC.Core.IONProc.PartitionName[9].inputs = [CS002D09/RSP0]
-PIC.Core.IONProc.PartitionName[10].inputs = [CS002D10/RSP0]
-PIC.Core.IONProc.PartitionName[11].inputs = [CS002D11/RSP0]
-PIC.Core.IONProc.PartitionName[12].inputs = [CS002D12/RSP0]
-PIC.Core.IONProc.PartitionName[13].inputs = [CS002D13/RSP0]
-PIC.Core.IONProc.PartitionName[14].inputs = [CS002D14/RSP0]
-PIC.Core.IONProc.PartitionName[15].inputs = [CS002D15/RSP0]
-PIC.Core.IONProc.PartitionName[16].inputs = [CS002D16/RSP0]
-PIC.Core.IONProc.PartitionName[17].inputs = [CS002D17/RSP0]
-PIC.Core.IONProc.PartitionName[18].inputs = [CS002D18/RSP0]
-PIC.Core.IONProc.PartitionName[19].inputs = [CS002D19/RSP0]
-PIC.Core.IONProc.PartitionName[20].inputs = [CS002D20/RSP0]
-PIC.Core.IONProc.PartitionName[21].inputs = [CS002D21/RSP0]
-PIC.Core.IONProc.PartitionName[22].inputs = [CS002D22/RSP0]
-PIC.Core.IONProc.PartitionName[23].inputs = [CS002D23/RSP0]
-PIC.Core.IONProc.PartitionName[24].inputs = [CS002D24/RSP0]
-PIC.Core.IONProc.PartitionName[25].inputs = [CS002D25/RSP0]
-PIC.Core.IONProc.PartitionName[26].inputs = [CS002D26/RSP0]
-PIC.Core.IONProc.PartitionName[27].inputs = [CS002D27/RSP0]
-PIC.Core.IONProc.PartitionName[28].inputs = [CS002D28/RSP0]
-PIC.Core.IONProc.PartitionName[29].inputs = [CS002D29/RSP0]
-PIC.Core.IONProc.PartitionName[30].inputs = [CS002D30/RSP0]
-PIC.Core.IONProc.PartitionName[31].inputs = [CS002D31/RSP0]
-PIC.Core.IONProc.PartitionName[32].inputs = [CS002D32/RSP0]
-PIC.Core.IONProc.PartitionName[33].inputs = [CS002D33/RSP0]
-PIC.Core.IONProc.PartitionName[34].inputs = [CS002D34/RSP0]
-PIC.Core.IONProc.PartitionName[35].inputs = [CS002D35/RSP0]
-PIC.Core.IONProc.PartitionName[36].inputs = [CS002D36/RSP0]
-PIC.Core.IONProc.PartitionName[37].inputs = [CS002D37/RSP0]
-PIC.Core.IONProc.PartitionName[38].inputs = [CS002D38/RSP0]
-PIC.Core.IONProc.PartitionName[39].inputs = [CS002D39/RSP0]
-PIC.Core.IONProc.PartitionName[40].inputs = [CS002D40/RSP0]
-PIC.Core.IONProc.PartitionName[41].inputs = [CS002D41/RSP0]
-PIC.Core.IONProc.PartitionName[42].inputs = [CS002D42/RSP0]
-PIC.Core.IONProc.PartitionName[43].inputs = [CS002D43/RSP0]
-PIC.Core.IONProc.PartitionName[44].inputs = [CS002D44/RSP0]
-PIC.Core.IONProc.PartitionName[45].inputs = [CS002D45/RSP0]
-PIC.Core.IONProc.PartitionName[46].inputs = [CS002D46/RSP0]
-PIC.Core.IONProc.PartitionName[47].inputs = [CS002D47/RSP0]
-PIC.Core.IONProc.PartitionName[48].inputs = [CS003D00/RSP0]
-PIC.Core.IONProc.PartitionName[49].inputs = [CS003D01/RSP0]
-PIC.Core.IONProc.PartitionName[50].inputs = [CS003D02/RSP0]
-PIC.Core.IONProc.PartitionName[51].inputs = [CS003D03/RSP0]
-PIC.Core.IONProc.PartitionName[52].inputs = [CS003D04/RSP0]
-PIC.Core.IONProc.PartitionName[53].inputs = [CS003D05/RSP0]
-PIC.Core.IONProc.PartitionName[54].inputs = [CS003D06/RSP0]
-PIC.Core.IONProc.PartitionName[55].inputs = [CS003D07/RSP0]
-PIC.Core.IONProc.PartitionName[56].inputs = [CS003D08/RSP0]
-PIC.Core.IONProc.PartitionName[57].inputs = [CS003D09/RSP0]
-PIC.Core.IONProc.PartitionName[58].inputs = [CS003D10/RSP0]
-PIC.Core.IONProc.PartitionName[59].inputs = [CS003D11/RSP0]
-PIC.Core.IONProc.PartitionName[60].inputs = [CS003D12/RSP0]
-PIC.Core.IONProc.PartitionName[61].inputs = [CS003D13/RSP0]
-PIC.Core.IONProc.PartitionName[62].inputs = [CS003D14/RSP0]
-PIC.Core.IONProc.PartitionName[63].inputs = [CS003D15/RSP0]
-PIC.Core.IONProc.PartitionName[64].inputs = [CS003D16/RSP0]
-PIC.Core.IONProc.PartitionName[65].inputs = [CS003D17/RSP0]
-PIC.Core.IONProc.PartitionName[66].inputs = [CS003D18/RSP0]
-PIC.Core.IONProc.PartitionName[67].inputs = [CS003D19/RSP0]
-PIC.Core.IONProc.PartitionName[68].inputs = [CS003D20/RSP0]
-PIC.Core.IONProc.PartitionName[69].inputs = [CS003D21/RSP0]
-PIC.Core.IONProc.PartitionName[70].inputs = [CS003D22/RSP0]
-PIC.Core.IONProc.PartitionName[71].inputs = [CS003D23/RSP0]
-PIC.Core.IONProc.PartitionName[72].inputs = [CS003D24/RSP0]
-PIC.Core.IONProc.PartitionName[73].inputs = [CS003D25/RSP0]
-PIC.Core.IONProc.PartitionName[74].inputs = [CS003D26/RSP0]
-PIC.Core.IONProc.PartitionName[75].inputs = [CS003D27/RSP0]
-PIC.Core.IONProc.PartitionName[76].inputs = [CS003D28/RSP0]
-PIC.Core.IONProc.PartitionName[77].inputs = [CS003D29/RSP0]
-PIC.Core.IONProc.PartitionName[78].inputs = [CS003D30/RSP0]
-PIC.Core.IONProc.PartitionName[79].inputs = [CS003D31/RSP0]
-PIC.Core.IONProc.PartitionName[80].inputs = [CS003D32/RSP0]
-PIC.Core.IONProc.PartitionName[81].inputs = [CS003D33/RSP0]
-PIC.Core.IONProc.PartitionName[82].inputs = [CS003D34/RSP0]
-PIC.Core.IONProc.PartitionName[83].inputs = [CS003D35/RSP0]
-PIC.Core.IONProc.PartitionName[84].inputs = [CS003D36/RSP0]
-PIC.Core.IONProc.PartitionName[85].inputs = [CS003D37/RSP0]
-PIC.Core.IONProc.PartitionName[86].inputs = [CS003D38/RSP0]
-PIC.Core.IONProc.PartitionName[87].inputs = [CS003D39/RSP0]
-PIC.Core.IONProc.PartitionName[88].inputs = [CS003D40/RSP0]
-PIC.Core.IONProc.PartitionName[89].inputs = [CS003D41/RSP0]
-PIC.Core.IONProc.PartitionName[90].inputs = [CS003D42/RSP0]
-PIC.Core.IONProc.PartitionName[91].inputs = [CS003D43/RSP0]
-PIC.Core.IONProc.PartitionName[92].inputs = [CS003D44/RSP0]
-PIC.Core.IONProc.PartitionName[93].inputs = [CS003D45/RSP0]
-PIC.Core.IONProc.PartitionName[94].inputs = [CS003D46/RSP0]
-PIC.Core.IONProc.PartitionName[95].inputs = [CS003D47/RSP0]
-PIC.Core.IONProc.PartitionName[96].inputs = [CS004D00/RSP0]
-PIC.Core.IONProc.PartitionName[97].inputs = [CS004D01/RSP0]
-PIC.Core.IONProc.PartitionName[98].inputs = [CS004D02/RSP0]
-PIC.Core.IONProc.PartitionName[99].inputs = [CS004D03/RSP0]
-PIC.Core.IONProc.PartitionName[100].inputs = [CS004D04/RSP0]
-PIC.Core.IONProc.PartitionName[101].inputs = [CS004D05/RSP0]
-PIC.Core.IONProc.PartitionName[102].inputs = [CS004D06/RSP0]
-PIC.Core.IONProc.PartitionName[103].inputs = [CS004D07/RSP0]
-PIC.Core.IONProc.PartitionName[104].inputs = [CS004D08/RSP0]
-PIC.Core.IONProc.PartitionName[105].inputs = [CS004D09/RSP0]
-PIC.Core.IONProc.PartitionName[106].inputs = [CS004D10/RSP0]
-PIC.Core.IONProc.PartitionName[107].inputs = [CS004D11/RSP0]
-PIC.Core.IONProc.PartitionName[108].inputs = [CS004D12/RSP0]
-PIC.Core.IONProc.PartitionName[109].inputs = [CS004D13/RSP0]
-PIC.Core.IONProc.PartitionName[110].inputs = [CS004D14/RSP0]
-PIC.Core.IONProc.PartitionName[111].inputs = [CS004D15/RSP0]
-PIC.Core.IONProc.PartitionName[112].inputs = [CS004D16/RSP0]
-PIC.Core.IONProc.PartitionName[113].inputs = [CS004D17/RSP0]
-PIC.Core.IONProc.PartitionName[114].inputs = [CS004D18/RSP0]
-PIC.Core.IONProc.PartitionName[115].inputs = [CS004D19/RSP0]
-PIC.Core.IONProc.PartitionName[116].inputs = [CS004D20/RSP0]
-PIC.Core.IONProc.PartitionName[117].inputs = [CS004D21/RSP0]
-PIC.Core.IONProc.PartitionName[118].inputs = [CS004D22/RSP0]
-PIC.Core.IONProc.PartitionName[119].inputs = [CS004D23/RSP0]
-PIC.Core.IONProc.PartitionName[120].inputs = [CS004D24/RSP0]
-PIC.Core.IONProc.PartitionName[121].inputs = [CS004D25/RSP0]
-PIC.Core.IONProc.PartitionName[122].inputs = [CS004D26/RSP0]
-PIC.Core.IONProc.PartitionName[123].inputs = [CS004D27/RSP0]
-PIC.Core.IONProc.PartitionName[124].inputs = [CS004D28/RSP0]
-PIC.Core.IONProc.PartitionName[125].inputs = [CS004D29/RSP0]
-PIC.Core.IONProc.PartitionName[126].inputs = [CS004D30/RSP0]
-PIC.Core.IONProc.PartitionName[127].inputs = [CS004D31/RSP0]
-PIC.Core.IONProc.PartitionName[128].inputs = [CS004D32/RSP0]
-PIC.Core.IONProc.PartitionName[129].inputs = [CS004D33/RSP0]
-PIC.Core.IONProc.PartitionName[130].inputs = [CS004D34/RSP0]
-PIC.Core.IONProc.PartitionName[131].inputs = [CS004D35/RSP0]
-PIC.Core.IONProc.PartitionName[132].inputs = [CS004D36/RSP0]
-PIC.Core.IONProc.PartitionName[133].inputs = [CS004D37/RSP0]
-PIC.Core.IONProc.PartitionName[134].inputs = [CS004D38/RSP0]
-PIC.Core.IONProc.PartitionName[135].inputs = [CS004D39/RSP0]
-PIC.Core.IONProc.PartitionName[136].inputs = [CS004D40/RSP0]
-PIC.Core.IONProc.PartitionName[137].inputs = [CS004D41/RSP0]
-PIC.Core.IONProc.PartitionName[138].inputs = [CS004D42/RSP0]
-PIC.Core.IONProc.PartitionName[139].inputs = [CS004D43/RSP0]
-PIC.Core.IONProc.PartitionName[140].inputs = [CS004D44/RSP0]
-PIC.Core.IONProc.PartitionName[141].inputs = [CS004D45/RSP0]
-PIC.Core.IONProc.PartitionName[142].inputs = [CS004D46/RSP0]
-PIC.Core.IONProc.PartitionName[143].inputs = [CS004D47/RSP0]
-PIC.Core.IONProc.PartitionName[144].inputs = [CS005D00/RSP0]
-PIC.Core.IONProc.PartitionName[145].inputs = [CS005D01/RSP0]
-PIC.Core.IONProc.PartitionName[146].inputs = [CS005D02/RSP0]
-PIC.Core.IONProc.PartitionName[147].inputs = [CS005D03/RSP0]
-PIC.Core.IONProc.PartitionName[148].inputs = [CS005D04/RSP0]
-PIC.Core.IONProc.PartitionName[149].inputs = [CS005D05/RSP0]
-PIC.Core.IONProc.PartitionName[150].inputs = [CS005D06/RSP0]
-PIC.Core.IONProc.PartitionName[151].inputs = [CS005D07/RSP0]
-PIC.Core.IONProc.PartitionName[152].inputs = [CS005D08/RSP0]
-PIC.Core.IONProc.PartitionName[153].inputs = [CS005D09/RSP0]
-PIC.Core.IONProc.PartitionName[154].inputs = [CS005D10/RSP0]
-PIC.Core.IONProc.PartitionName[155].inputs = [CS005D11/RSP0]
-PIC.Core.IONProc.PartitionName[156].inputs = [CS005D12/RSP0]
-PIC.Core.IONProc.PartitionName[157].inputs = [CS005D13/RSP0]
-PIC.Core.IONProc.PartitionName[158].inputs = [CS005D14/RSP0]
-PIC.Core.IONProc.PartitionName[159].inputs = [CS005D15/RSP0]
-PIC.Core.IONProc.PartitionName[160].inputs = [CS005D16/RSP0]
-PIC.Core.IONProc.PartitionName[161].inputs = [CS005D17/RSP0]
-PIC.Core.IONProc.PartitionName[162].inputs = [CS005D18/RSP0]
-PIC.Core.IONProc.PartitionName[163].inputs = [CS005D19/RSP0]
-PIC.Core.IONProc.PartitionName[164].inputs = [CS005D20/RSP0]
-PIC.Core.IONProc.PartitionName[165].inputs = [CS005D21/RSP0]
-PIC.Core.IONProc.PartitionName[166].inputs = [CS005D22/RSP0]
-PIC.Core.IONProc.PartitionName[167].inputs = [CS005D23/RSP0]
-PIC.Core.IONProc.PartitionName[168].inputs = [CS005D24/RSP0]
-PIC.Core.IONProc.PartitionName[169].inputs = [CS005D25/RSP0]
-PIC.Core.IONProc.PartitionName[170].inputs = [CS005D26/RSP0]
-PIC.Core.IONProc.PartitionName[171].inputs = [CS005D27/RSP0]
-PIC.Core.IONProc.PartitionName[172].inputs = [CS005D28/RSP0]
-PIC.Core.IONProc.PartitionName[173].inputs = [CS005D29/RSP0]
-PIC.Core.IONProc.PartitionName[174].inputs = [CS005D30/RSP0]
-PIC.Core.IONProc.PartitionName[175].inputs = [CS005D31/RSP0]
-PIC.Core.IONProc.PartitionName[176].inputs = [CS005D32/RSP0]
-PIC.Core.IONProc.PartitionName[177].inputs = [CS005D33/RSP0]
-PIC.Core.IONProc.PartitionName[178].inputs = [CS005D34/RSP0]
-PIC.Core.IONProc.PartitionName[179].inputs = [CS005D35/RSP0]
-PIC.Core.IONProc.PartitionName[180].inputs = [CS005D36/RSP0]
-PIC.Core.IONProc.PartitionName[181].inputs = [CS005D37/RSP0]
-PIC.Core.IONProc.PartitionName[182].inputs = [CS005D38/RSP0]
-PIC.Core.IONProc.PartitionName[183].inputs = [CS005D39/RSP0]
-PIC.Core.IONProc.PartitionName[184].inputs = [CS005D40/RSP0]
-PIC.Core.IONProc.PartitionName[185].inputs = [CS005D41/RSP0]
-PIC.Core.IONProc.PartitionName[186].inputs = [CS005D42/RSP0]
-PIC.Core.IONProc.PartitionName[187].inputs = [CS005D43/RSP0]
-PIC.Core.IONProc.PartitionName[188].inputs = [CS005D44/RSP0]
-PIC.Core.IONProc.PartitionName[189].inputs = [CS005D45/RSP0]
-PIC.Core.IONProc.PartitionName[190].inputs = [CS005D46/RSP0]
-PIC.Core.IONProc.PartitionName[191].inputs = [CS005D47/RSP0]
-PIC.Core.IONProc.PartitionName[192].inputs = [CS006D00/RSP0]
-PIC.Core.IONProc.PartitionName[193].inputs = [CS006D01/RSP0]
-PIC.Core.IONProc.PartitionName[194].inputs = [CS006D02/RSP0]
-PIC.Core.IONProc.PartitionName[195].inputs = [CS006D03/RSP0]
-PIC.Core.IONProc.PartitionName[196].inputs = [CS006D04/RSP0]
-PIC.Core.IONProc.PartitionName[197].inputs = [CS006D05/RSP0]
-PIC.Core.IONProc.PartitionName[198].inputs = [CS006D06/RSP0]
-PIC.Core.IONProc.PartitionName[199].inputs = [CS006D07/RSP0]
-PIC.Core.IONProc.PartitionName[200].inputs = [CS006D08/RSP0]
-PIC.Core.IONProc.PartitionName[201].inputs = [CS006D09/RSP0]
-PIC.Core.IONProc.PartitionName[202].inputs = [CS006D10/RSP0]
-PIC.Core.IONProc.PartitionName[203].inputs = [CS006D11/RSP0]
-PIC.Core.IONProc.PartitionName[204].inputs = [CS006D12/RSP0]
-PIC.Core.IONProc.PartitionName[205].inputs = [CS006D13/RSP0]
-PIC.Core.IONProc.PartitionName[206].inputs = [CS006D14/RSP0]
-PIC.Core.IONProc.PartitionName[207].inputs = [CS006D15/RSP0]
-PIC.Core.IONProc.PartitionName[208].inputs = [CS006D16/RSP0]
-PIC.Core.IONProc.PartitionName[209].inputs = [CS006D17/RSP0]
-PIC.Core.IONProc.PartitionName[210].inputs = [CS006D18/RSP0]
-PIC.Core.IONProc.PartitionName[211].inputs = [CS006D19/RSP0]
-PIC.Core.IONProc.PartitionName[212].inputs = [CS006D20/RSP0]
-PIC.Core.IONProc.PartitionName[213].inputs = [CS006D21/RSP0]
-PIC.Core.IONProc.PartitionName[214].inputs = [CS006D22/RSP0]
-PIC.Core.IONProc.PartitionName[215].inputs = [CS006D23/RSP0]
-PIC.Core.IONProc.PartitionName[216].inputs = [CS006D24/RSP0]
-PIC.Core.IONProc.PartitionName[217].inputs = [CS006D25/RSP0]
-PIC.Core.IONProc.PartitionName[218].inputs = [CS006D26/RSP0]
-PIC.Core.IONProc.PartitionName[219].inputs = [CS006D27/RSP0]
-PIC.Core.IONProc.PartitionName[220].inputs = [CS006D28/RSP0]
-PIC.Core.IONProc.PartitionName[221].inputs = [CS006D29/RSP0]
-PIC.Core.IONProc.PartitionName[222].inputs = [CS006D30/RSP0]
-PIC.Core.IONProc.PartitionName[223].inputs = [CS006D31/RSP0]
-PIC.Core.IONProc.PartitionName[224].inputs = [CS006D32/RSP0]
-PIC.Core.IONProc.PartitionName[225].inputs = [CS006D33/RSP0]
-PIC.Core.IONProc.PartitionName[226].inputs = [CS006D34/RSP0]
-PIC.Core.IONProc.PartitionName[227].inputs = [CS006D35/RSP0]
-PIC.Core.IONProc.PartitionName[228].inputs = [CS006D36/RSP0]
-PIC.Core.IONProc.PartitionName[229].inputs = [CS006D37/RSP0]
-PIC.Core.IONProc.PartitionName[230].inputs = [CS006D38/RSP0]
-PIC.Core.IONProc.PartitionName[231].inputs = [CS006D39/RSP0]
-PIC.Core.IONProc.PartitionName[232].inputs = [CS006D40/RSP0]
-PIC.Core.IONProc.PartitionName[233].inputs = [CS006D41/RSP0]
-PIC.Core.IONProc.PartitionName[234].inputs = [CS006D42/RSP0]
-PIC.Core.IONProc.PartitionName[235].inputs = [CS006D43/RSP0]
-PIC.Core.IONProc.PartitionName[236].inputs = [CS006D44/RSP0]
-PIC.Core.IONProc.PartitionName[237].inputs = [CS006D45/RSP0]
-PIC.Core.IONProc.PartitionName[238].inputs = [CS006D46/RSP0]
-PIC.Core.IONProc.PartitionName[239].inputs = [CS006D47/RSP0]
-PIC.Core.IONProc.PartitionName[240].inputs = [CS007D00/RSP0]
-PIC.Core.IONProc.PartitionName[241].inputs = [CS007D01/RSP0]
-PIC.Core.IONProc.PartitionName[242].inputs = [CS007D02/RSP0]
-PIC.Core.IONProc.PartitionName[243].inputs = [CS007D03/RSP0]
-PIC.Core.IONProc.PartitionName[244].inputs = [CS007D04/RSP0]
-PIC.Core.IONProc.PartitionName[245].inputs = [CS007D05/RSP0]
-PIC.Core.IONProc.PartitionName[246].inputs = [CS007D06/RSP0]
-PIC.Core.IONProc.PartitionName[247].inputs = [CS007D07/RSP0]
-PIC.Core.IONProc.PartitionName[248].inputs = [CS007D08/RSP0]
-PIC.Core.IONProc.PartitionName[249].inputs = [CS007D09/RSP0]
-PIC.Core.IONProc.PartitionName[250].inputs = [CS007D10/RSP0]
-PIC.Core.IONProc.PartitionName[251].inputs = [CS007D11/RSP0]
-PIC.Core.IONProc.PartitionName[252].inputs = [CS007D12/RSP0]
-PIC.Core.IONProc.PartitionName[253].inputs = [CS007D13/RSP0]
-PIC.Core.IONProc.PartitionName[254].inputs = [CS007D14/RSP0]
-PIC.Core.IONProc.PartitionName[255].inputs = [CS007D15/RSP0]
-PIC.Core.IONProc.PartitionName[256].inputs = [CS007D16/RSP0]
-PIC.Core.IONProc.PartitionName[257].inputs = [CS007D17/RSP0]
-PIC.Core.IONProc.PartitionName[258].inputs = [CS007D18/RSP0]
-PIC.Core.IONProc.PartitionName[259].inputs = [CS007D19/RSP0]
-PIC.Core.IONProc.PartitionName[260].inputs = [CS007D20/RSP0]
-PIC.Core.IONProc.PartitionName[261].inputs = [CS007D21/RSP0]
-PIC.Core.IONProc.PartitionName[262].inputs = [CS007D22/RSP0]
-PIC.Core.IONProc.PartitionName[263].inputs = [CS007D23/RSP0]
-PIC.Core.IONProc.PartitionName[264].inputs = [CS007D24/RSP0]
-PIC.Core.IONProc.PartitionName[265].inputs = [CS007D25/RSP0]
-PIC.Core.IONProc.PartitionName[266].inputs = [CS007D26/RSP0]
-PIC.Core.IONProc.PartitionName[267].inputs = [CS007D27/RSP0]
-PIC.Core.IONProc.PartitionName[268].inputs = [CS007D28/RSP0]
-PIC.Core.IONProc.PartitionName[269].inputs = [CS007D29/RSP0]
-PIC.Core.IONProc.PartitionName[270].inputs = [CS007D30/RSP0]
-PIC.Core.IONProc.PartitionName[271].inputs = [CS007D31/RSP0]
-PIC.Core.IONProc.PartitionName[272].inputs = [CS007D32/RSP0]
-PIC.Core.IONProc.PartitionName[273].inputs = [CS007D33/RSP0]
-PIC.Core.IONProc.PartitionName[274].inputs = [CS007D34/RSP0]
-PIC.Core.IONProc.PartitionName[275].inputs = [CS007D35/RSP0]
-PIC.Core.IONProc.PartitionName[276].inputs = [CS007D36/RSP0]
-PIC.Core.IONProc.PartitionName[277].inputs = [CS007D37/RSP0]
-PIC.Core.IONProc.PartitionName[278].inputs = [CS007D38/RSP0]
-PIC.Core.IONProc.PartitionName[279].inputs = [CS007D39/RSP0]
-PIC.Core.IONProc.PartitionName[280].inputs = [CS007D40/RSP0]
-PIC.Core.IONProc.PartitionName[281].inputs = [CS007D41/RSP0]
-PIC.Core.IONProc.PartitionName[282].inputs = [CS007D42/RSP0]
-PIC.Core.IONProc.PartitionName[283].inputs = [CS007D43/RSP0]
-PIC.Core.IONProc.PartitionName[284].inputs = [CS007D44/RSP0]
-PIC.Core.IONProc.PartitionName[285].inputs = [CS007D45/RSP0]
-PIC.Core.IONProc.PartitionName[286].inputs = [CS007D46/RSP0]
-PIC.Core.IONProc.PartitionName[287].inputs = [CS007D47/RSP0]
-PIC.Core.CS002D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D00.raw]
-PIC.Core.CS002D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D01.raw]
-PIC.Core.CS002D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D02.raw]
-PIC.Core.CS002D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D03.raw]
-PIC.Core.CS002D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D04.raw]
-PIC.Core.CS002D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D05.raw]
-PIC.Core.CS002D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D06.raw]
-PIC.Core.CS002D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D07.raw]
-PIC.Core.CS002D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D08.raw]
-PIC.Core.CS002D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D09.raw]
-PIC.Core.CS002D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D10.raw]
-PIC.Core.CS002D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D11.raw]
-PIC.Core.CS002D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D12.raw]
-PIC.Core.CS002D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D13.raw]
-PIC.Core.CS002D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D14.raw]
-PIC.Core.CS002D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D15.raw]
-PIC.Core.CS002D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D16.raw]
-PIC.Core.CS002D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D17.raw]
-PIC.Core.CS002D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D18.raw]
-PIC.Core.CS002D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D19.raw]
-PIC.Core.CS002D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D20.raw]
-PIC.Core.CS002D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D21.raw]
-PIC.Core.CS002D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D22.raw]
-PIC.Core.CS002D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D23.raw]
-PIC.Core.CS002D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D24.raw]
-PIC.Core.CS002D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D25.raw]
-PIC.Core.CS002D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D26.raw]
-PIC.Core.CS002D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D27.raw]
-PIC.Core.CS002D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D28.raw]
-PIC.Core.CS002D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D29.raw]
-PIC.Core.CS002D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D30.raw]
-PIC.Core.CS002D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D31.raw]
-PIC.Core.CS002D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D32.raw]
-PIC.Core.CS002D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D33.raw]
-PIC.Core.CS002D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D34.raw]
-PIC.Core.CS002D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D35.raw]
-PIC.Core.CS002D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D36.raw]
-PIC.Core.CS002D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D37.raw]
-PIC.Core.CS002D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D38.raw]
-PIC.Core.CS002D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D39.raw]
-PIC.Core.CS002D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D40.raw]
-PIC.Core.CS002D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D41.raw]
-PIC.Core.CS002D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D42.raw]
-PIC.Core.CS002D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D43.raw]
-PIC.Core.CS002D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D44.raw]
-PIC.Core.CS002D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D45.raw]
-PIC.Core.CS002D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D46.raw]
-PIC.Core.CS002D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS002D47.raw]
-PIC.Core.CS003D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D00.raw]
-PIC.Core.CS003D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D01.raw]
-PIC.Core.CS003D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D02.raw]
-PIC.Core.CS003D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D03.raw]
-PIC.Core.CS003D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D04.raw]
-PIC.Core.CS003D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D05.raw]
-PIC.Core.CS003D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D06.raw]
-PIC.Core.CS003D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D07.raw]
-PIC.Core.CS003D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D08.raw]
-PIC.Core.CS003D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D09.raw]
-PIC.Core.CS003D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D10.raw]
-PIC.Core.CS003D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D11.raw]
-PIC.Core.CS003D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D12.raw]
-PIC.Core.CS003D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D13.raw]
-PIC.Core.CS003D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D14.raw]
-PIC.Core.CS003D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D15.raw]
-PIC.Core.CS003D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D16.raw]
-PIC.Core.CS003D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D17.raw]
-PIC.Core.CS003D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D18.raw]
-PIC.Core.CS003D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D19.raw]
-PIC.Core.CS003D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D20.raw]
-PIC.Core.CS003D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D21.raw]
-PIC.Core.CS003D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D22.raw]
-PIC.Core.CS003D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D23.raw]
-PIC.Core.CS003D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D24.raw]
-PIC.Core.CS003D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D25.raw]
-PIC.Core.CS003D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D26.raw]
-PIC.Core.CS003D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D27.raw]
-PIC.Core.CS003D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D28.raw]
-PIC.Core.CS003D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D29.raw]
-PIC.Core.CS003D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D30.raw]
-PIC.Core.CS003D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D31.raw]
-PIC.Core.CS003D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D32.raw]
-PIC.Core.CS003D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D33.raw]
-PIC.Core.CS003D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D34.raw]
-PIC.Core.CS003D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D35.raw]
-PIC.Core.CS003D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D36.raw]
-PIC.Core.CS003D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D37.raw]
-PIC.Core.CS003D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D38.raw]
-PIC.Core.CS003D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D39.raw]
-PIC.Core.CS003D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D40.raw]
-PIC.Core.CS003D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D41.raw]
-PIC.Core.CS003D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D42.raw]
-PIC.Core.CS003D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D43.raw]
-PIC.Core.CS003D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D44.raw]
-PIC.Core.CS003D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D45.raw]
-PIC.Core.CS003D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D46.raw]
-PIC.Core.CS003D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS003D47.raw]
-PIC.Core.CS004D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D00.raw]
-PIC.Core.CS004D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D01.raw]
-PIC.Core.CS004D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D02.raw]
-PIC.Core.CS004D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D03.raw]
-PIC.Core.CS004D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D04.raw]
-PIC.Core.CS004D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D05.raw]
-PIC.Core.CS004D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D06.raw]
-PIC.Core.CS004D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D07.raw]
-PIC.Core.CS004D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D08.raw]
-PIC.Core.CS004D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D09.raw]
-PIC.Core.CS004D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D10.raw]
-PIC.Core.CS004D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D11.raw]
-PIC.Core.CS004D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D12.raw]
-PIC.Core.CS004D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D13.raw]
-PIC.Core.CS004D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D14.raw]
-PIC.Core.CS004D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D15.raw]
-PIC.Core.CS004D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D16.raw]
-PIC.Core.CS004D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D17.raw]
-PIC.Core.CS004D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D18.raw]
-PIC.Core.CS004D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D19.raw]
-PIC.Core.CS004D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D20.raw]
-PIC.Core.CS004D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D21.raw]
-PIC.Core.CS004D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D22.raw]
-PIC.Core.CS004D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D23.raw]
-PIC.Core.CS004D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D24.raw]
-PIC.Core.CS004D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D25.raw]
-PIC.Core.CS004D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D26.raw]
-PIC.Core.CS004D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D27.raw]
-PIC.Core.CS004D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D28.raw]
-PIC.Core.CS004D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D29.raw]
-PIC.Core.CS004D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D30.raw]
-PIC.Core.CS004D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D31.raw]
-PIC.Core.CS004D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D32.raw]
-PIC.Core.CS004D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D33.raw]
-PIC.Core.CS004D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D34.raw]
-PIC.Core.CS004D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D35.raw]
-PIC.Core.CS004D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D36.raw]
-PIC.Core.CS004D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D37.raw]
-PIC.Core.CS004D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D38.raw]
-PIC.Core.CS004D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D39.raw]
-PIC.Core.CS004D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D40.raw]
-PIC.Core.CS004D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D41.raw]
-PIC.Core.CS004D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D42.raw]
-PIC.Core.CS004D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D43.raw]
-PIC.Core.CS004D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D44.raw]
-PIC.Core.CS004D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D45.raw]
-PIC.Core.CS004D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D46.raw]
-PIC.Core.CS004D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS004D47.raw]
-PIC.Core.CS005D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D00.raw]
-PIC.Core.CS005D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D01.raw]
-PIC.Core.CS005D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D02.raw]
-PIC.Core.CS005D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D03.raw]
-PIC.Core.CS005D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D04.raw]
-PIC.Core.CS005D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D05.raw]
-PIC.Core.CS005D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D06.raw]
-PIC.Core.CS005D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D07.raw]
-PIC.Core.CS005D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D08.raw]
-PIC.Core.CS005D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D09.raw]
-PIC.Core.CS005D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D10.raw]
-PIC.Core.CS005D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D11.raw]
-PIC.Core.CS005D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D12.raw]
-PIC.Core.CS005D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D13.raw]
-PIC.Core.CS005D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D14.raw]
-PIC.Core.CS005D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D15.raw]
-PIC.Core.CS005D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D16.raw]
-PIC.Core.CS005D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D17.raw]
-PIC.Core.CS005D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D18.raw]
-PIC.Core.CS005D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D19.raw]
-PIC.Core.CS005D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D20.raw]
-PIC.Core.CS005D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D21.raw]
-PIC.Core.CS005D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D22.raw]
-PIC.Core.CS005D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D23.raw]
-PIC.Core.CS005D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D24.raw]
-PIC.Core.CS005D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D25.raw]
-PIC.Core.CS005D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D26.raw]
-PIC.Core.CS005D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D27.raw]
-PIC.Core.CS005D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D28.raw]
-PIC.Core.CS005D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D29.raw]
-PIC.Core.CS005D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D30.raw]
-PIC.Core.CS005D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D31.raw]
-PIC.Core.CS005D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D32.raw]
-PIC.Core.CS005D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D33.raw]
-PIC.Core.CS005D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D34.raw]
-PIC.Core.CS005D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D35.raw]
-PIC.Core.CS005D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D36.raw]
-PIC.Core.CS005D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D37.raw]
-PIC.Core.CS005D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D38.raw]
-PIC.Core.CS005D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D39.raw]
-PIC.Core.CS005D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D40.raw]
-PIC.Core.CS005D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D41.raw]
-PIC.Core.CS005D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D42.raw]
-PIC.Core.CS005D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D43.raw]
-PIC.Core.CS005D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D44.raw]
-PIC.Core.CS005D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D45.raw]
-PIC.Core.CS005D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D46.raw]
-PIC.Core.CS005D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS005D47.raw]
-PIC.Core.CS006D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D00.raw]
-PIC.Core.CS006D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D01.raw]
-PIC.Core.CS006D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D02.raw]
-PIC.Core.CS006D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D03.raw]
-PIC.Core.CS006D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D04.raw]
-PIC.Core.CS006D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D05.raw]
-PIC.Core.CS006D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D06.raw]
-PIC.Core.CS006D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D07.raw]
-PIC.Core.CS006D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D08.raw]
-PIC.Core.CS006D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D09.raw]
-PIC.Core.CS006D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D10.raw]
-PIC.Core.CS006D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D11.raw]
-PIC.Core.CS006D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D12.raw]
-PIC.Core.CS006D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D13.raw]
-PIC.Core.CS006D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D14.raw]
-PIC.Core.CS006D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D15.raw]
-PIC.Core.CS006D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D16.raw]
-PIC.Core.CS006D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D17.raw]
-PIC.Core.CS006D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D18.raw]
-PIC.Core.CS006D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D19.raw]
-PIC.Core.CS006D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D20.raw]
-PIC.Core.CS006D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D21.raw]
-PIC.Core.CS006D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D22.raw]
-PIC.Core.CS006D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D23.raw]
-PIC.Core.CS006D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D24.raw]
-PIC.Core.CS006D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D25.raw]
-PIC.Core.CS006D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D26.raw]
-PIC.Core.CS006D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D27.raw]
-PIC.Core.CS006D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D28.raw]
-PIC.Core.CS006D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D29.raw]
-PIC.Core.CS006D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D30.raw]
-PIC.Core.CS006D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D31.raw]
-PIC.Core.CS006D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D32.raw]
-PIC.Core.CS006D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D33.raw]
-PIC.Core.CS006D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D34.raw]
-PIC.Core.CS006D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D35.raw]
-PIC.Core.CS006D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D36.raw]
-PIC.Core.CS006D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D37.raw]
-PIC.Core.CS006D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D38.raw]
-PIC.Core.CS006D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D39.raw]
-PIC.Core.CS006D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D40.raw]
-PIC.Core.CS006D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D41.raw]
-PIC.Core.CS006D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D42.raw]
-PIC.Core.CS006D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D43.raw]
-PIC.Core.CS006D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D44.raw]
-PIC.Core.CS006D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D45.raw]
-PIC.Core.CS006D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D46.raw]
-PIC.Core.CS006D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS006D47.raw]
-PIC.Core.CS007D00.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D00.raw]
-PIC.Core.CS007D01.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D01.raw]
-PIC.Core.CS007D02.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D02.raw]
-PIC.Core.CS007D03.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D03.raw]
-PIC.Core.CS007D04.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D04.raw]
-PIC.Core.CS007D05.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D05.raw]
-PIC.Core.CS007D06.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D06.raw]
-PIC.Core.CS007D07.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D07.raw]
-PIC.Core.CS007D08.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D08.raw]
-PIC.Core.CS007D09.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D09.raw]
-PIC.Core.CS007D10.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D10.raw]
-PIC.Core.CS007D11.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D11.raw]
-PIC.Core.CS007D12.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D12.raw]
-PIC.Core.CS007D13.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D13.raw]
-PIC.Core.CS007D14.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D14.raw]
-PIC.Core.CS007D15.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D15.raw]
-PIC.Core.CS007D16.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D16.raw]
-PIC.Core.CS007D17.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D17.raw]
-PIC.Core.CS007D18.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D18.raw]
-PIC.Core.CS007D19.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D19.raw]
-PIC.Core.CS007D20.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D20.raw]
-PIC.Core.CS007D21.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D21.raw]
-PIC.Core.CS007D22.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D22.raw]
-PIC.Core.CS007D23.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D23.raw]
-PIC.Core.CS007D24.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D24.raw]
-PIC.Core.CS007D25.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D25.raw]
-PIC.Core.CS007D26.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D26.raw]
-PIC.Core.CS007D27.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D27.raw]
-PIC.Core.CS007D28.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D28.raw]
-PIC.Core.CS007D29.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D29.raw]
-PIC.Core.CS007D30.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D30.raw]
-PIC.Core.CS007D31.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D31.raw]
-PIC.Core.CS007D32.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D32.raw]
-PIC.Core.CS007D33.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D33.raw]
-PIC.Core.CS007D34.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D34.raw]
-PIC.Core.CS007D35.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D35.raw]
-PIC.Core.CS007D36.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D36.raw]
-PIC.Core.CS007D37.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D37.raw]
-PIC.Core.CS007D38.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D38.raw]
-PIC.Core.CS007D39.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D39.raw]
-PIC.Core.CS007D40.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D40.raw]
-PIC.Core.CS007D41.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D41.raw]
-PIC.Core.CS007D42.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D42.raw]
-PIC.Core.CS007D43.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D43.raw]
-PIC.Core.CS007D44.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D44.raw]
-PIC.Core.CS007D45.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D45.raw]
-PIC.Core.CS007D46.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D46.raw]
-PIC.Core.CS007D47.RSP.ports = [file:/local/AARTFAAC-dataset/CS007D47.raw]
-PIC.Core.CS002D00.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D01.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D02.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D03.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D04.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D05.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D06.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D07.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D08.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D09.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D10.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D11.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D12.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D13.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D14.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D15.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D16.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D17.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D18.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D19.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D20.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D21.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D22.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D23.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D24.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D25.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D26.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D27.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D28.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D29.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D30.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D31.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D32.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D33.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D34.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D35.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D36.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D37.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D38.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D39.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D40.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D41.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D42.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D43.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D44.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D45.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D46.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS002D47.clockCorrectionTime = 8.291395e-06
-PIC.Core.CS003D00.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D01.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D02.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D03.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D04.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D05.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D06.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D07.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D08.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D09.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D10.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D11.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D12.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D13.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D14.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D15.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D16.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D17.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D18.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D19.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D20.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D21.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D22.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D23.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D24.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D25.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D26.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D27.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D28.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D29.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D30.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D31.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D32.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D33.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D34.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D35.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D36.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D37.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D38.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D39.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D40.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D41.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D42.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D43.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D44.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D45.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D46.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS003D47.clockCorrectionTime = 6.889990e-06
-PIC.Core.CS004D00.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D01.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D02.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D03.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D04.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D05.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D06.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D07.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D08.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D09.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D10.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D11.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D12.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D13.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D14.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D15.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D16.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D17.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D18.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D19.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D20.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D21.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D22.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D23.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D24.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D25.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D26.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D27.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D28.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D29.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D30.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D31.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D32.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D33.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D34.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D35.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D36.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D37.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D38.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D39.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D40.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D41.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D42.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D43.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D44.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D45.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D46.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS004D47.clockCorrectionTime = 7.861759e-06
-PIC.Core.CS005D00.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D01.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D02.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D03.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D04.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D05.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D06.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D07.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D08.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D09.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D10.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D11.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D12.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D13.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D14.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D15.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D16.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D17.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D18.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D19.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D20.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D21.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D22.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D23.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D24.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D25.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D26.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D27.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D28.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D29.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D30.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D31.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D32.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D33.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D34.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D35.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D36.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D37.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D38.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D39.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D40.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D41.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D42.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D43.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D44.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D45.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D46.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS005D47.clockCorrectionTime = 8.513690e-06
-PIC.Core.CS006D00.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D01.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D02.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D03.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D04.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D05.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D06.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D07.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D08.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D09.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D10.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D11.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D12.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D13.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D14.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D15.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D16.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D17.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D18.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D19.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D20.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D21.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D22.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D23.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D24.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D25.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D26.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D27.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D28.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D29.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D30.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D31.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D32.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D33.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D34.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D35.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D36.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D37.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D38.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D39.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D40.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D41.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D42.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D43.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D44.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D45.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D46.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS006D47.clockCorrectionTime = 7.854904e-06
-PIC.Core.CS007D00.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D01.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D02.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D03.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D04.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D05.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D06.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D07.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D08.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D09.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D10.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D11.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D12.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D13.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D14.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D15.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D16.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D17.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D18.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D19.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D20.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D21.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D22.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D23.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D24.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D25.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D26.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D27.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D28.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D29.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D30.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D31.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D32.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D33.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D34.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D35.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D36.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D37.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D38.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D39.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D40.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D41.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D42.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D43.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D44.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D45.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D46.clockCorrectionTime = 7.885136e-06
-PIC.Core.CS007D47.clockCorrectionTime = 7.885136e-06
-Observation.referencePhaseCenter	 = [3826577.110,461022.900,5064892.758]
-# LBA_INNER
-#PIC.Core.CS002D00.phaseCenter = [3826577.109500,461022.900196,5064892.758000]
-#PIC.Core.CS002D01.phaseCenter = [3826575.090500,461022.657196,5064894.296000]
-#PIC.Core.CS002D02.phaseCenter = [3826575.771500,461025.005196,5064893.572000]
-#PIC.Core.CS002D03.phaseCenter = [3826577.909500,461025.263196,5064891.944000]
-#PIC.Core.CS002D04.phaseCenter = [3826579.128500,461023.143196,5064891.220000]
-#PIC.Core.CS002D05.phaseCenter = [3826578.447500,461020.795196,5064891.944000]
-#PIC.Core.CS002D06.phaseCenter = [3826576.309500,461020.537196,5064893.572000]
-#PIC.Core.CS002D07.phaseCenter = [3826574.036500,461018.775195,5064895.437000]
-#PIC.Core.CS002D08.phaseCenter = [3826572.516500,461022.347195,5064896.256000]
-#PIC.Core.CS002D09.phaseCenter = [3826573.144500,461026.177195,5064895.438000]
-#PIC.Core.CS002D10.phaseCenter = [3826575.628500,461028.475196,5064893.365000]
-#PIC.Core.CS002D11.phaseCenter = [3826578.805500,461028.164196,5064891.009000]
-#PIC.Core.CS002D12.phaseCenter = [3826581.188500,461025.390196,5064889.471000]
-#PIC.Core.CS002D13.phaseCenter = [3826581.662500,461021.450196,5064889.471000]
-#PIC.Core.CS002D14.phaseCenter = [3826580.006500,461018.190196,5064891.009000]
-#PIC.Core.CS002D15.phaseCenter = [3826576.995500,461017.133196,5064893.365000]
-#PIC.Core.CS002D16.phaseCenter = [3826576.272500,461013.726196,5064894.215000]
-#PIC.Core.CS002D17.phaseCenter = [3826573.376500,461014.469195,5064896.322000]
-#PIC.Core.CS002D18.phaseCenter = [3826570.181500,461017.749195,5064898.424000]
-#PIC.Core.CS002D19.phaseCenter = [3826569.112500,461024.945195,5064898.576000]
-#PIC.Core.CS002D20.phaseCenter = [3826569.852500,461027.976195,5064897.746000]
-#PIC.Core.CS002D21.phaseCenter = [3826572.070500,461031.095195,5064895.800000]
-#PIC.Core.CS002D22.phaseCenter = [3826575.368500,461031.959196,5064893.246000]
-#PIC.Core.CS002D23.phaseCenter = [3826579.971500,461030.917196,5064889.885000]
-#PIC.Core.CS002D24.phaseCenter = [3826583.385500,461028.524196,5064887.539000]
-#PIC.Core.CS002D25.phaseCenter = [3826584.999500,461024.537196,5064886.688000]
-#PIC.Core.CS002D26.phaseCenter = [3826584.442500,461020.707196,5064887.452000]
-#PIC.Core.CS002D27.phaseCenter = [3826582.564500,461016.605196,5064889.232000]
-#PIC.Core.CS002D28.phaseCenter = [3826579.539500,461014.081196,5064891.731000]
-#PIC.Core.CS002D29.phaseCenter = [3826574.724500,461009.083195,5064895.797000]
-#PIC.Core.CS002D30.phaseCenter = [3826571.744500,461010.132195,5064897.939000]
-#PIC.Core.CS002D31.phaseCenter = [3826569.960500,461012.435195,5064899.070000]
-#PIC.Core.CS002D32.phaseCenter = [3826567.013500,461019.699195,5064900.626000]
-#PIC.Core.CS002D33.phaseCenter = [3826565.109500,461021.640195,5064901.880000]
-#PIC.Core.CS002D34.phaseCenter = [3826567.204500,461028.490195,5064899.688000]
-#PIC.Core.CS002D35.phaseCenter = [3826569.542500,461032.470195,5064897.573000]
-#PIC.Core.CS002D36.phaseCenter = [3826571.812500,461036.793195,5064895.478000]
-#PIC.Core.CS002D37.phaseCenter = [3826574.471500,461036.116195,5064893.544000]
-#PIC.Core.CS002D38.phaseCenter = [3826578.276500,461035.734196,5064890.722000]
-#PIC.Core.CS002D39.phaseCenter = [3826583.531500,461032.936196,5064887.030000]
-#PIC.Core.CS002D40.phaseCenter = [3826585.419500,461031.329196,5064885.758000]
-#PIC.Core.CS002D41.phaseCenter = [3826587.195500,461026.381196,5064884.873000]
-#PIC.Core.CS002D42.phaseCenter = [3826589.188500,461022.935197,5064883.688000]
-#PIC.Core.CS002D43.phaseCenter = [3826586.727500,461014.817196,5064886.269000]
-#PIC.Core.CS002D44.phaseCenter = [3826584.542500,461012.072196,5064888.157000]
-#PIC.Core.CS002D45.phaseCenter = [3826581.014500,461009.055196,5064891.078000]
-#PIC.Core.CS002D46.phaseCenter = [3826603.455510,460977.274198,5064877.107000]
-#PIC.Core.CS002D47.phaseCenter = [3826612.589500,461053.051198,5064863.401000]
-##PIC.Core.CS003D00.phaseCenter = [3826516.791510,460930.018191,5064946.429000]
-#PIC.Core.CS003D01.phaseCenter = [3826514.771510,460929.774191,5064947.967000]
-#PIC.Core.CS003D02.phaseCenter = [3826515.452500,460932.123191,5064947.243000]
-#PIC.Core.CS003D03.phaseCenter = [3826517.591510,460932.380191,5064945.615000]
-#PIC.Core.CS003D04.phaseCenter = [3826518.810510,460930.261191,5064944.891000]
-#PIC.Core.CS003D05.phaseCenter = [3826518.129510,460927.913191,5064945.615000]
-#PIC.Core.CS003D06.phaseCenter = [3826515.991510,460927.655191,5064947.243000]
-#PIC.Core.CS003D07.phaseCenter = [3826521.344510,460928.568192,5064943.142000]
-#PIC.Core.CS003D08.phaseCenter = [3826519.688510,460925.308191,5064944.680000]
-#PIC.Core.CS003D09.phaseCenter = [3826516.676510,460924.251191,5064947.036000]
-#PIC.Core.CS003D10.phaseCenter = [3826513.718510,460925.893191,5064949.109000]
-#PIC.Core.CS003D11.phaseCenter = [3826512.197510,460929.464191,5064949.927000]
-#PIC.Core.CS003D12.phaseCenter = [3826512.826500,460933.295191,5064949.109000]
-#PIC.Core.CS003D13.phaseCenter = [3826515.310500,460935.593191,5064947.037000]
-#PIC.Core.CS003D14.phaseCenter = [3826518.487500,460935.281191,5064944.680000]
-#PIC.Core.CS003D15.phaseCenter = [3826520.870510,460932.508192,5064943.142000]
-#PIC.Core.CS003D16.phaseCenter = [3826523.638510,460933.271192,5064940.995000]
-#PIC.Core.CS003D17.phaseCenter = [3826524.704510,460929.807192,5064940.509000]
-#PIC.Core.CS003D18.phaseCenter = [3826524.166510,460924.869192,5064941.358000]
-#PIC.Core.CS003D19.phaseCenter = [3826519.739510,460920.454191,5064945.080000]
-#PIC.Core.CS003D20.phaseCenter = [3826517.224510,460919.880191,5064947.020000]
-#PIC.Core.CS003D21.phaseCenter = [3826513.839510,460920.862191,5064949.472000]
-#PIC.Core.CS003D22.phaseCenter = [3826511.434510,460924.032191,5064950.991000]
-#PIC.Core.CS003D23.phaseCenter = [3826509.643500,460929.476191,5064951.844000]
-#PIC.Core.CS003D24.phaseCenter = [3826509.441500,460934.248191,5064951.563000]
-#PIC.Core.CS003D25.phaseCenter = [3826511.336500,460937.797191,5064949.821000]
-#PIC.Core.CS003D26.phaseCenter = [3826514.308500,460938.931191,5064947.487000]
-#PIC.Core.CS003D27.phaseCenter = [3826518.191500,460938.761191,5064944.588000]
-#PIC.Core.CS003D28.phaseCenter = [3826521.604500,460936.638192,5064942.218000]
-#PIC.Core.CS003D29.phaseCenter = [3826527.718510,460933.703192,5064937.894000]
-#PIC.Core.CS003D30.phaseCenter = [3826528.618510,460930.008192,5064937.552000]
-#PIC.Core.CS003D31.phaseCenter = [3826527.989510,460927.039192,5064938.293000]
-#PIC.Core.CS003D32.phaseCenter = [3826524.541510,460920.564192,5064941.466000]
-#PIC.Core.CS003D33.phaseCenter = [3826524.230510,460917.628192,5064941.965000]
-#PIC.Core.CS003D34.phaseCenter = [3826518.314510,460916.787191,5064946.482000]
-#PIC.Core.CS003D35.phaseCenter = [3826514.264510,460917.509191,5064949.456000]
-#PIC.Core.CS003D36.phaseCenter = [3826510.012510,460918.002191,5064952.604000]
-#PIC.Core.CS003D37.phaseCenter = [3826509.029510,460921.180191,5064953.054000]
-#PIC.Core.CS003D38.phaseCenter = [3826507.214510,460925.463191,5064954.029000]
-#PIC.Core.CS003D39.phaseCenter = [3826506.289500,460932.406191,5064954.096000]
-#PIC.Core.CS003D40.phaseCenter = [3826506.376500,460935.174191,5064953.780000]
-#PIC.Core.CS003D41.phaseCenter = [3826508.850500,460939.333191,5064951.547000]
-#PIC.Core.CS003D42.phaseCenter = [3826510.161500,460943.047191,5064950.228000]
-#PIC.Core.CS003D43.phaseCenter = [3826517.161500,460944.068191,5064944.882000]
-#PIC.Core.CS003D44.phaseCenter = [3826520.267500,460942.952192,5064942.651000]
-#PIC.Core.CS003D45.phaseCenter = [3826524.297500,460940.509192,5064939.846000]
-#PIC.Core.CS003D46.phaseCenter = [3826478.141510,460906.374188,5064977.577990]
-#PIC.Core.CS003D47.phaseCenter = [3826495.639500,460979.543190,5064957.829990]
-#PIC.Core.CS004D00.phaseCenter = [3826654.240510,460939.528201,5064842.397000]
-#PIC.Core.CS004D01.phaseCenter = [3826652.220510,460939.284201,5064843.935000]
-#PIC.Core.CS004D02.phaseCenter = [3826652.902510,460941.633201,5064843.211000]
-#PIC.Core.CS004D03.phaseCenter = [3826655.040510,460941.890201,5064841.583000]
-#PIC.Core.CS004D04.phaseCenter = [3826656.259510,460939.771202,5064840.859000]
-#PIC.Core.CS004D05.phaseCenter = [3826655.578510,460937.423201,5064841.583000]
-#PIC.Core.CS004D06.phaseCenter = [3826653.440510,460937.165201,5064843.211000]
-#PIC.Core.CS004D07.phaseCenter = [3826652.759510,460945.103201,5064843.004000]
-#PIC.Core.CS004D08.phaseCenter = [3826655.936510,460944.791202,5064840.648000]
-#PIC.Core.CS004D09.phaseCenter = [3826658.319510,460942.018202,5064839.110000]
-#PIC.Core.CS004D10.phaseCenter = [3826658.793510,460938.078202,5064839.110000]
-#PIC.Core.CS004D11.phaseCenter = [3826657.137510,460934.818202,5064840.648000]
-#PIC.Core.CS004D12.phaseCenter = [3826654.126510,460933.761201,5064843.004000]
-#PIC.Core.CS004D13.phaseCenter = [3826651.167510,460935.403201,5064845.076000]
-#PIC.Core.CS004D14.phaseCenter = [3826649.647510,460938.974201,5064845.895000]
-#PIC.Core.CS004D15.phaseCenter = [3826650.275510,460942.805201,5064845.077000]
-#PIC.Core.CS004D16.phaseCenter = [3826648.230510,460945.448201,5064846.373000]
-#PIC.Core.CS004D17.phaseCenter = [3826650.060510,460948.170201,5064844.753000]
-#PIC.Core.CS004D18.phaseCenter = [3826653.792510,460949.826201,5064841.802000]
-#PIC.Core.CS004D19.phaseCenter = [3826659.289510,460947.047202,5064837.928000]
-#PIC.Core.CS004D20.phaseCenter = [3826661.064510,460944.589202,5064836.817000]
-#PIC.Core.CS004D21.phaseCenter = [3826662.230510,460940.488202,5064836.312000]
-#PIC.Core.CS004D22.phaseCenter = [3826661.338510,460936.455202,5064837.347000]
-#PIC.Core.CS004D23.phaseCenter = [3826658.527510,460932.053202,5064839.855000]
-#PIC.Core.CS004D24.phaseCenter = [3826655.313510,460929.673201,5064842.482000]
-#PIC.Core.CS004D25.phaseCenter = [3826651.805510,460930.112201,5064845.075000]
-#PIC.Core.CS004D26.phaseCenter = [3826649.390510,460932.807201,5064846.645000]
-#PIC.Core.CS004D27.phaseCenter = [3826647.384510,460937.078201,5064847.764000]
-#PIC.Core.CS004D28.phaseCenter = [3826646.997510,460941.726201,5064847.635000]
-#PIC.Core.CS004D29.phaseCenter = [3826645.698510,460949.660201,5064847.893000]
-#PIC.Core.CS004D30.phaseCenter = [3826647.779510,460952.306201,5064846.092000]
-#PIC.Core.CS004D31.phaseCenter = [3826650.191510,460952.972201,5064844.221000]
-#PIC.Core.CS004D32.phaseCenter = [3826656.586510,460952.182202,5064839.492000]
-#PIC.Core.CS004D33.phaseCenter = [3826658.801510,460953.177202,5064837.740000]
-#PIC.Core.CS004D34.phaseCenter = [3826662.622510,460947.168202,5064835.415000]
-#PIC.Core.CS004D35.phaseCenter = [3826664.333510,460942.467202,5064834.555000]
-#PIC.Core.CS004D36.phaseCenter = [3826666.316510,460937.651202,5064833.502000]
-#PIC.Core.CS004D37.phaseCenter = [3826664.640510,460935.149202,5064834.986000]
-#PIC.Core.CS004D38.phaseCenter = [3826662.649510,460931.249202,5064836.833000]
-#PIC.Core.CS004D39.phaseCenter = [3826658.320510,460927.104202,5064840.458000]
-#PIC.Core.CS004D40.phaseCenter = [3826656.344510,460925.943202,5064842.045000]
-#PIC.Core.CS004D41.phaseCenter = [3826652.094510,460926.731201,5064845.164000]
-#PIC.Core.CS004D42.phaseCenter = [3826648.791510,460926.463201,5064847.668000]
-#PIC.Core.CS004D43.phaseCenter = [3826644.252510,460933.560201,5064850.433000]
-#PIC.Core.CS004D44.phaseCenter = [3826643.331510,460937.422201,5064850.775000]
-#PIC.Core.CS004D45.phaseCenter = [3826642.828510,460942.882201,5064850.660000]
-#PIC.Core.CS004D46.phaseCenter = [3826664.882510,460885.708202,5064839.274000]
-#PIC.Core.CS004D47.phaseCenter = [3826611.489510,460929.214198,5064875.419000]
-#PIC.Core.CS005D00.phaseCenter = [3826668.793500,461069.502202,5064819.725000]
-#PIC.Core.CS005D01.phaseCenter = [3826666.773500,461069.259202,5064821.263000]
-#PIC.Core.CS005D02.phaseCenter = [3826667.455500,461071.607202,5064820.540000]
-#PIC.Core.CS005D03.phaseCenter = [3826669.593500,461071.865202,5064818.911000]
-#PIC.Core.CS005D04.phaseCenter = [3826670.812500,461069.745203,5064818.188000]
-#PIC.Core.CS005D05.phaseCenter = [3826670.131500,461067.397202,5064818.911000]
-#PIC.Core.CS005D06.phaseCenter = [3826667.993500,461067.139202,5064820.539000]
-#PIC.Core.CS005D07.phaseCenter = [3826672.168500,461065.304203,5064817.572000]
-#PIC.Core.CS005D08.phaseCenter = [3826669.326500,461063.728202,5064819.847000]
-#PIC.Core.CS005D09.phaseCenter = [3826666.235500,461064.852202,5064822.066000]
-#PIC.Core.CS005D10.phaseCenter = [3826664.341500,461068.153202,5064823.189000]
-#PIC.Core.CS005D11.phaseCenter = [3826664.530500,461072.084202,5064822.692000]
-#PIC.Core.CS005D12.phaseCenter = [3826666.714500,461074.807202,5064820.806000]
-#PIC.Core.CS005D13.phaseCenter = [3826669.871500,461075.049202,5064818.415000]
-#PIC.Core.CS005D14.phaseCenter = [3826672.523500,461072.694203,5064816.637000]
-#PIC.Core.CS005D15.phaseCenter = [3826673.430500,461068.846203,5064816.304000]
-#PIC.Core.CS005D16.phaseCenter = [3826676.182500,461067.642203,5064814.347000]
-#PIC.Core.CS005D17.phaseCenter = [3826675.640500,461064.099203,5064815.074000]
-#PIC.Core.CS005D18.phaseCenter = [3826673.065500,461060.409203,5064817.341000]
-#PIC.Core.CS005D19.phaseCenter = [3826667.303500,461059.716202,5064821.728000]
-#PIC.Core.CS005D20.phaseCenter = [3826664.852500,461060.909202,5064823.460000]
-#PIC.Core.CS005D21.phaseCenter = [3826662.304500,461063.951202,5064825.098000]
-#PIC.Core.CS005D22.phaseCenter = [3826661.545500,461068.138202,5064825.289000]
-#PIC.Core.CS005D23.phaseCenter = [3826662.295500,461073.781202,5064824.216000]
-#PIC.Core.CS005D24.phaseCenter = [3826664.152500,461077.825202,5064822.456000]
-#PIC.Core.CS005D25.phaseCenter = [3826667.326500,461079.481202,5064819.925000]
-#PIC.Core.CS005D26.phaseCenter = [3826670.414500,461078.446203,5064817.700000]
-#PIC.Core.CS005D27.phaseCenter = [3826673.748500,461075.740203,5064815.443000]
-#PIC.Core.CS005D28.phaseCenter = [3826675.834500,461071.745203,5064814.237000]
-#PIC.Core.CS005D29.phaseCenter = [3826679.944500,461065.300203,5064811.735000]
-#PIC.Core.CS005D30.phaseCenter = [3826679.158500,461061.679203,5064812.652000]
-#PIC.Core.CS005D31.phaseCenter = [3826677.340500,461059.661203,5064814.199000]
-#PIC.Core.CS005D32.phaseCenter = [3826671.560500,461056.633203,5064818.812000]
-#PIC.Core.CS005D33.phaseCenter = [3826670.035500,461054.433202,5064820.155000]
-#PIC.Core.CS005D34.phaseCenter = [3826664.490500,461057.654202,5064824.026000]
-#PIC.Core.CS005D35.phaseCenter = [3826661.247500,461060.923202,5064826.165000]
-#PIC.Core.CS005D36.phaseCenter = [3826657.728500,461064.137202,5064828.516000]
-#PIC.Core.CS005D37.phaseCenter = [3826658.222500,461067.390202,5064827.851000]
-#PIC.Core.CS005D38.phaseCenter = [3826658.456500,461072.098202,5064827.250000]
-#PIC.Core.CS005D39.phaseCenter = [3826660.603500,461078.399202,5064825.068000]
-#PIC.Core.CS005D40.phaseCenter = [3826661.860500,461080.609202,5064823.926000]
-#PIC.Core.CS005D41.phaseCenter = [3826665.802500,461082.383202,5064820.807000]
-#PIC.Core.CS005D42.phaseCenter = [3826668.533500,461084.560202,5064818.560000]
-#PIC.Core.CS005D43.phaseCenter = [3826675.105500,461080.770203,5064813.969000]
-#PIC.Core.CS005D44.phaseCenter = [3826677.353500,461077.802203,5064812.550000]
-#PIC.Core.CS005D45.phaseCenter = [3826679.846500,461073.137203,5064811.100000]
-#PIC.Core.CS005D46.phaseCenter = [3826687.931510,461018.878204,5064809.936000]
-#PIC.Core.CS005D47.phaseCenter = [3826629.117500,461048.374199,5064851.417000]
-#PIC.Core.CS006D00.phaseCenter = [3826596.773490,461145.130197,5064866.950000]
-#PIC.Core.CS006D01.phaseCenter = [3826594.753490,461144.887197,5064868.488000]
-#PIC.Core.CS006D02.phaseCenter = [3826595.435490,461147.235197,5064867.764000]
-#PIC.Core.CS006D03.phaseCenter = [3826597.573490,461147.492197,5064866.136000]
-#PIC.Core.CS006D04.phaseCenter = [3826598.792490,461145.373197,5064865.412000]
-#PIC.Core.CS006D05.phaseCenter = [3826598.111490,461143.025197,5064866.136000]
-#PIC.Core.CS006D06.phaseCenter = [3826595.973490,461142.767197,5064867.764000]
-#PIC.Core.CS006D07.phaseCenter = [3826597.851490,461150.677197,5064865.640000]
-#PIC.Core.CS006D08.phaseCenter = [3826600.503490,461148.322197,5064863.862000]
-#PIC.Core.CS006D09.phaseCenter = [3826601.410490,461144.474197,5064863.529000]
-#PIC.Core.CS006D10.phaseCenter = [3826600.147490,461140.933197,5064864.796000]
-#PIC.Core.CS006D11.phaseCenter = [3826597.306490,461139.356197,5064867.072000]
-#PIC.Core.CS006D12.phaseCenter = [3826594.215490,461140.480197,5064869.291000]
-#PIC.Core.CS006D13.phaseCenter = [3826592.320490,461143.781197,5064870.414000]
-#PIC.Core.CS006D14.phaseCenter = [3826592.510490,461147.711197,5064869.917000]
-#PIC.Core.CS006D15.phaseCenter = [3826594.694490,461150.435197,5064868.031000]
-#PIC.Core.CS006D16.phaseCenter = [3826594.027490,461153.953197,5064868.214000]
-#PIC.Core.CS006D17.phaseCenter = [3826596.791490,461154.973197,5064866.047000]
-#PIC.Core.CS006D18.phaseCenter = [3826600.770490,461153.865197,5064863.161000]
-#PIC.Core.CS006D19.phaseCenter = [3826604.403490,461147.954198,5064860.968000]
-#PIC.Core.CS006D20.phaseCenter = [3826604.912490,461144.768198,5064860.874000]
-#PIC.Core.CS006D21.phaseCenter = [3826604.188490,461140.637198,5064861.791000]
-#PIC.Core.CS006D22.phaseCenter = [3826601.686490,461137.921197,5064863.914000]
-#PIC.Core.CS006D23.phaseCenter = [3826597.346490,461136.172197,5064867.330000]
-#PIC.Core.CS006D24.phaseCenter = [3826593.514490,461136.346197,5064870.190000]
-#PIC.Core.CS006D25.phaseCenter = [3826590.625490,461139.024197,5064872.117000]
-#PIC.Core.CS006D26.phaseCenter = [3826589.657490,461142.828197,5064872.500000]
-#PIC.Core.CS006D27.phaseCenter = [3826589.718490,461147.654197,5064872.017000]
-#PIC.Core.CS006D28.phaseCenter = [3826591.359490,461151.718197,5064870.418000]
-#PIC.Core.CS006D29.phaseCenter = [3826593.601490,461159.078197,5064868.070000]
-#PIC.Core.CS006D30.phaseCenter = [3826596.554490,461159.869197,5064865.783000]
-#PIC.Core.CS006D31.phaseCenter = [3826598.953490,461158.822197,5064864.076000]
-#PIC.Core.CS006D32.phaseCenter = [3826604.222490,461153.948198,5064860.561000]
-#PIC.Core.CS006D33.phaseCenter = [3826606.588490,461153.301198,5064858.844000]
-#PIC.Core.CS006D34.phaseCenter = [3826607.378490,461145.851198,5064858.925000]
-#PIC.Core.CS006D35.phaseCenter = [3826606.875490,461140.868198,5064859.753000]
-#PIC.Core.CS006D36.phaseCenter = [3826606.561490,461135.611198,5064860.464000]
-#PIC.Core.CS006D37.phaseCenter = [3826604.025490,461134.669198,5064862.452000]
-#PIC.Core.CS006D38.phaseCenter = [3826600.618490,461132.789197,5064865.180000]
-#PIC.Core.CS006D39.phaseCenter = [3826595.055490,461132.253197,5064869.404000]
-#PIC.Core.CS006D40.phaseCenter = [3826592.828490,461132.608197,5064871.043000]
-#PIC.Core.CS006D41.phaseCenter = [3826589.439490,461136.062197,5064873.275000]
-#PIC.Core.CS006D42.phaseCenter = [3826586.428490,461138.026196,5064875.358000]
-#PIC.Core.CS006D43.phaseCenter = [3826585.474490,461146.840196,5064875.277000]
-#PIC.Core.CS006D44.phaseCenter = [3826586.311490,461150.614196,5064874.307000]
-#PIC.Core.CS006D45.phaseCenter = [3826588.196490,461155.420196,5064872.458000]
-#PIC.Core.CS006D46.phaseCenter = [3826629.969490,461178.945199,5064838.976000]
-#PIC.Core.CS006D47.phaseCenter = [3826626.771500,461100.374199,5064848.479000]
-#PIC.Core.CS007D00.phaseCenter = [3826533.404490,461098.918192,5064918.692000]
-#PIC.Core.CS007D01.phaseCenter = [3826531.384490,461098.674192,5064920.230000]
-#PIC.Core.CS007D02.phaseCenter = [3826532.065490,461101.023192,5064919.506000]
-#PIC.Core.CS007D03.phaseCenter = [3826534.204490,461101.280192,5064917.878000]
-#PIC.Core.CS007D04.phaseCenter = [3826535.423490,461099.161193,5064917.154000]
-#PIC.Core.CS007D05.phaseCenter = [3826534.742490,461096.813193,5064917.878000]
-#PIC.Core.CS007D06.phaseCenter = [3826532.604490,461096.555192,5064919.506000]
-#PIC.Core.CS007D07.phaseCenter = [3826528.951490,461097.568192,5064922.156000]
-#PIC.Core.CS007D08.phaseCenter = [3826529.140490,461101.500192,5064921.659000]
-#PIC.Core.CS007D09.phaseCenter = [3826531.325490,461104.223192,5064919.773000]
-#PIC.Core.CS007D10.phaseCenter = [3826534.481490,461104.465192,5064917.382000]
-#PIC.Core.CS007D11.phaseCenter = [3826537.134490,461102.110193,5064915.604000]
-#PIC.Core.CS007D12.phaseCenter = [3826538.041490,461098.262193,5064915.271000]
-#PIC.Core.CS007D13.phaseCenter = [3826536.778490,461094.721193,5064916.538000]
-#PIC.Core.CS007D14.phaseCenter = [3826533.937490,461093.144192,5064918.814000]
-#PIC.Core.CS007D15.phaseCenter = [3826530.846490,461094.268192,5064921.032000]
-#PIC.Core.CS007D16.phaseCenter = [3826528.761490,461091.953192,5064922.807000]
-#PIC.Core.CS007D17.phaseCenter = [3826526.538490,461094.477192,5064924.247000]
-#PIC.Core.CS007D18.phaseCenter = [3826525.135490,461099.276192,5064924.866000]
-#PIC.Core.CS007D19.phaseCenter = [3826527.264490,461105.878192,5064922.671000]
-#PIC.Core.CS007D20.phaseCenter = [3826529.204490,461107.873192,5064921.035000]
-#PIC.Core.CS007D21.phaseCenter = [3826532.478490,461108.962192,5064918.479000]
-#PIC.Core.CS007D22.phaseCenter = [3826535.737490,461107.492193,5064916.165000]
-#PIC.Core.CS007D23.phaseCenter = [3826539.329490,461103.595193,5064913.822000]
-#PIC.Core.CS007D24.phaseCenter = [3826541.303490,461099.378193,5064912.721000]
-#PIC.Core.CS007D25.phaseCenter = [3826541.018490,461095.045193,5064913.326000]
-#PIC.Core.CS007D26.phaseCenter = [3826538.898490,461092.275193,5064915.168000]
-#PIC.Core.CS007D27.phaseCenter = [3826535.504490,461090.155193,5064917.908000]
-#PIC.Core.CS007D28.phaseCenter = [3826531.776490,461090.087192,5064920.712000]
-#PIC.Core.CS007D29.phaseCenter = [3826525.424490,461089.172192,5064925.563000]
-#PIC.Core.CS007D30.phaseCenter = [3826523.258490,461092.002192,5064926.932000]
-#PIC.Core.CS007D31.phaseCenter = [3826522.676490,461095.068192,5064927.092000]
-#PIC.Core.CS007D32.phaseCenter = [3826523.188490,461102.967192,5064925.994000]
-#PIC.Core.CS007D33.phaseCenter = [3826522.346490,461105.817192,5064926.369000]
-#PIC.Core.CS007D34.phaseCenter = [3826527.102490,461110.045192,5064922.416000]
-#PIC.Core.CS007D35.phaseCenter = [3826530.848490,461111.759192,5064919.450000]
-#PIC.Core.CS007D36.phaseCenter = [3826534.681490,461113.802193,5064916.388000]
-#PIC.Core.CS007D37.phaseCenter = [3826536.724490,461111.490193,5064915.064000]
-#PIC.Core.CS007D38.phaseCenter = [3826539.896490,461108.662193,5064912.938000]
-#PIC.Core.CS007D39.phaseCenter = [3826543.311490,461102.898193,5064910.896000]
-#PIC.Core.CS007D40.phaseCenter = [3826544.282490,461100.331193,5064910.399000]
-#PIC.Core.CS007D41.phaseCenter = [3826543.729490,461095.105193,5064911.286000]
-#PIC.Core.CS007D42.phaseCenter = [3826544.009490,461090.964193,5064911.451000]
-#PIC.Core.CS007D43.phaseCenter = [3826538.391490,461085.938193,5064916.121000]
-#PIC.Core.CS007D44.phaseCenter = [3826535.306490,461085.134193,5064918.510000]
-#PIC.Core.CS007D45.phaseCenter = [3826530.927490,461084.993192,5064921.810000]
-#PIC.Core.CS007D46.phaseCenter = [3826523.497490,461153.009192,5064921.239000]
-#PIC.Core.CS007D47.phaseCenter = [3826576.322490,461108.390196,5064885.621000]
-#PIC.Core.CS002D00.position = [3826577.109500,461022.900196,5064892.758000]
-#PIC.Core.CS002D01.position = [3826575.090500,461022.657196,5064894.296000]
-#PIC.Core.CS002D02.position = [3826575.771500,461025.005196,5064893.572000]
-#PIC.Core.CS002D03.position = [3826577.909500,461025.263196,5064891.944000]
-#PIC.Core.CS002D04.position = [3826579.128500,461023.143196,5064891.220000]
-#PIC.Core.CS002D05.position = [3826578.447500,461020.795196,5064891.944000]
-#PIC.Core.CS002D06.position = [3826576.309500,461020.537196,5064893.572000]
-#PIC.Core.CS002D07.position = [3826574.036500,461018.775195,5064895.437000]
-#PIC.Core.CS002D08.position = [3826572.516500,461022.347195,5064896.256000]
-#PIC.Core.CS002D09.position = [3826573.144500,461026.177195,5064895.438000]
-#PIC.Core.CS002D10.position = [3826575.628500,461028.475196,5064893.365000]
-#PIC.Core.CS002D11.position = [3826578.805500,461028.164196,5064891.009000]
-#PIC.Core.CS002D12.position = [3826581.188500,461025.390196,5064889.471000]
-#PIC.Core.CS002D13.position = [3826581.662500,461021.450196,5064889.471000]
-#PIC.Core.CS002D14.position = [3826580.006500,461018.190196,5064891.009000]
-#PIC.Core.CS002D15.position = [3826576.995500,461017.133196,5064893.365000]
-#PIC.Core.CS002D16.position = [3826576.272500,461013.726196,5064894.215000]
-#PIC.Core.CS002D17.position = [3826573.376500,461014.469195,5064896.322000]
-#PIC.Core.CS002D18.position = [3826570.181500,461017.749195,5064898.424000]
-#PIC.Core.CS002D19.position = [3826569.112500,461024.945195,5064898.576000]
-#PIC.Core.CS002D20.position = [3826569.852500,461027.976195,5064897.746000]
-#PIC.Core.CS002D21.position = [3826572.070500,461031.095195,5064895.800000]
-#PIC.Core.CS002D22.position = [3826575.368500,461031.959196,5064893.246000]
-#PIC.Core.CS002D23.position = [3826579.971500,461030.917196,5064889.885000]
-#PIC.Core.CS002D24.position = [3826583.385500,461028.524196,5064887.539000]
-#PIC.Core.CS002D25.position = [3826584.999500,461024.537196,5064886.688000]
-#PIC.Core.CS002D26.position = [3826584.442500,461020.707196,5064887.452000]
-#PIC.Core.CS002D27.position = [3826582.564500,461016.605196,5064889.232000]
-#PIC.Core.CS002D28.position = [3826579.539500,461014.081196,5064891.731000]
-#PIC.Core.CS002D29.position = [3826574.724500,461009.083195,5064895.797000]
-#PIC.Core.CS002D30.position = [3826571.744500,461010.132195,5064897.939000]
-#PIC.Core.CS002D31.position = [3826569.960500,461012.435195,5064899.070000]
-#PIC.Core.CS002D32.position = [3826567.013500,461019.699195,5064900.626000]
-#PIC.Core.CS002D33.position = [3826565.109500,461021.640195,5064901.880000]
-#PIC.Core.CS002D34.position = [3826567.204500,461028.490195,5064899.688000]
-#PIC.Core.CS002D35.position = [3826569.542500,461032.470195,5064897.573000]
-#PIC.Core.CS002D36.position = [3826571.812500,461036.793195,5064895.478000]
-#PIC.Core.CS002D37.position = [3826574.471500,461036.116195,5064893.544000]
-#PIC.Core.CS002D38.position = [3826578.276500,461035.734196,5064890.722000]
-#PIC.Core.CS002D39.position = [3826583.531500,461032.936196,5064887.030000]
-#PIC.Core.CS002D40.position = [3826585.419500,461031.329196,5064885.758000]
-#PIC.Core.CS002D41.position = [3826587.195500,461026.381196,5064884.873000]
-#PIC.Core.CS002D42.position = [3826589.188500,461022.935197,5064883.688000]
-#PIC.Core.CS002D43.position = [3826586.727500,461014.817196,5064886.269000]
-#PIC.Core.CS002D44.position = [3826584.542500,461012.072196,5064888.157000]
-#PIC.Core.CS002D45.position = [3826581.014500,461009.055196,5064891.078000]
-#PIC.Core.CS002D46.position = [3826603.455510,460977.274198,5064877.107000]
-#PIC.Core.CS002D47.position = [3826612.589500,461053.051198,5064863.401000]
-##PIC.Core.CS003D00.position = [3826516.791510,460930.018191,5064946.429000]
-#PIC.Core.CS003D01.position = [3826514.771510,460929.774191,5064947.967000]
-#PIC.Core.CS003D02.position = [3826515.452500,460932.123191,5064947.243000]
-#PIC.Core.CS003D03.position = [3826517.591510,460932.380191,5064945.615000]
-#PIC.Core.CS003D04.position = [3826518.810510,460930.261191,5064944.891000]
-#PIC.Core.CS003D05.position = [3826518.129510,460927.913191,5064945.615000]
-#PIC.Core.CS003D06.position = [3826515.991510,460927.655191,5064947.243000]
-#PIC.Core.CS003D07.position = [3826521.344510,460928.568192,5064943.142000]
-#PIC.Core.CS003D08.position = [3826519.688510,460925.308191,5064944.680000]
-#PIC.Core.CS003D09.position = [3826516.676510,460924.251191,5064947.036000]
-#PIC.Core.CS003D10.position = [3826513.718510,460925.893191,5064949.109000]
-#PIC.Core.CS003D11.position = [3826512.197510,460929.464191,5064949.927000]
-#PIC.Core.CS003D12.position = [3826512.826500,460933.295191,5064949.109000]
-#PIC.Core.CS003D13.position = [3826515.310500,460935.593191,5064947.037000]
-#PIC.Core.CS003D14.position = [3826518.487500,460935.281191,5064944.680000]
-#PIC.Core.CS003D15.position = [3826520.870510,460932.508192,5064943.142000]
-#PIC.Core.CS003D16.position = [3826523.638510,460933.271192,5064940.995000]
-#PIC.Core.CS003D17.position = [3826524.704510,460929.807192,5064940.509000]
-#PIC.Core.CS003D18.position = [3826524.166510,460924.869192,5064941.358000]
-#PIC.Core.CS003D19.position = [3826519.739510,460920.454191,5064945.080000]
-#PIC.Core.CS003D20.position = [3826517.224510,460919.880191,5064947.020000]
-#PIC.Core.CS003D21.position = [3826513.839510,460920.862191,5064949.472000]
-#PIC.Core.CS003D22.position = [3826511.434510,460924.032191,5064950.991000]
-#PIC.Core.CS003D23.position = [3826509.643500,460929.476191,5064951.844000]
-#PIC.Core.CS003D24.position = [3826509.441500,460934.248191,5064951.563000]
-#PIC.Core.CS003D25.position = [3826511.336500,460937.797191,5064949.821000]
-#PIC.Core.CS003D26.position = [3826514.308500,460938.931191,5064947.487000]
-#PIC.Core.CS003D27.position = [3826518.191500,460938.761191,5064944.588000]
-#PIC.Core.CS003D28.position = [3826521.604500,460936.638192,5064942.218000]
-#PIC.Core.CS003D29.position = [3826527.718510,460933.703192,5064937.894000]
-#PIC.Core.CS003D30.position = [3826528.618510,460930.008192,5064937.552000]
-#PIC.Core.CS003D31.position = [3826527.989510,460927.039192,5064938.293000]
-#PIC.Core.CS003D32.position = [3826524.541510,460920.564192,5064941.466000]
-#PIC.Core.CS003D33.position = [3826524.230510,460917.628192,5064941.965000]
-#PIC.Core.CS003D34.position = [3826518.314510,460916.787191,5064946.482000]
-#PIC.Core.CS003D35.position = [3826514.264510,460917.509191,5064949.456000]
-#PIC.Core.CS003D36.position = [3826510.012510,460918.002191,5064952.604000]
-#PIC.Core.CS003D37.position = [3826509.029510,460921.180191,5064953.054000]
-#PIC.Core.CS003D38.position = [3826507.214510,460925.463191,5064954.029000]
-#PIC.Core.CS003D39.position = [3826506.289500,460932.406191,5064954.096000]
-#PIC.Core.CS003D40.position = [3826506.376500,460935.174191,5064953.780000]
-#PIC.Core.CS003D41.position = [3826508.850500,460939.333191,5064951.547000]
-#PIC.Core.CS003D42.position = [3826510.161500,460943.047191,5064950.228000]
-#PIC.Core.CS003D43.position = [3826517.161500,460944.068191,5064944.882000]
-#PIC.Core.CS003D44.position = [3826520.267500,460942.952192,5064942.651000]
-#PIC.Core.CS003D45.position = [3826524.297500,460940.509192,5064939.846000]
-#PIC.Core.CS003D46.position = [3826478.141510,460906.374188,5064977.577990]
-#PIC.Core.CS003D47.position = [3826495.639500,460979.543190,5064957.829990]
-#PIC.Core.CS004D00.position = [3826654.240510,460939.528201,5064842.397000]
-#PIC.Core.CS004D01.position = [3826652.220510,460939.284201,5064843.935000]
-#PIC.Core.CS004D02.position = [3826652.902510,460941.633201,5064843.211000]
-#PIC.Core.CS004D03.position = [3826655.040510,460941.890201,5064841.583000]
-#PIC.Core.CS004D04.position = [3826656.259510,460939.771202,5064840.859000]
-#PIC.Core.CS004D05.position = [3826655.578510,460937.423201,5064841.583000]
-#PIC.Core.CS004D06.position = [3826653.440510,460937.165201,5064843.211000]
-#PIC.Core.CS004D07.position = [3826652.759510,460945.103201,5064843.004000]
-#PIC.Core.CS004D08.position = [3826655.936510,460944.791202,5064840.648000]
-#PIC.Core.CS004D09.position = [3826658.319510,460942.018202,5064839.110000]
-#PIC.Core.CS004D10.position = [3826658.793510,460938.078202,5064839.110000]
-#PIC.Core.CS004D11.position = [3826657.137510,460934.818202,5064840.648000]
-#PIC.Core.CS004D12.position = [3826654.126510,460933.761201,5064843.004000]
-#PIC.Core.CS004D13.position = [3826651.167510,460935.403201,5064845.076000]
-#PIC.Core.CS004D14.position = [3826649.647510,460938.974201,5064845.895000]
-#PIC.Core.CS004D15.position = [3826650.275510,460942.805201,5064845.077000]
-#PIC.Core.CS004D16.position = [3826648.230510,460945.448201,5064846.373000]
-#PIC.Core.CS004D17.position = [3826650.060510,460948.170201,5064844.753000]
-#PIC.Core.CS004D18.position = [3826653.792510,460949.826201,5064841.802000]
-#PIC.Core.CS004D19.position = [3826659.289510,460947.047202,5064837.928000]
-#PIC.Core.CS004D20.position = [3826661.064510,460944.589202,5064836.817000]
-#PIC.Core.CS004D21.position = [3826662.230510,460940.488202,5064836.312000]
-#PIC.Core.CS004D22.position = [3826661.338510,460936.455202,5064837.347000]
-#PIC.Core.CS004D23.position = [3826658.527510,460932.053202,5064839.855000]
-#PIC.Core.CS004D24.position = [3826655.313510,460929.673201,5064842.482000]
-#PIC.Core.CS004D25.position = [3826651.805510,460930.112201,5064845.075000]
-#PIC.Core.CS004D26.position = [3826649.390510,460932.807201,5064846.645000]
-#PIC.Core.CS004D27.position = [3826647.384510,460937.078201,5064847.764000]
-#PIC.Core.CS004D28.position = [3826646.997510,460941.726201,5064847.635000]
-#PIC.Core.CS004D29.position = [3826645.698510,460949.660201,5064847.893000]
-#PIC.Core.CS004D30.position = [3826647.779510,460952.306201,5064846.092000]
-#PIC.Core.CS004D31.position = [3826650.191510,460952.972201,5064844.221000]
-#PIC.Core.CS004D32.position = [3826656.586510,460952.182202,5064839.492000]
-#PIC.Core.CS004D33.position = [3826658.801510,460953.177202,5064837.740000]
-#PIC.Core.CS004D34.position = [3826662.622510,460947.168202,5064835.415000]
-#PIC.Core.CS004D35.position = [3826664.333510,460942.467202,5064834.555000]
-#PIC.Core.CS004D36.position = [3826666.316510,460937.651202,5064833.502000]
-#PIC.Core.CS004D37.position = [3826664.640510,460935.149202,5064834.986000]
-#PIC.Core.CS004D38.position = [3826662.649510,460931.249202,5064836.833000]
-#PIC.Core.CS004D39.position = [3826658.320510,460927.104202,5064840.458000]
-#PIC.Core.CS004D40.position = [3826656.344510,460925.943202,5064842.045000]
-#PIC.Core.CS004D41.position = [3826652.094510,460926.731201,5064845.164000]
-#PIC.Core.CS004D42.position = [3826648.791510,460926.463201,5064847.668000]
-#PIC.Core.CS004D43.position = [3826644.252510,460933.560201,5064850.433000]
-#PIC.Core.CS004D44.position = [3826643.331510,460937.422201,5064850.775000]
-#PIC.Core.CS004D45.position = [3826642.828510,460942.882201,5064850.660000]
-#PIC.Core.CS004D46.position = [3826664.882510,460885.708202,5064839.274000]
-#PIC.Core.CS004D47.position = [3826611.489510,460929.214198,5064875.419000]
-#PIC.Core.CS005D00.position = [3826668.793500,461069.502202,5064819.725000]
-#PIC.Core.CS005D01.position = [3826666.773500,461069.259202,5064821.263000]
-#PIC.Core.CS005D02.position = [3826667.455500,461071.607202,5064820.540000]
-#PIC.Core.CS005D03.position = [3826669.593500,461071.865202,5064818.911000]
-#PIC.Core.CS005D04.position = [3826670.812500,461069.745203,5064818.188000]
-#PIC.Core.CS005D05.position = [3826670.131500,461067.397202,5064818.911000]
-#PIC.Core.CS005D06.position = [3826667.993500,461067.139202,5064820.539000]
-#PIC.Core.CS005D07.position = [3826672.168500,461065.304203,5064817.572000]
-#PIC.Core.CS005D08.position = [3826669.326500,461063.728202,5064819.847000]
-#PIC.Core.CS005D09.position = [3826666.235500,461064.852202,5064822.066000]
-#PIC.Core.CS005D10.position = [3826664.341500,461068.153202,5064823.189000]
-#PIC.Core.CS005D11.position = [3826664.530500,461072.084202,5064822.692000]
-#PIC.Core.CS005D12.position = [3826666.714500,461074.807202,5064820.806000]
-#PIC.Core.CS005D13.position = [3826669.871500,461075.049202,5064818.415000]
-#PIC.Core.CS005D14.position = [3826672.523500,461072.694203,5064816.637000]
-#PIC.Core.CS005D15.position = [3826673.430500,461068.846203,5064816.304000]
-#PIC.Core.CS005D16.position = [3826676.182500,461067.642203,5064814.347000]
-#PIC.Core.CS005D17.position = [3826675.640500,461064.099203,5064815.074000]
-#PIC.Core.CS005D18.position = [3826673.065500,461060.409203,5064817.341000]
-#PIC.Core.CS005D19.position = [3826667.303500,461059.716202,5064821.728000]
-#PIC.Core.CS005D20.position = [3826664.852500,461060.909202,5064823.460000]
-#PIC.Core.CS005D21.position = [3826662.304500,461063.951202,5064825.098000]
-#PIC.Core.CS005D22.position = [3826661.545500,461068.138202,5064825.289000]
-#PIC.Core.CS005D23.position = [3826662.295500,461073.781202,5064824.216000]
-#PIC.Core.CS005D24.position = [3826664.152500,461077.825202,5064822.456000]
-#PIC.Core.CS005D25.position = [3826667.326500,461079.481202,5064819.925000]
-#PIC.Core.CS005D26.position = [3826670.414500,461078.446203,5064817.700000]
-#PIC.Core.CS005D27.position = [3826673.748500,461075.740203,5064815.443000]
-#PIC.Core.CS005D28.position = [3826675.834500,461071.745203,5064814.237000]
-#PIC.Core.CS005D29.position = [3826679.944500,461065.300203,5064811.735000]
-#PIC.Core.CS005D30.position = [3826679.158500,461061.679203,5064812.652000]
-#PIC.Core.CS005D31.position = [3826677.340500,461059.661203,5064814.199000]
-#PIC.Core.CS005D32.position = [3826671.560500,461056.633203,5064818.812000]
-#PIC.Core.CS005D33.position = [3826670.035500,461054.433202,5064820.155000]
-#PIC.Core.CS005D34.position = [3826664.490500,461057.654202,5064824.026000]
-#PIC.Core.CS005D35.position = [3826661.247500,461060.923202,5064826.165000]
-#PIC.Core.CS005D36.position = [3826657.728500,461064.137202,5064828.516000]
-#PIC.Core.CS005D37.position = [3826658.222500,461067.390202,5064827.851000]
-#PIC.Core.CS005D38.position = [3826658.456500,461072.098202,5064827.250000]
-#PIC.Core.CS005D39.position = [3826660.603500,461078.399202,5064825.068000]
-#PIC.Core.CS005D40.position = [3826661.860500,461080.609202,5064823.926000]
-#PIC.Core.CS005D41.position = [3826665.802500,461082.383202,5064820.807000]
-#PIC.Core.CS005D42.position = [3826668.533500,461084.560202,5064818.560000]
-#PIC.Core.CS005D43.position = [3826675.105500,461080.770203,5064813.969000]
-#PIC.Core.CS005D44.position = [3826677.353500,461077.802203,5064812.550000]
-#PIC.Core.CS005D45.position = [3826679.846500,461073.137203,5064811.100000]
-#PIC.Core.CS005D46.position = [3826687.931510,461018.878204,5064809.936000]
-#PIC.Core.CS005D47.position = [3826629.117500,461048.374199,5064851.417000]
-#PIC.Core.CS006D00.position = [3826596.773490,461145.130197,5064866.950000]
-#PIC.Core.CS006D01.position = [3826594.753490,461144.887197,5064868.488000]
-#PIC.Core.CS006D02.position = [3826595.435490,461147.235197,5064867.764000]
-#PIC.Core.CS006D03.position = [3826597.573490,461147.492197,5064866.136000]
-#PIC.Core.CS006D04.position = [3826598.792490,461145.373197,5064865.412000]
-#PIC.Core.CS006D05.position = [3826598.111490,461143.025197,5064866.136000]
-#PIC.Core.CS006D06.position = [3826595.973490,461142.767197,5064867.764000]
-#PIC.Core.CS006D07.position = [3826597.851490,461150.677197,5064865.640000]
-#PIC.Core.CS006D08.position = [3826600.503490,461148.322197,5064863.862000]
-#PIC.Core.CS006D09.position = [3826601.410490,461144.474197,5064863.529000]
-#PIC.Core.CS006D10.position = [3826600.147490,461140.933197,5064864.796000]
-#PIC.Core.CS006D11.position = [3826597.306490,461139.356197,5064867.072000]
-#PIC.Core.CS006D12.position = [3826594.215490,461140.480197,5064869.291000]
-#PIC.Core.CS006D13.position = [3826592.320490,461143.781197,5064870.414000]
-#PIC.Core.CS006D14.position = [3826592.510490,461147.711197,5064869.917000]
-#PIC.Core.CS006D15.position = [3826594.694490,461150.435197,5064868.031000]
-#PIC.Core.CS006D16.position = [3826594.027490,461153.953197,5064868.214000]
-#PIC.Core.CS006D17.position = [3826596.791490,461154.973197,5064866.047000]
-#PIC.Core.CS006D18.position = [3826600.770490,461153.865197,5064863.161000]
-#PIC.Core.CS006D19.position = [3826604.403490,461147.954198,5064860.968000]
-#PIC.Core.CS006D20.position = [3826604.912490,461144.768198,5064860.874000]
-#PIC.Core.CS006D21.position = [3826604.188490,461140.637198,5064861.791000]
-#PIC.Core.CS006D22.position = [3826601.686490,461137.921197,5064863.914000]
-#PIC.Core.CS006D23.position = [3826597.346490,461136.172197,5064867.330000]
-#PIC.Core.CS006D24.position = [3826593.514490,461136.346197,5064870.190000]
-#PIC.Core.CS006D25.position = [3826590.625490,461139.024197,5064872.117000]
-#PIC.Core.CS006D26.position = [3826589.657490,461142.828197,5064872.500000]
-#PIC.Core.CS006D27.position = [3826589.718490,461147.654197,5064872.017000]
-#PIC.Core.CS006D28.position = [3826591.359490,461151.718197,5064870.418000]
-#PIC.Core.CS006D29.position = [3826593.601490,461159.078197,5064868.070000]
-#PIC.Core.CS006D30.position = [3826596.554490,461159.869197,5064865.783000]
-#PIC.Core.CS006D31.position = [3826598.953490,461158.822197,5064864.076000]
-#PIC.Core.CS006D32.position = [3826604.222490,461153.948198,5064860.561000]
-#PIC.Core.CS006D33.position = [3826606.588490,461153.301198,5064858.844000]
-#PIC.Core.CS006D34.position = [3826607.378490,461145.851198,5064858.925000]
-#PIC.Core.CS006D35.position = [3826606.875490,461140.868198,5064859.753000]
-#PIC.Core.CS006D36.position = [3826606.561490,461135.611198,5064860.464000]
-#PIC.Core.CS006D37.position = [3826604.025490,461134.669198,5064862.452000]
-#PIC.Core.CS006D38.position = [3826600.618490,461132.789197,5064865.180000]
-#PIC.Core.CS006D39.position = [3826595.055490,461132.253197,5064869.404000]
-#PIC.Core.CS006D40.position = [3826592.828490,461132.608197,5064871.043000]
-#PIC.Core.CS006D41.position = [3826589.439490,461136.062197,5064873.275000]
-#PIC.Core.CS006D42.position = [3826586.428490,461138.026196,5064875.358000]
-#PIC.Core.CS006D43.position = [3826585.474490,461146.840196,5064875.277000]
-#PIC.Core.CS006D44.position = [3826586.311490,461150.614196,5064874.307000]
-#PIC.Core.CS006D45.position = [3826588.196490,461155.420196,5064872.458000]
-#PIC.Core.CS006D46.position = [3826629.969490,461178.945199,5064838.976000]
-#PIC.Core.CS006D47.position = [3826626.771500,461100.374199,5064848.479000]
-#PIC.Core.CS007D00.position = [3826533.404490,461098.918192,5064918.692000]
-#PIC.Core.CS007D01.position = [3826531.384490,461098.674192,5064920.230000]
-#PIC.Core.CS007D02.position = [3826532.065490,461101.023192,5064919.506000]
-#PIC.Core.CS007D03.position = [3826534.204490,461101.280192,5064917.878000]
-#PIC.Core.CS007D04.position = [3826535.423490,461099.161193,5064917.154000]
-#PIC.Core.CS007D05.position = [3826534.742490,461096.813193,5064917.878000]
-#PIC.Core.CS007D06.position = [3826532.604490,461096.555192,5064919.506000]
-#PIC.Core.CS007D07.position = [3826528.951490,461097.568192,5064922.156000]
-#PIC.Core.CS007D08.position = [3826529.140490,461101.500192,5064921.659000]
-#PIC.Core.CS007D09.position = [3826531.325490,461104.223192,5064919.773000]
-#PIC.Core.CS007D10.position = [3826534.481490,461104.465192,5064917.382000]
-#PIC.Core.CS007D11.position = [3826537.134490,461102.110193,5064915.604000]
-#PIC.Core.CS007D12.position = [3826538.041490,461098.262193,5064915.271000]
-#PIC.Core.CS007D13.position = [3826536.778490,461094.721193,5064916.538000]
-#PIC.Core.CS007D14.position = [3826533.937490,461093.144192,5064918.814000]
-#PIC.Core.CS007D15.position = [3826530.846490,461094.268192,5064921.032000]
-#PIC.Core.CS007D16.position = [3826528.761490,461091.953192,5064922.807000]
-#PIC.Core.CS007D17.position = [3826526.538490,461094.477192,5064924.247000]
-#PIC.Core.CS007D18.position = [3826525.135490,461099.276192,5064924.866000]
-#PIC.Core.CS007D19.position = [3826527.264490,461105.878192,5064922.671000]
-#PIC.Core.CS007D20.position = [3826529.204490,461107.873192,5064921.035000]
-#PIC.Core.CS007D21.position = [3826532.478490,461108.962192,5064918.479000]
-#PIC.Core.CS007D22.position = [3826535.737490,461107.492193,5064916.165000]
-#PIC.Core.CS007D23.position = [3826539.329490,461103.595193,5064913.822000]
-#PIC.Core.CS007D24.position = [3826541.303490,461099.378193,5064912.721000]
-#PIC.Core.CS007D25.position = [3826541.018490,461095.045193,5064913.326000]
-#PIC.Core.CS007D26.position = [3826538.898490,461092.275193,5064915.168000]
-#PIC.Core.CS007D27.position = [3826535.504490,461090.155193,5064917.908000]
-#PIC.Core.CS007D28.position = [3826531.776490,461090.087192,5064920.712000]
-#PIC.Core.CS007D29.position = [3826525.424490,461089.172192,5064925.563000]
-#PIC.Core.CS007D30.position = [3826523.258490,461092.002192,5064926.932000]
-#PIC.Core.CS007D31.position = [3826522.676490,461095.068192,5064927.092000]
-#PIC.Core.CS007D32.position = [3826523.188490,461102.967192,5064925.994000]
-#PIC.Core.CS007D33.position = [3826522.346490,461105.817192,5064926.369000]
-#PIC.Core.CS007D34.position = [3826527.102490,461110.045192,5064922.416000]
-#PIC.Core.CS007D35.position = [3826530.848490,461111.759192,5064919.450000]
-#PIC.Core.CS007D36.position = [3826534.681490,461113.802193,5064916.388000]
-#PIC.Core.CS007D37.position = [3826536.724490,461111.490193,5064915.064000]
-#PIC.Core.CS007D38.position = [3826539.896490,461108.662193,5064912.938000]
-#PIC.Core.CS007D39.position = [3826543.311490,461102.898193,5064910.896000]
-#PIC.Core.CS007D40.position = [3826544.282490,461100.331193,5064910.399000]
-#PIC.Core.CS007D41.position = [3826543.729490,461095.105193,5064911.286000]
-#PIC.Core.CS007D42.position = [3826544.009490,461090.964193,5064911.451000]
-#PIC.Core.CS007D43.position = [3826538.391490,461085.938193,5064916.121000]
-#PIC.Core.CS007D44.position = [3826535.306490,461085.134193,5064918.510000]
-#PIC.Core.CS007D45.position = [3826530.927490,461084.993192,5064921.810000]
-#PIC.Core.CS007D46.position = [3826523.497490,461153.009192,5064921.239000]
-#PIC.Core.CS007D47.position = [3826576.322490,461108.390196,5064885.621000]
-# LBA_OUTER
-PIC.Core.CS002D00.phaseCenter = [3826579.492500,461005.105196,5064892.578000]
-PIC.Core.CS002D01.phaseCenter = [3826578.065500,461002.706196,5064893.866000]
-PIC.Core.CS002D02.phaseCenter = [3826566.278500,461008.429195,5064902.196000]
-PIC.Core.CS002D03.phaseCenter = [3826561.238500,461023.545195,5064904.613000]
-PIC.Core.CS002D04.phaseCenter = [3826561.048500,461028.462194,5064904.311000]
-PIC.Core.CS002D05.phaseCenter = [3826567.371500,461037.218195,5064898.774000]
-PIC.Core.CS002D06.phaseCenter = [3826577.471500,461040.701196,5064890.878000]
-PIC.Core.CS002D07.phaseCenter = [3826583.820500,461041.021196,5064886.083000]
-PIC.Core.CS002D08.phaseCenter = [3826590.492500,461028.842197,5064882.175000]
-PIC.Core.CS002D09.phaseCenter = [3826593.010500,461021.160197,5064880.980000]
-PIC.Core.CS002D10.phaseCenter = [3826589.881500,461012.254197,5064884.134000]
-PIC.Core.CS002D11.phaseCenter = [3826590.888500,461004.124197,5064884.112000]
-PIC.Core.CS002D12.phaseCenter = [3826581.799500,460998.392196,5064891.453000]
-PIC.Core.CS002D13.phaseCenter = [3826571.486500,460998.986195,5064899.140000]
-PIC.Core.CS002D14.phaseCenter = [3826566.799500,461001.550195,5064902.426000]
-PIC.Core.CS002D15.phaseCenter = [3826561.056500,461006.369194,5064906.301000]
-PIC.Core.CS002D16.phaseCenter = [3826557.923500,461023.707194,5064907.087000]
-PIC.Core.CS002D17.phaseCenter = [3826558.452500,461031.588194,5064905.977000]
-PIC.Core.CS002D18.phaseCenter = [3826563.447500,461043.574195,5064901.145000]
-PIC.Core.CS002D19.phaseCenter = [3826574.094500,461047.864195,5064892.765000]
-PIC.Core.CS002D20.phaseCenter = [3826581.534500,461047.956196,5064887.172000]
-PIC.Core.CS002D21.phaseCenter = [3826589.542500,461041.302197,5064881.763000]
-PIC.Core.CS002D22.phaseCenter = [3826597.988500,461028.593197,5064876.571000]
-PIC.Core.CS002D23.phaseCenter = [3826597.031500,461011.026197,5064878.878000]
-PIC.Core.CS002D24.phaseCenter = [3826596.814500,460997.283197,5064880.282000]
-PIC.Core.CS002D25.phaseCenter = [3826585.611500,460992.916196,5064889.087000]
-PIC.Core.CS002D26.phaseCenter = [3826573.967500,460992.191195,5064897.892000]
-PIC.Core.CS002D27.phaseCenter = [3826567.574500,460993.250195,5064902.595000]
-PIC.Core.CS002D28.phaseCenter = [3826556.250500,461006.503194,5064909.897000]
-PIC.Core.CS002D29.phaseCenter = [3826549.777500,461023.012194,5064913.263000]
-PIC.Core.CS002D30.phaseCenter = [3826551.123500,461035.050194,5064911.165000]
-PIC.Core.CS002D31.phaseCenter = [3826556.956500,461040.527194,5064906.292000]
-PIC.Core.CS002D32.phaseCenter = [3826562.717500,461052.851195,5064900.854000]
-PIC.Core.CS002D33.phaseCenter = [3826577.449500,461056.665196,5064889.451000]
-PIC.Core.CS002D34.phaseCenter = [3826584.539500,461054.769196,5064884.300000]
-PIC.Core.CS002D35.phaseCenter = [3826595.997500,461046.957197,5064876.406000]
-PIC.Core.CS002D36.phaseCenter = [3826598.671500,461039.287197,5064875.092000]
-PIC.Core.CS002D37.phaseCenter = [3826603.738500,461019.411198,5064873.085000]
-PIC.Core.CS002D38.phaseCenter = [3826600.940500,461013.887197,5064875.685000]
-PIC.Core.CS002D39.phaseCenter = [3826605.295500,461010.467198,5064872.725000]
-PIC.Core.CS002D40.phaseCenter = [3826585.073500,460981.955196,5064890.481000]
-PIC.Core.CS002D41.phaseCenter = [3826564.739500,460986.971195,5064905.291000]
-PIC.Core.CS002D42.phaseCenter = [3826551.009500,460998.299194,5064914.572000]
-PIC.Core.CS002D43.phaseCenter = [3826546.172500,461013.473193,5064916.832000]
-PIC.Core.CS002D44.phaseCenter = [3826556.131500,461055.945194,5064905.517000]
-PIC.Core.CS002D45.phaseCenter = [3826573.680500,461059.292195,5064892.043000]
-PIC.Core.CS002D46.phaseCenter = [3826586.498500,461061.863196,5064882.189000]
-PIC.Core.CS002D47.phaseCenter = [3826607.822500,461026.590198,5064869.371000]
-PIC.Core.CS003D00.phaseCenter = [3826527.881500,460940.655192,5064937.143000]
-PIC.Core.CS003D01.phaseCenter = [3826530.332500,460940.201192,5064935.344000]
-PIC.Core.CS003D02.phaseCenter = [3826532.793510,460924.878192,5064934.882000]
-PIC.Core.CS003D03.phaseCenter = [3826525.021510,460912.584192,5064941.827000]
-PIC.Core.CS003D04.phaseCenter = [3826521.701510,460910.152192,5064944.539000]
-PIC.Core.CS003D05.phaseCenter = [3826512.144510,460913.012191,5064951.454000]
-PIC.Core.CS003D06.phaseCenter = [3826504.196510,460922.342190,5064956.577000]
-PIC.Core.CS003D07.phaseCenter = [3826500.500500,460929.054190,5064958.744000]
-PIC.Core.CS003D08.phaseCenter = [3826505.334500,460941.780190,5064953.966000]
-PIC.Core.CS003D09.phaseCenter = [3826509.307500,460947.981191,5064950.423000]
-PIC.Core.CS003D10.phaseCenter = [3826517.220500,460948.636191,5064944.424000]
-PIC.Core.CS003D11.phaseCenter = [3826522.331500,460953.408192,5064940.156000]
-PIC.Core.CS003D12.phaseCenter = [3826531.295500,460946.188192,5064934.080000]
-PIC.Core.CS003D13.phaseCenter = [3826536.521510,460934.781193,5064931.189000]
-PIC.Core.CS003D14.phaseCenter = [3826537.298510,460928.557193,5064931.168000]
-PIC.Core.CS003D15.phaseCenter = [3826537.082510,460920.171193,5064932.088000]
-PIC.Core.CS003D16.phaseCenter = [3826526.721510,460908.930192,5064940.881000]
-PIC.Core.CS003D17.phaseCenter = [3826520.943510,460905.931192,5064945.489000]
-PIC.Core.CS003D18.phaseCenter = [3826509.863510,460905.894191,5064953.809000]
-PIC.Core.CS003D19.phaseCenter = [3826501.054510,460915.450190,5064959.558000]
-PIC.Core.CS003D20.phaseCenter = [3826496.920500,460923.443190,5064961.938000]
-PIC.Core.CS003D21.phaseCenter = [3826497.175500,460935.107190,5064960.693000]
-PIC.Core.CS003D22.phaseCenter = [3826501.408500,460949.988190,5064956.171000]
-PIC.Core.CS003D23.phaseCenter = [3826514.166500,460956.915191,5064945.968000]
-PIC.Core.CS003D24.phaseCenter = [3826523.855500,460962.908192,5064938.154000]
-PIC.Core.CS003D25.phaseCenter = [3826533.025500,460952.786192,5064932.186000]
-PIC.Core.CS003D26.phaseCenter = [3826539.897510,460940.539193,5064928.134000]
-PIC.Core.CS003D27.phaseCenter = [3826542.655510,460933.155193,5064926.731000]
-PIC.Core.CS003D28.phaseCenter = [3826539.617510,460914.920193,5064930.660000]
-PIC.Core.CS003D29.phaseCenter = [3826531.660510,460900.448192,5064937.941000]
-PIC.Core.CS003D30.phaseCenter = [3826522.539510,460896.447192,5064945.148000]
-PIC.Core.CS003D31.phaseCenter = [3826515.535510,460900.265191,5064950.061000]
-PIC.Core.CS003D32.phaseCenter = [3826503.801510,460900.903190,5064958.811000]
-PIC.Core.CS003D33.phaseCenter = [3826493.089510,460915.084190,5064965.570000]
-PIC.Core.CS003D34.phaseCenter = [3826490.532500,460923.602189,5064966.718990]
-PIC.Core.CS003D35.phaseCenter = [3826489.706500,460939.517189,5064965.900990]
-PIC.Core.CS003D36.phaseCenter = [3826493.586500,460945.880190,5064962.412990]
-PIC.Core.CS003D37.phaseCenter = [3826504.658500,460960.358190,5064952.794000]
-PIC.Core.CS003D38.phaseCenter = [3826510.036500,460959.840191,5064948.804000]
-PIC.Core.CS003D39.phaseCenter = [3826510.036500,460966.093191,5064948.239000]
-PIC.Core.CS003D40.phaseCenter = [3826540.952500,460957.174193,5064925.839000]
-PIC.Core.CS003D41.phaseCenter = [3826548.578510,460932.938194,5064922.305000]
-PIC.Core.CS003D42.phaseCenter = [3826548.197510,460912.976194,5064924.395000]
-PIC.Core.CS003D43.phaseCenter = [3826540.275510,460900.877193,5064931.436000]
-PIC.Core.CS003D44.phaseCenter = [3826505.248510,460892.388190,5064958.494000]
-PIC.Core.CS003D45.phaseCenter = [3826493.321510,460909.823190,5064965.871000]
-PIC.Core.CS003D46.phaseCenter = [3826484.521500,460922.503189,5064971.330990]
-PIC.Core.CS003D47.phaseCenter = [3826497.425500,460961.517190,5064958.119000]
-PIC.Core.CS004D00.phaseCenter = [3826640.767510,460946.686200,5064851.863000]
-PIC.Core.CS004D01.phaseCenter = [3826639.743510,460949.538200,5064852.374000]
-PIC.Core.CS004D02.phaseCenter = [3826649.069510,460959.139201,5064844.506000]
-PIC.Core.CS004D03.phaseCenter = [3826661.881510,460956.316202,5064835.144000]
-PIC.Core.CS004D04.phaseCenter = [3826665.390510,460953.832202,5064832.734000]
-PIC.Core.CS004D05.phaseCenter = [3826668.624510,460942.216202,5064831.357000]
-PIC.Core.CS004D06.phaseCenter = [3826666.474510,460929.403202,5064834.129000]
-PIC.Core.CS004D07.phaseCenter = [3826663.820510,460922.371202,5064836.757000]
-PIC.Core.CS004D08.phaseCenter = [3826652.313510,460921.824201,5064845.443000]
-PIC.Core.CS004D09.phaseCenter = [3826645.822510,460923.306201,5064850.182000]
-PIC.Core.CS004D10.phaseCenter = [3826641.039510,460931.555200,5064853.027000]
-PIC.Core.CS004D11.phaseCenter = [3826634.920510,460934.914200,5064857.316000]
-PIC.Core.CS004D12.phaseCenter = [3826635.046510,460947.866200,5064856.050000]
-PIC.Core.CS004D13.phaseCenter = [3826640.133510,460958.679200,5064851.255000]
-PIC.Core.CS004D14.phaseCenter = [3826644.043510,460962.338201,5064847.989000]
-PIC.Core.CS004D15.phaseCenter = [3826650.001510,460965.905201,5064843.194000]
-PIC.Core.CS004D16.phaseCenter = [3826663.496510,460959.809202,5064833.616000]
-PIC.Core.CS004D17.phaseCenter = [3826668.745510,460954.927202,5064830.117000]
-PIC.Core.CS004D18.phaseCenter = [3826674.830510,460942.977203,5064826.630000]
-PIC.Core.CS004D19.phaseCenter = [3826672.992510,460929.132203,5064829.261000]
-PIC.Core.CS004D20.phaseCenter = [3826669.685510,460921.047203,5064832.474000]
-PIC.Core.CS004D21.phaseCenter = [3826661.423510,460916.036202,5064839.129000]
-PIC.Core.CS004D22.phaseCenter = [3826648.744510,460913.865201,5064848.842000]
-PIC.Core.CS004D23.phaseCenter = [3826636.943510,460924.505200,5064856.738000]
-PIC.Core.CS004D24.phaseCenter = [3826627.470510,460932.254199,5064863.148000]
-PIC.Core.CS004D25.phaseCenter = [3826629.505510,460946.744200,5064860.311000]
-PIC.Core.CS004D26.phaseCenter = [3826634.276510,460959.716200,5064855.557000]
-PIC.Core.CS004D27.phaseCenter = [3826637.911510,460966.041200,5064852.258000]
-PIC.Core.CS004D28.phaseCenter = [3826652.272510,460971.023201,5064841.027000]
-PIC.Core.CS004D29.phaseCenter = [3826666.703510,460968.985202,5064830.380000]
-PIC.Core.CS004D30.phaseCenter = [3826674.477510,460960.948203,5064825.271000]
-PIC.Core.CS004D31.phaseCenter = [3826675.648510,460951.654203,5064825.232000]
-PIC.Core.CS004D32.phaseCenter = [3826681.621510,460938.692203,5064821.920000]
-PIC.Core.CS004D33.phaseCenter = [3826677.602510,460920.696203,5064826.563000]
-PIC.Core.CS004D34.phaseCenter = [3826673.068510,460914.075203,5064830.565000]
-PIC.Core.CS004D35.phaseCenter = [3826662.436510,460905.971202,5064839.278000]
-PIC.Core.CS004D36.phaseCenter = [3826655.882510,460907.279202,5064844.079000]
-PIC.Core.CS004D37.phaseCenter = [3826639.744510,460912.676200,5064855.705000]
-PIC.Core.CS004D38.phaseCenter = [3826637.164510,460918.719200,5064857.095000]
-PIC.Core.CS004D39.phaseCenter = [3826632.809510,460915.885200,5064860.620000]
-PIC.Core.CS004D40.phaseCenter = [3826622.115510,460953.317199,5064865.264000]
-PIC.Core.CS004D41.phaseCenter = [3826634.822510,460972.536200,5064853.989000]
-PIC.Core.CS004D42.phaseCenter = [3826648.933510,460981.170201,5064842.617000]
-PIC.Core.CS004D43.phaseCenter = [3826661.693510,460978.096202,5064833.316000]
-PIC.Core.CS004D44.phaseCenter = [3826686.760510,460944.113204,5064817.572000]
-PIC.Core.CS004D45.phaseCenter = [3826681.140510,460923.330203,5064823.669000]
-PIC.Core.CS004D46.phaseCenter = [3826677.121510,460908.080203,5064828.064000]
-PIC.Core.CS004D47.phaseCenter = [3826642.893510,460904.339201,5064854.095000]
-PIC.Core.CS005D00.phaseCenter = [3826683.049500,461070.888203,5064808.900000]
-PIC.Core.CS005D01.phaseCenter = [3826685.005500,461068.896204,5064807.611000]
-PIC.Core.CS005D02.phaseCenter = [3826680.632500,461054.715203,5064812.176000]
-PIC.Core.CS005D03.phaseCenter = [3826668.579500,461049.779202,5064821.668000]
-PIC.Core.CS005D04.phaseCenter = [3826664.631500,461049.979202,5064824.614000]
-PIC.Core.CS005D05.phaseCenter = [3826657.472500,461058.639202,5064829.205000]
-PIC.Core.CS005D06.phaseCenter = [3826654.480500,461071.536201,5064830.285000]
-PIC.Core.CS005D07.phaseCenter = [3826654.101500,461079.478201,5064829.852000]
-PIC.Core.CS005D08.phaseCenter = [3826663.761500,461086.710202,5064821.947000]
-PIC.Core.CS005D09.phaseCenter = [3826669.887500,461089.165202,5064817.127000]
-PIC.Core.CS005D10.phaseCenter = [3826677.104500,461084.473203,5064812.134000]
-PIC.Core.CS005D11.phaseCenter = [3826683.619500,461085.005203,5064807.196000]
-PIC.Core.CS005D12.phaseCenter = [3826688.400500,461073.167204,5064804.677000]
-PIC.Core.CS005D13.phaseCenter = [3826688.121500,461060.365204,5064806.043000]
-PIC.Core.CS005D14.phaseCenter = [3826686.149500,461054.752204,5064808.031000]
-PIC.Core.CS005D15.phaseCenter = [3826682.387500,461048.024203,5064811.463000]
-PIC.Core.CS005D16.phaseCenter = [3826668.512500,461045.661202,5064822.091000]
-PIC.Core.CS005D17.phaseCenter = [3826662.169500,461047.021202,5064826.729000]
-PIC.Core.CS005D18.phaseCenter = [3826652.439500,461054.314201,5064833.374000]
-PIC.Core.CS005D19.phaseCenter = [3826648.787500,461067.965201,5064834.881000]
-PIC.Core.CS005D20.phaseCenter = [3826648.570500,461077.246201,5064834.205000]
-PIC.Core.CS005D21.phaseCenter = [3826653.765500,461086.635201,5064829.457000]
-PIC.Core.CS005D22.phaseCenter = [3826663.817500,461096.031202,5064821.063000]
-PIC.Core.CS005D23.phaseCenter = [3826677.955500,461093.274203,5064810.700000]
-PIC.Core.CS005D24.phaseCenter = [3826689.003500,461091.782204,5064802.541000]
-PIC.Core.CS005D25.phaseCenter = [3826692.729500,461077.430204,5064801.042000]
-PIC.Core.CS005D26.phaseCenter = [3826693.534500,461062.853204,5064801.755000]
-PIC.Core.CS005D27.phaseCenter = [3826692.806500,461054.979204,5064803.014000]
-PIC.Core.CS005D28.phaseCenter = [3826682.372500,461042.045203,5064812.015000]
-PIC.Core.CS005D29.phaseCenter = [3826669.227500,461035.447202,5064822.477000]
-PIC.Core.CS005D30.phaseCenter = [3826659.527500,461038.196202,5064829.511000]
-PIC.Core.CS005D31.phaseCenter = [3826655.013500,461045.953201,5064832.198000]
-PIC.Core.CS005D32.phaseCenter = [3826644.998500,461054.230201,5064838.967000]
-PIC.Core.CS005D33.phaseCenter = [3826641.649500,461072.931200,5064839.790000]
-PIC.Core.CS005D34.phaseCenter = [3826643.037500,461081.599200,5064837.965000]
-PIC.Core.CS005D35.phaseCenter = [3826649.096500,461095.184201,5064832.189000]
-PIC.Core.CS005D36.phaseCenter = [3826655.209500,461097.834201,5064827.361000]
-PIC.Core.CS005D37.phaseCenter = [3826671.086500,461102.380203,5064815.033000]
-PIC.Core.CS005D38.phaseCenter = [3826675.580500,461098.401203,5064812.019000]
-PIC.Core.CS005D39.phaseCenter = [3826678.245500,461103.525203,5064809.556000]
-PIC.Core.CS005D40.phaseCenter = [3826701.548500,461075.785205,5064794.571000]
-PIC.Core.CS005D41.phaseCenter = [3826697.907500,461050.887205,5064799.555000]
-PIC.Core.CS005D42.phaseCenter = [3826689.066500,461034.784204,5064807.646000]
-PIC.Core.CS005D43.phaseCenter = [3826676.963500,461030.104203,5064817.154000]
-PIC.Core.CS005D44.phaseCenter = [3826642.637500,461046.296200,5064841.456000]
-PIC.Core.CS005D45.phaseCenter = [3826639.610500,461068.466200,5064841.724000]
-PIC.Core.CS005D46.phaseCenter = [3826637.298500,461084.670200,5064841.995000]
-PIC.Core.CS005D47.phaseCenter = [3826665.238500,461108.110202,5064818.904000]
-PIC.Core.CS006D00.phaseCenter = [3826588.011490,461159.899196,5064872.192000]
-PIC.Core.CS006D01.phaseCenter = [3826588.329490,461162.913196,5064871.681000]
-PIC.Core.CS006D02.phaseCenter = [3826600.597490,461164.616197,5064862.319000]
-PIC.Core.CS006D03.phaseCenter = [3826610.626490,461153.837198,5064855.765000]
-PIC.Core.CS006D04.phaseCenter = [3826612.645490,461149.482198,5064854.643000]
-PIC.Core.CS006D05.phaseCenter = [3826610.530490,461137.826198,5064857.284000]
-PIC.Core.CS006D06.phaseCenter = [3826603.184490,461128.748198,5064863.619000]
-PIC.Core.CS006D07.phaseCenter = [3826597.860490,461124.740197,5064867.977000]
-PIC.Core.CS006D08.phaseCenter = [3826587.540490,461131.897196,5064875.077000]
-PIC.Core.CS006D09.phaseCenter = [3826582.480490,461137.401196,5064878.377000]
-PIC.Core.CS006D10.phaseCenter = [3826581.802490,461147.323196,5064877.990000]
-PIC.Core.CS006D11.phaseCenter = [3826577.868490,461154.117196,5064880.328000]
-PIC.Core.CS006D12.phaseCenter = [3826583.498490,461164.646196,5064875.150000]
-PIC.Core.CS006D13.phaseCenter = [3826592.566490,461170.144197,5064867.847000]
-PIC.Core.CS006D14.phaseCenter = [3826597.553490,461170.559197,5064864.066000]
-PIC.Core.CS006D15.phaseCenter = [3826604.298490,461169.544198,5064859.095000]
-PIC.Core.CS006D16.phaseCenter = [3826613.531490,461155.630198,5064853.422000]
-PIC.Core.CS006D17.phaseCenter = [3826616.052490,461148.162198,5064852.205000]
-PIC.Core.CS006D18.phaseCenter = [3826616.294490,461134.350198,5064853.271000]
-PIC.Core.CS006D19.phaseCenter = [3826608.784490,461124.219198,5064859.825000]
-PIC.Core.CS006D20.phaseCenter = [3826602.439490,461119.780197,5064864.989000]
-PIC.Core.CS006D21.phaseCenter = [3826593.059490,461121.135197,5064871.907000]
-PIC.Core.CS006D22.phaseCenter = [3826581.018490,461127.734196,5064880.348000]
-PIC.Core.CS006D23.phaseCenter = [3826575.206490,461144.252195,5064883.218000]
-PIC.Core.CS006D24.phaseCenter = [3826570.204490,461156.862195,5064885.833000]
-PIC.Core.CS006D25.phaseCenter = [3826578.162490,461167.388196,5064878.908000]
-PIC.Core.CS006D26.phaseCenter = [3826587.873490,461174.865196,5064870.943000]
-PIC.Core.CS006D27.phaseCenter = [3826593.755490,461177.645197,5064866.276000]
-PIC.Core.CS006D28.phaseCenter = [3826608.469490,461172.237198,5064855.721000]
-PIC.Core.CS006D29.phaseCenter = [3826620.253490,461161.031199,5064847.889000]
-PIC.Core.CS006D30.phaseCenter = [3826623.644490,461149.308199,5064846.403000]
-PIC.Core.CS006D31.phaseCenter = [3826620.710490,461140.918199,5064849.364000]
-PIC.Core.CS006D32.phaseCenter = [3826620.422490,461126.350199,5064850.896000]
-PIC.Core.CS006D33.phaseCenter = [3826609.230500,461114.260198,5064860.390000]
-PIC.Core.CS006D34.phaseCenter = [3826602.433500,461111.832197,5064865.712000]
-PIC.Core.CS006D35.phaseCenter = [3826589.658490,461112.218197,5064875.266000]
-PIC.Core.CS006D36.phaseCenter = [3826584.469490,461117.621196,5064878.672000]
-PIC.Core.CS006D37.phaseCenter = [3826572.621490,461132.708195,5064886.202000]
-PIC.Core.CS006D38.phaseCenter = [3826572.934490,461139.365195,5064885.365000]
-PIC.Core.CS006D39.phaseCenter = [3826567.908490,461139.921195,5064889.087000]
-PIC.Core.CS006D40.phaseCenter = [3826574.484490,461177.659195,5064880.740000]
-PIC.Core.CS006D41.phaseCenter = [3826593.816490,461185.008197,5064865.565000]
-PIC.Core.CS006D42.phaseCenter = [3826609.866490,461182.757198,5064853.721000]
-PIC.Core.CS006D43.phaseCenter = [3826619.744490,461171.806199,5064847.297000]
-PIC.Core.CS006D44.phaseCenter = [3826627.238500,461127.396199,5064845.686000]
-PIC.Core.CS006D45.phaseCenter = [3826613.453500,461114.081198,5064857.236000]
-PIC.Core.CS006D46.phaseCenter = [3826603.432500,461104.241198,5064865.647000]
-PIC.Core.CS006D47.phaseCenter = [3826571.828490,461123.796195,5064887.603000]
-PIC.Core.CS007D00.phaseCenter = [3826527.909490,461082.763192,5064924.277000]
-PIC.Core.CS007D01.phaseCenter = [3826525.636490,461081.740192,5064926.075000]
-PIC.Core.CS007D02.phaseCenter = [3826517.741490,461094.218191,5064930.874000]
-PIC.Core.CS007D03.phaseCenter = [3826519.764490,461109.935191,5064927.935000]
-PIC.Core.CS007D04.phaseCenter = [3826521.693490,461114.089192,5064926.111000]
-PIC.Core.CS007D05.phaseCenter = [3826530.968490,461117.085192,5064918.878000]
-PIC.Core.CS007D06.phaseCenter = [3826541.306490,461113.264193,5064911.463000]
-PIC.Core.CS007D07.phaseCenter = [3826547.009490,461109.331193,5064907.538000]
-PIC.Core.CS007D08.phaseCenter = [3826547.669490,461094.942193,5064908.344000]
-PIC.Core.CS007D09.phaseCenter = [3826546.603490,461086.983193,5064909.863000]
-PIC.Core.CS007D10.phaseCenter = [3826540.064500,461081.754193,5064915.244000]
-PIC.Core.CS007D11.phaseCenter = [3826537.483500,461074.428193,5064917.844000]
-PIC.Core.CS007D12.phaseCenter = [3826527.071490,461075.738192,5064925.540000]
-PIC.Core.CS007D13.phaseCenter = [3826518.282490,461083.039191,5064931.477000]
-PIC.Core.CS007D14.phaseCenter = [3826515.266490,461088.238191,5064933.272000]
-PIC.Core.CS007D15.phaseCenter = [3826512.285490,461095.982191,5064934.809000]
-PIC.Core.CS007D16.phaseCenter = [3826516.926490,461112.259191,5064929.854000]
-PIC.Core.CS007D17.phaseCenter = [3826520.749490,461118.367191,5064926.433000]
-PIC.Core.CS007D18.phaseCenter = [3826530.236490,461124.886192,5064918.722000]
-PIC.Core.CS007D19.phaseCenter = [3826541.398490,461121.365193,5064910.662000]
-PIC.Core.CS007D20.phaseCenter = [3826547.961490,461116.524193,5064906.174000]
-PIC.Core.CS007D21.phaseCenter = [3826552.146490,461105.780194,5064904.004000]
-PIC.Core.CS007D22.phaseCenter = [3826554.135490,461089.784194,5064903.957000]
-PIC.Core.CS007D23.phaseCenter = [3826545.809500,461076.022193,5064911.449000]
-PIC.Core.CS007D24.phaseCenter = [3826539.762500,461064.905193,5064916.993000]
-PIC.Core.CS007D25.phaseCenter = [3826528.079500,461068.731192,5064925.417000]
-PIC.Core.CS007D26.phaseCenter = [3826517.561490,461075.832191,5064932.670000]
-PIC.Core.CS007D27.phaseCenter = [3826512.409490,461080.924191,5064936.078000]
-PIC.Core.CS007D28.phaseCenter = [3826508.128490,461099.268191,5064937.631990]
-PIC.Core.CS007D29.phaseCenter = [3826509.489490,461117.072191,5064935.001990]
-PIC.Core.CS007D30.phaseCenter = [3826515.799490,461126.046191,5064929.454000]
-PIC.Core.CS007D31.phaseCenter = [3826523.247490,461126.679192,5064923.806000]
-PIC.Core.CS007D32.phaseCenter = [3826533.550490,461132.970192,5064915.505000]
-PIC.Core.CS007D33.phaseCenter = [3826548.091490,461126.360193,5064905.187000]
-PIC.Core.CS007D34.phaseCenter = [3826553.499490,461120.120194,5064901.692000]
-PIC.Core.CS007D35.phaseCenter = [3826560.216490,461106.147194,5064897.913000]
-PIC.Core.CS007D36.phaseCenter = [3826559.291490,461098.095194,5064899.335000]
-PIC.Core.CS007D37.phaseCenter = [3826555.263500,461078.462194,5064904.133000]
-PIC.Core.CS007D38.phaseCenter = [3826550.456500,461075.783194,5064907.984000]
-PIC.Core.CS007D39.phaseCenter = [3826552.817500,461070.104194,5064906.725000]
-PIC.Core.CS007D40.phaseCenter = [3826522.937500,461060.105192,5064930.056000]
-PIC.Core.CS007D41.phaseCenter = [3826507.247490,461077.654191,5064940.246990]
-PIC.Core.CS007D42.phaseCenter = [3826500.037490,461096.010190,5064943.999990]
-PIC.Core.CS007D43.phaseCenter = [3826502.263490,461111.639190,5064940.916990]
-PIC.Core.CS007D44.phaseCenter = [3826529.095490,461139.857192,5064918.226000]
-PIC.Core.CS007D45.phaseCenter = [3826545.906490,461131.003193,5064906.408000]
-PIC.Core.CS007D46.phaseCenter = [3826558.240490,461124.638194,5064897.725000]
-PIC.Core.CS007D47.phaseCenter = [3826561.903500,461081.644195,5064898.861000]
-PIC.Core.CS002D00.position = [3826579.492500,461005.105196,5064892.578000]
-PIC.Core.CS002D01.position = [3826578.065500,461002.706196,5064893.866000]
-PIC.Core.CS002D02.position = [3826566.278500,461008.429195,5064902.196000]
-PIC.Core.CS002D03.position = [3826561.238500,461023.545195,5064904.613000]
-PIC.Core.CS002D04.position = [3826561.048500,461028.462194,5064904.311000]
-PIC.Core.CS002D05.position = [3826567.371500,461037.218195,5064898.774000]
-PIC.Core.CS002D06.position = [3826577.471500,461040.701196,5064890.878000]
-PIC.Core.CS002D07.position = [3826583.820500,461041.021196,5064886.083000]
-PIC.Core.CS002D08.position = [3826590.492500,461028.842197,5064882.175000]
-PIC.Core.CS002D09.position = [3826593.010500,461021.160197,5064880.980000]
-PIC.Core.CS002D10.position = [3826589.881500,461012.254197,5064884.134000]
-PIC.Core.CS002D11.position = [3826590.888500,461004.124197,5064884.112000]
-PIC.Core.CS002D12.position = [3826581.799500,460998.392196,5064891.453000]
-PIC.Core.CS002D13.position = [3826571.486500,460998.986195,5064899.140000]
-PIC.Core.CS002D14.position = [3826566.799500,461001.550195,5064902.426000]
-PIC.Core.CS002D15.position = [3826561.056500,461006.369194,5064906.301000]
-PIC.Core.CS002D16.position = [3826557.923500,461023.707194,5064907.087000]
-PIC.Core.CS002D17.position = [3826558.452500,461031.588194,5064905.977000]
-PIC.Core.CS002D18.position = [3826563.447500,461043.574195,5064901.145000]
-PIC.Core.CS002D19.position = [3826574.094500,461047.864195,5064892.765000]
-PIC.Core.CS002D20.position = [3826581.534500,461047.956196,5064887.172000]
-PIC.Core.CS002D21.position = [3826589.542500,461041.302197,5064881.763000]
-PIC.Core.CS002D22.position = [3826597.988500,461028.593197,5064876.571000]
-PIC.Core.CS002D23.position = [3826597.031500,461011.026197,5064878.878000]
-PIC.Core.CS002D24.position = [3826596.814500,460997.283197,5064880.282000]
-PIC.Core.CS002D25.position = [3826585.611500,460992.916196,5064889.087000]
-PIC.Core.CS002D26.position = [3826573.967500,460992.191195,5064897.892000]
-PIC.Core.CS002D27.position = [3826567.574500,460993.250195,5064902.595000]
-PIC.Core.CS002D28.position = [3826556.250500,461006.503194,5064909.897000]
-PIC.Core.CS002D29.position = [3826549.777500,461023.012194,5064913.263000]
-PIC.Core.CS002D30.position = [3826551.123500,461035.050194,5064911.165000]
-PIC.Core.CS002D31.position = [3826556.956500,461040.527194,5064906.292000]
-PIC.Core.CS002D32.position = [3826562.717500,461052.851195,5064900.854000]
-PIC.Core.CS002D33.position = [3826577.449500,461056.665196,5064889.451000]
-PIC.Core.CS002D34.position = [3826584.539500,461054.769196,5064884.300000]
-PIC.Core.CS002D35.position = [3826595.997500,461046.957197,5064876.406000]
-PIC.Core.CS002D36.position = [3826598.671500,461039.287197,5064875.092000]
-PIC.Core.CS002D37.position = [3826603.738500,461019.411198,5064873.085000]
-PIC.Core.CS002D38.position = [3826600.940500,461013.887197,5064875.685000]
-PIC.Core.CS002D39.position = [3826605.295500,461010.467198,5064872.725000]
-PIC.Core.CS002D40.position = [3826585.073500,460981.955196,5064890.481000]
-PIC.Core.CS002D41.position = [3826564.739500,460986.971195,5064905.291000]
-PIC.Core.CS002D42.position = [3826551.009500,460998.299194,5064914.572000]
-PIC.Core.CS002D43.position = [3826546.172500,461013.473193,5064916.832000]
-PIC.Core.CS002D44.position = [3826556.131500,461055.945194,5064905.517000]
-PIC.Core.CS002D45.position = [3826573.680500,461059.292195,5064892.043000]
-PIC.Core.CS002D46.position = [3826586.498500,461061.863196,5064882.189000]
-PIC.Core.CS002D47.position = [3826607.822500,461026.590198,5064869.371000]
-PIC.Core.CS003D00.position = [3826527.881500,460940.655192,5064937.143000]
-PIC.Core.CS003D01.position = [3826530.332500,460940.201192,5064935.344000]
-PIC.Core.CS003D02.position = [3826532.793510,460924.878192,5064934.882000]
-PIC.Core.CS003D03.position = [3826525.021510,460912.584192,5064941.827000]
-PIC.Core.CS003D04.position = [3826521.701510,460910.152192,5064944.539000]
-PIC.Core.CS003D05.position = [3826512.144510,460913.012191,5064951.454000]
-PIC.Core.CS003D06.position = [3826504.196510,460922.342190,5064956.577000]
-PIC.Core.CS003D07.position = [3826500.500500,460929.054190,5064958.744000]
-PIC.Core.CS003D08.position = [3826505.334500,460941.780190,5064953.966000]
-PIC.Core.CS003D09.position = [3826509.307500,460947.981191,5064950.423000]
-PIC.Core.CS003D10.position = [3826517.220500,460948.636191,5064944.424000]
-PIC.Core.CS003D11.position = [3826522.331500,460953.408192,5064940.156000]
-PIC.Core.CS003D12.position = [3826531.295500,460946.188192,5064934.080000]
-PIC.Core.CS003D13.position = [3826536.521510,460934.781193,5064931.189000]
-PIC.Core.CS003D14.position = [3826537.298510,460928.557193,5064931.168000]
-PIC.Core.CS003D15.position = [3826537.082510,460920.171193,5064932.088000]
-PIC.Core.CS003D16.position = [3826526.721510,460908.930192,5064940.881000]
-PIC.Core.CS003D17.position = [3826520.943510,460905.931192,5064945.489000]
-PIC.Core.CS003D18.position = [3826509.863510,460905.894191,5064953.809000]
-PIC.Core.CS003D19.position = [3826501.054510,460915.450190,5064959.558000]
-PIC.Core.CS003D20.position = [3826496.920500,460923.443190,5064961.938000]
-PIC.Core.CS003D21.position = [3826497.175500,460935.107190,5064960.693000]
-PIC.Core.CS003D22.position = [3826501.408500,460949.988190,5064956.171000]
-PIC.Core.CS003D23.position = [3826514.166500,460956.915191,5064945.968000]
-PIC.Core.CS003D24.position = [3826523.855500,460962.908192,5064938.154000]
-PIC.Core.CS003D25.position = [3826533.025500,460952.786192,5064932.186000]
-PIC.Core.CS003D26.position = [3826539.897510,460940.539193,5064928.134000]
-PIC.Core.CS003D27.position = [3826542.655510,460933.155193,5064926.731000]
-PIC.Core.CS003D28.position = [3826539.617510,460914.920193,5064930.660000]
-PIC.Core.CS003D29.position = [3826531.660510,460900.448192,5064937.941000]
-PIC.Core.CS003D30.position = [3826522.539510,460896.447192,5064945.148000]
-PIC.Core.CS003D31.position = [3826515.535510,460900.265191,5064950.061000]
-PIC.Core.CS003D32.position = [3826503.801510,460900.903190,5064958.811000]
-PIC.Core.CS003D33.position = [3826493.089510,460915.084190,5064965.570000]
-PIC.Core.CS003D34.position = [3826490.532500,460923.602189,5064966.718990]
-PIC.Core.CS003D35.position = [3826489.706500,460939.517189,5064965.900990]
-PIC.Core.CS003D36.position = [3826493.586500,460945.880190,5064962.412990]
-PIC.Core.CS003D37.position = [3826504.658500,460960.358190,5064952.794000]
-PIC.Core.CS003D38.position = [3826510.036500,460959.840191,5064948.804000]
-PIC.Core.CS003D39.position = [3826510.036500,460966.093191,5064948.239000]
-PIC.Core.CS003D40.position = [3826540.952500,460957.174193,5064925.839000]
-PIC.Core.CS003D41.position = [3826548.578510,460932.938194,5064922.305000]
-PIC.Core.CS003D42.position = [3826548.197510,460912.976194,5064924.395000]
-PIC.Core.CS003D43.position = [3826540.275510,460900.877193,5064931.436000]
-PIC.Core.CS003D44.position = [3826505.248510,460892.388190,5064958.494000]
-PIC.Core.CS003D45.position = [3826493.321510,460909.823190,5064965.871000]
-PIC.Core.CS003D46.position = [3826484.521500,460922.503189,5064971.330990]
-PIC.Core.CS003D47.position = [3826497.425500,460961.517190,5064958.119000]
-PIC.Core.CS004D00.position = [3826640.767510,460946.686200,5064851.863000]
-PIC.Core.CS004D01.position = [3826639.743510,460949.538200,5064852.374000]
-PIC.Core.CS004D02.position = [3826649.069510,460959.139201,5064844.506000]
-PIC.Core.CS004D03.position = [3826661.881510,460956.316202,5064835.144000]
-PIC.Core.CS004D04.position = [3826665.390510,460953.832202,5064832.734000]
-PIC.Core.CS004D05.position = [3826668.624510,460942.216202,5064831.357000]
-PIC.Core.CS004D06.position = [3826666.474510,460929.403202,5064834.129000]
-PIC.Core.CS004D07.position = [3826663.820510,460922.371202,5064836.757000]
-PIC.Core.CS004D08.position = [3826652.313510,460921.824201,5064845.443000]
-PIC.Core.CS004D09.position = [3826645.822510,460923.306201,5064850.182000]
-PIC.Core.CS004D10.position = [3826641.039510,460931.555200,5064853.027000]
-PIC.Core.CS004D11.position = [3826634.920510,460934.914200,5064857.316000]
-PIC.Core.CS004D12.position = [3826635.046510,460947.866200,5064856.050000]
-PIC.Core.CS004D13.position = [3826640.133510,460958.679200,5064851.255000]
-PIC.Core.CS004D14.position = [3826644.043510,460962.338201,5064847.989000]
-PIC.Core.CS004D15.position = [3826650.001510,460965.905201,5064843.194000]
-PIC.Core.CS004D16.position = [3826663.496510,460959.809202,5064833.616000]
-PIC.Core.CS004D17.position = [3826668.745510,460954.927202,5064830.117000]
-PIC.Core.CS004D18.position = [3826674.830510,460942.977203,5064826.630000]
-PIC.Core.CS004D19.position = [3826672.992510,460929.132203,5064829.261000]
-PIC.Core.CS004D20.position = [3826669.685510,460921.047203,5064832.474000]
-PIC.Core.CS004D21.position = [3826661.423510,460916.036202,5064839.129000]
-PIC.Core.CS004D22.position = [3826648.744510,460913.865201,5064848.842000]
-PIC.Core.CS004D23.position = [3826636.943510,460924.505200,5064856.738000]
-PIC.Core.CS004D24.position = [3826627.470510,460932.254199,5064863.148000]
-PIC.Core.CS004D25.position = [3826629.505510,460946.744200,5064860.311000]
-PIC.Core.CS004D26.position = [3826634.276510,460959.716200,5064855.557000]
-PIC.Core.CS004D27.position = [3826637.911510,460966.041200,5064852.258000]
-PIC.Core.CS004D28.position = [3826652.272510,460971.023201,5064841.027000]
-PIC.Core.CS004D29.position = [3826666.703510,460968.985202,5064830.380000]
-PIC.Core.CS004D30.position = [3826674.477510,460960.948203,5064825.271000]
-PIC.Core.CS004D31.position = [3826675.648510,460951.654203,5064825.232000]
-PIC.Core.CS004D32.position = [3826681.621510,460938.692203,5064821.920000]
-PIC.Core.CS004D33.position = [3826677.602510,460920.696203,5064826.563000]
-PIC.Core.CS004D34.position = [3826673.068510,460914.075203,5064830.565000]
-PIC.Core.CS004D35.position = [3826662.436510,460905.971202,5064839.278000]
-PIC.Core.CS004D36.position = [3826655.882510,460907.279202,5064844.079000]
-PIC.Core.CS004D37.position = [3826639.744510,460912.676200,5064855.705000]
-PIC.Core.CS004D38.position = [3826637.164510,460918.719200,5064857.095000]
-PIC.Core.CS004D39.position = [3826632.809510,460915.885200,5064860.620000]
-PIC.Core.CS004D40.position = [3826622.115510,460953.317199,5064865.264000]
-PIC.Core.CS004D41.position = [3826634.822510,460972.536200,5064853.989000]
-PIC.Core.CS004D42.position = [3826648.933510,460981.170201,5064842.617000]
-PIC.Core.CS004D43.position = [3826661.693510,460978.096202,5064833.316000]
-PIC.Core.CS004D44.position = [3826686.760510,460944.113204,5064817.572000]
-PIC.Core.CS004D45.position = [3826681.140510,460923.330203,5064823.669000]
-PIC.Core.CS004D46.position = [3826677.121510,460908.080203,5064828.064000]
-PIC.Core.CS004D47.position = [3826642.893510,460904.339201,5064854.095000]
-PIC.Core.CS005D00.position = [3826683.049500,461070.888203,5064808.900000]
-PIC.Core.CS005D01.position = [3826685.005500,461068.896204,5064807.611000]
-PIC.Core.CS005D02.position = [3826680.632500,461054.715203,5064812.176000]
-PIC.Core.CS005D03.position = [3826668.579500,461049.779202,5064821.668000]
-PIC.Core.CS005D04.position = [3826664.631500,461049.979202,5064824.614000]
-PIC.Core.CS005D05.position = [3826657.472500,461058.639202,5064829.205000]
-PIC.Core.CS005D06.position = [3826654.480500,461071.536201,5064830.285000]
-PIC.Core.CS005D07.position = [3826654.101500,461079.478201,5064829.852000]
-PIC.Core.CS005D08.position = [3826663.761500,461086.710202,5064821.947000]
-PIC.Core.CS005D09.position = [3826669.887500,461089.165202,5064817.127000]
-PIC.Core.CS005D10.position = [3826677.104500,461084.473203,5064812.134000]
-PIC.Core.CS005D11.position = [3826683.619500,461085.005203,5064807.196000]
-PIC.Core.CS005D12.position = [3826688.400500,461073.167204,5064804.677000]
-PIC.Core.CS005D13.position = [3826688.121500,461060.365204,5064806.043000]
-PIC.Core.CS005D14.position = [3826686.149500,461054.752204,5064808.031000]
-PIC.Core.CS005D15.position = [3826682.387500,461048.024203,5064811.463000]
-PIC.Core.CS005D16.position = [3826668.512500,461045.661202,5064822.091000]
-PIC.Core.CS005D17.position = [3826662.169500,461047.021202,5064826.729000]
-PIC.Core.CS005D18.position = [3826652.439500,461054.314201,5064833.374000]
-PIC.Core.CS005D19.position = [3826648.787500,461067.965201,5064834.881000]
-PIC.Core.CS005D20.position = [3826648.570500,461077.246201,5064834.205000]
-PIC.Core.CS005D21.position = [3826653.765500,461086.635201,5064829.457000]
-PIC.Core.CS005D22.position = [3826663.817500,461096.031202,5064821.063000]
-PIC.Core.CS005D23.position = [3826677.955500,461093.274203,5064810.700000]
-PIC.Core.CS005D24.position = [3826689.003500,461091.782204,5064802.541000]
-PIC.Core.CS005D25.position = [3826692.729500,461077.430204,5064801.042000]
-PIC.Core.CS005D26.position = [3826693.534500,461062.853204,5064801.755000]
-PIC.Core.CS005D27.position = [3826692.806500,461054.979204,5064803.014000]
-PIC.Core.CS005D28.position = [3826682.372500,461042.045203,5064812.015000]
-PIC.Core.CS005D29.position = [3826669.227500,461035.447202,5064822.477000]
-PIC.Core.CS005D30.position = [3826659.527500,461038.196202,5064829.511000]
-PIC.Core.CS005D31.position = [3826655.013500,461045.953201,5064832.198000]
-PIC.Core.CS005D32.position = [3826644.998500,461054.230201,5064838.967000]
-PIC.Core.CS005D33.position = [3826641.649500,461072.931200,5064839.790000]
-PIC.Core.CS005D34.position = [3826643.037500,461081.599200,5064837.965000]
-PIC.Core.CS005D35.position = [3826649.096500,461095.184201,5064832.189000]
-PIC.Core.CS005D36.position = [3826655.209500,461097.834201,5064827.361000]
-PIC.Core.CS005D37.position = [3826671.086500,461102.380203,5064815.033000]
-PIC.Core.CS005D38.position = [3826675.580500,461098.401203,5064812.019000]
-PIC.Core.CS005D39.position = [3826678.245500,461103.525203,5064809.556000]
-PIC.Core.CS005D40.position = [3826701.548500,461075.785205,5064794.571000]
-PIC.Core.CS005D41.position = [3826697.907500,461050.887205,5064799.555000]
-PIC.Core.CS005D42.position = [3826689.066500,461034.784204,5064807.646000]
-PIC.Core.CS005D43.position = [3826676.963500,461030.104203,5064817.154000]
-PIC.Core.CS005D44.position = [3826642.637500,461046.296200,5064841.456000]
-PIC.Core.CS005D45.position = [3826639.610500,461068.466200,5064841.724000]
-PIC.Core.CS005D46.position = [3826637.298500,461084.670200,5064841.995000]
-PIC.Core.CS005D47.position = [3826665.238500,461108.110202,5064818.904000]
-PIC.Core.CS006D00.position = [3826588.011490,461159.899196,5064872.192000]
-PIC.Core.CS006D01.position = [3826588.329490,461162.913196,5064871.681000]
-PIC.Core.CS006D02.position = [3826600.597490,461164.616197,5064862.319000]
-PIC.Core.CS006D03.position = [3826610.626490,461153.837198,5064855.765000]
-PIC.Core.CS006D04.position = [3826612.645490,461149.482198,5064854.643000]
-PIC.Core.CS006D05.position = [3826610.530490,461137.826198,5064857.284000]
-PIC.Core.CS006D06.position = [3826603.184490,461128.748198,5064863.619000]
-PIC.Core.CS006D07.position = [3826597.860490,461124.740197,5064867.977000]
-PIC.Core.CS006D08.position = [3826587.540490,461131.897196,5064875.077000]
-PIC.Core.CS006D09.position = [3826582.480490,461137.401196,5064878.377000]
-PIC.Core.CS006D10.position = [3826581.802490,461147.323196,5064877.990000]
-PIC.Core.CS006D11.position = [3826577.868490,461154.117196,5064880.328000]
-PIC.Core.CS006D12.position = [3826583.498490,461164.646196,5064875.150000]
-PIC.Core.CS006D13.position = [3826592.566490,461170.144197,5064867.847000]
-PIC.Core.CS006D14.position = [3826597.553490,461170.559197,5064864.066000]
-PIC.Core.CS006D15.position = [3826604.298490,461169.544198,5064859.095000]
-PIC.Core.CS006D16.position = [3826613.531490,461155.630198,5064853.422000]
-PIC.Core.CS006D17.position = [3826616.052490,461148.162198,5064852.205000]
-PIC.Core.CS006D18.position = [3826616.294490,461134.350198,5064853.271000]
-PIC.Core.CS006D19.position = [3826608.784490,461124.219198,5064859.825000]
-PIC.Core.CS006D20.position = [3826602.439490,461119.780197,5064864.989000]
-PIC.Core.CS006D21.position = [3826593.059490,461121.135197,5064871.907000]
-PIC.Core.CS006D22.position = [3826581.018490,461127.734196,5064880.348000]
-PIC.Core.CS006D23.position = [3826575.206490,461144.252195,5064883.218000]
-PIC.Core.CS006D24.position = [3826570.204490,461156.862195,5064885.833000]
-PIC.Core.CS006D25.position = [3826578.162490,461167.388196,5064878.908000]
-PIC.Core.CS006D26.position = [3826587.873490,461174.865196,5064870.943000]
-PIC.Core.CS006D27.position = [3826593.755490,461177.645197,5064866.276000]
-PIC.Core.CS006D28.position = [3826608.469490,461172.237198,5064855.721000]
-PIC.Core.CS006D29.position = [3826620.253490,461161.031199,5064847.889000]
-PIC.Core.CS006D30.position = [3826623.644490,461149.308199,5064846.403000]
-PIC.Core.CS006D31.position = [3826620.710490,461140.918199,5064849.364000]
-PIC.Core.CS006D32.position = [3826620.422490,461126.350199,5064850.896000]
-PIC.Core.CS006D33.position = [3826609.230500,461114.260198,5064860.390000]
-PIC.Core.CS006D34.position = [3826602.433500,461111.832197,5064865.712000]
-PIC.Core.CS006D35.position = [3826589.658490,461112.218197,5064875.266000]
-PIC.Core.CS006D36.position = [3826584.469490,461117.621196,5064878.672000]
-PIC.Core.CS006D37.position = [3826572.621490,461132.708195,5064886.202000]
-PIC.Core.CS006D38.position = [3826572.934490,461139.365195,5064885.365000]
-PIC.Core.CS006D39.position = [3826567.908490,461139.921195,5064889.087000]
-PIC.Core.CS006D40.position = [3826574.484490,461177.659195,5064880.740000]
-PIC.Core.CS006D41.position = [3826593.816490,461185.008197,5064865.565000]
-PIC.Core.CS006D42.position = [3826609.866490,461182.757198,5064853.721000]
-PIC.Core.CS006D43.position = [3826619.744490,461171.806199,5064847.297000]
-PIC.Core.CS006D44.position = [3826627.238500,461127.396199,5064845.686000]
-PIC.Core.CS006D45.position = [3826613.453500,461114.081198,5064857.236000]
-PIC.Core.CS006D46.position = [3826603.432500,461104.241198,5064865.647000]
-PIC.Core.CS006D47.position = [3826571.828490,461123.796195,5064887.603000]
-PIC.Core.CS007D00.position = [3826527.909490,461082.763192,5064924.277000]
-PIC.Core.CS007D01.position = [3826525.636490,461081.740192,5064926.075000]
-PIC.Core.CS007D02.position = [3826517.741490,461094.218191,5064930.874000]
-PIC.Core.CS007D03.position = [3826519.764490,461109.935191,5064927.935000]
-PIC.Core.CS007D04.position = [3826521.693490,461114.089192,5064926.111000]
-PIC.Core.CS007D05.position = [3826530.968490,461117.085192,5064918.878000]
-PIC.Core.CS007D06.position = [3826541.306490,461113.264193,5064911.463000]
-PIC.Core.CS007D07.position = [3826547.009490,461109.331193,5064907.538000]
-PIC.Core.CS007D08.position = [3826547.669490,461094.942193,5064908.344000]
-PIC.Core.CS007D09.position = [3826546.603490,461086.983193,5064909.863000]
-PIC.Core.CS007D10.position = [3826540.064500,461081.754193,5064915.244000]
-PIC.Core.CS007D11.position = [3826537.483500,461074.428193,5064917.844000]
-PIC.Core.CS007D12.position = [3826527.071490,461075.738192,5064925.540000]
-PIC.Core.CS007D13.position = [3826518.282490,461083.039191,5064931.477000]
-PIC.Core.CS007D14.position = [3826515.266490,461088.238191,5064933.272000]
-PIC.Core.CS007D15.position = [3826512.285490,461095.982191,5064934.809000]
-PIC.Core.CS007D16.position = [3826516.926490,461112.259191,5064929.854000]
-PIC.Core.CS007D17.position = [3826520.749490,461118.367191,5064926.433000]
-PIC.Core.CS007D18.position = [3826530.236490,461124.886192,5064918.722000]
-PIC.Core.CS007D19.position = [3826541.398490,461121.365193,5064910.662000]
-PIC.Core.CS007D20.position = [3826547.961490,461116.524193,5064906.174000]
-PIC.Core.CS007D21.position = [3826552.146490,461105.780194,5064904.004000]
-PIC.Core.CS007D22.position = [3826554.135490,461089.784194,5064903.957000]
-PIC.Core.CS007D23.position = [3826545.809500,461076.022193,5064911.449000]
-PIC.Core.CS007D24.position = [3826539.762500,461064.905193,5064916.993000]
-PIC.Core.CS007D25.position = [3826528.079500,461068.731192,5064925.417000]
-PIC.Core.CS007D26.position = [3826517.561490,461075.832191,5064932.670000]
-PIC.Core.CS007D27.position = [3826512.409490,461080.924191,5064936.078000]
-PIC.Core.CS007D28.position = [3826508.128490,461099.268191,5064937.631990]
-PIC.Core.CS007D29.position = [3826509.489490,461117.072191,5064935.001990]
-PIC.Core.CS007D30.position = [3826515.799490,461126.046191,5064929.454000]
-PIC.Core.CS007D31.position = [3826523.247490,461126.679192,5064923.806000]
-PIC.Core.CS007D32.position = [3826533.550490,461132.970192,5064915.505000]
-PIC.Core.CS007D33.position = [3826548.091490,461126.360193,5064905.187000]
-PIC.Core.CS007D34.position = [3826553.499490,461120.120194,5064901.692000]
-PIC.Core.CS007D35.position = [3826560.216490,461106.147194,5064897.913000]
-PIC.Core.CS007D36.position = [3826559.291490,461098.095194,5064899.335000]
-PIC.Core.CS007D37.position = [3826555.263500,461078.462194,5064904.133000]
-PIC.Core.CS007D38.position = [3826550.456500,461075.783194,5064907.984000]
-PIC.Core.CS007D39.position = [3826552.817500,461070.104194,5064906.725000]
-PIC.Core.CS007D40.position = [3826522.937500,461060.105192,5064930.056000]
-PIC.Core.CS007D41.position = [3826507.247490,461077.654191,5064940.246990]
-PIC.Core.CS007D42.position = [3826500.037490,461096.010190,5064943.999990]
-PIC.Core.CS007D43.position = [3826502.263490,461111.639190,5064940.916990]
-PIC.Core.CS007D44.position = [3826529.095490,461139.857192,5064918.226000]
-PIC.Core.CS007D45.position = [3826545.906490,461131.003193,5064906.408000]
-PIC.Core.CS007D46.position = [3826558.240490,461124.638194,5064897.725000]
-PIC.Core.CS007D47.position = [3826561.903500,461081.644195,5064898.861000]
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.run b/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.run
deleted file mode 100755
index 9b5f5386a1c7b698beee908bb7d20f867c8c878f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.run
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-
-# Parsets to use
-PARSETS="
-RTCP_UnitTest.parset.77_Stations
-RTCP_UnitTest.parset.AARTFAAC
-RTCP_UnitTest.parset.small-test
-"
-
-# Check for GPU
-if ! lspci | grep -E "VGA|3D" | grep -E "ATI|NVIDIA"
-then
-  echo "No ATI/NVIDIA graphics cards detected on host `hostname`" \
-       "-- aborting test." >&2
-  exit 3
-fi
-
-STATUS=0
-for PARSET in $PARSETS
-do
-  echo "Running ./RTCP_UnitTest $PARSET" >&2
-  ./RTCP_UnitTest $PARSET
-  if [ $? != 0 ]
-  then
-    STATUS=1
-    echo "FAILED: ./RTCP_UnitTest $PARSET" >&2
-  fi
-done
-
-exit $STATUS
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.sh b/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.sh
deleted file mode 100755
index 3d62be05a1183b4eb5394f98b701035e3d090579..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/RTCP_UnitTest.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-./runctest.sh RTCP_UnitTest
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/UnitTest.cc b/RTCP/Cobalt/GPUProc/test/opencl/UnitTest.cc
deleted file mode 100644
index 97b7c8fa6a4656bc7088315145c152f3a32bb5d1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/UnitTest.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-//# UnitTest.cc
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include "UnitTest.h"
-
-#include <limits>
-#include <complex>
-#include <cmath>
-
-#include <GPUProc/global_defines.h>
-#include <GPUProc/opencl/gpu_utils.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-
-    UnitTest::UnitTest(const Parset &ps, const char *programName)
-      :
-      counter(programName != 0 ? programName : "test", profiling)
-    {
-      createContext(context, devices);
-      queue = cl::CommandQueue(context, devices[0], CL_QUEUE_PROFILING_ENABLE);
-
-      if (programName != 0)
-        program = createProgram(ps, context, devices, programName);
-    }
-
-  }
-}
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/UnitTest.h b/RTCP/Cobalt/GPUProc/test/opencl/UnitTest.h
deleted file mode 100644
index 708a902d278cf591d20bb392dfbba2f81426ecb2..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/UnitTest.h
+++ /dev/null
@@ -1,62 +0,0 @@
-//# UnitTest.h
-//# Copyright (C) 2012-2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#ifndef LOFAR_GPUPROC_UNITTEST_H
-#define LOFAR_GPUPROC_UNITTEST_H
-
-#include <vector>
-#include <iostream>
-
-#include <CoInterface/Parset.h>
-#include <GPUProc/PerformanceCounter.h>
-
-namespace LOFAR
-{
-  namespace Cobalt
-  {
-    class UnitTest
-    {
-    protected:
-      UnitTest(const Parset &ps, const char *programName = 0);
-
-      template <typename T>
-      void check(T actual, T expected)
-      {
-        if (expected != actual) {
-          std::cerr << "Test FAILED: expected " << expected << ", computed " << actual << std::endl;
-          exit(1);
-        } else {
-          std::cout << "Test OK" << std::endl;
-        }
-      }
-
-      cl::Context context;
-      std::vector<cl::Device> devices;
-      cl::Program program;
-      cl::CommandQueue queue;
-
-      PerformanceCounter counter;
-    };
-
-  }
-}
-
-#endif
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/tContext.cc b/RTCP/Cobalt/GPUProc/test/opencl/tContext.cc
deleted file mode 100644
index 2835affc51aafe7d65e51b79444cb56d7c4f4373..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/tContext.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-//# tContext.cc: test OpenCL context creation
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include <vector>
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/opencl/gpu_utils.h>
-
-using namespace LOFAR;
-using namespace Cobalt;
-using namespace std;
-
-// test OpenCL context creation
-void test_create()
-{
-  cl::Context context;
-  vector<cl::Device> devices;
-
-  createContext(context, devices);
-}
-
-int main()
-{
-  INIT_LOGGER( "tContext" );
-
-  test_create();
-
-  return 0;
-}
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/tContext.run b/RTCP/Cobalt/GPUProc/test/opencl/tContext.run
deleted file mode 100755
index 49e5955184044681ea7bb200a7f6206b2e3a0183..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/tContext.run
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-. $srcdir/../testFuncs.sh
-haveGPU || exit 3
-./tContext || exit $?
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/tContext.sh b/RTCP/Cobalt/GPUProc/test/opencl/tContext.sh
deleted file mode 100755
index 482e1940b76085842b2ec2b444c8727e80e447ca..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/tContext.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-./runctest.sh tContext
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.cc b/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.cc
deleted file mode 100644
index 684ff29b4b1a2f6aa3bfb4833892e5caeefa145e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-//# tPerformanceCounter.cc
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include <vector>
-#include <Common/LofarLogger.h>
-
-#include <GPUProc/MultiDimArrayHostBuffer.h>
-#include <GPUProc/opencl/gpu_utils.h>
-#include <GPUProc/PerformanceCounter.h>
-
-using namespace LOFAR;
-using namespace Cobalt;
-using namespace std;
-
-cl::Context context;
-vector<cl::Device> devices;
-
-// test a performance counter without events
-void test_simple()
-{
-  PerformanceCounter counter("test", true);
-}
-
-// test a single event
-void test_event()
-{
-  PerformanceCounter counter("test", true);
-
-  // create a buffer and a queue to send the buffer
-  cl::CommandQueue queue(context, devices[0], CL_QUEUE_PROFILING_ENABLE);
-
-  MultiArraySharedBuffer<float, 1> buffer(boost::extents[1024], queue, CL_MEM_WRITE_ONLY, CL_MEM_READ_ONLY);
-
-  // transfer the buffer and record the performance
-  buffer.hostToDevice(CL_TRUE);
-  counter.doOperation(buffer.event, 0, 0, buffer.bytesize());
-
-  // wait for all scheduled events to pass
-  counter.waitForAllOperations();
-
-  struct PerformanceCounter::figures total = counter.getTotal();
-
-  // validate results
-  ASSERT(total.nrEvents == 1);
-
-  ASSERT(total.nrBytesRead == 0);
-  ASSERT(total.nrBytesWritten == buffer.bytesize());
-
-  ASSERT(total.runtime > 0.0);
-}
-
-int main()
-{
-  INIT_LOGGER( "tPerformanceCounter" );
-
-  createContext(context, devices);
-
-  test_simple();
-  test_event();
-
-  return 0;
-}
-
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.run b/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.run
deleted file mode 100755
index 49e5955184044681ea7bb200a7f6206b2e3a0183..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.run
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-. $srcdir/../testFuncs.sh
-haveGPU || exit 3
-./tContext || exit $?
diff --git a/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.sh b/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.sh
deleted file mode 100755
index 949c1277c8bc1f0b4deb39455a80d0704dc81da6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/opencl/tPerformanceCounter.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-./runctest.sh tPerformanceCounter
-
diff --git a/RTCP/Cobalt/GPUProc/test/tMPIReceive.in_parset b/RTCP/Cobalt/GPUProc/test/tMPIReceive.in_parset
index ca9be19c63f919588a820559174443d3162adaf1..28baf5e2bbf9b8732f460ea8443d40c9cc4aba1d 100644
--- a/RTCP/Cobalt/GPUProc/test/tMPIReceive.in_parset
+++ b/RTCP/Cobalt/GPUProc/test/tMPIReceive.in_parset
@@ -28,8 +28,8 @@ Observation.AnaBeam[0].startTime=
 Observation.AnaBeam[0].target=
 Observation.Beam[0].TiedArrayBeam[0].angle1=5.06907719268139
 Observation.Beam[0].TiedArrayBeam[0].angle2=0.381946883879076
-
-
+
+
 Observation.Beam[0].TiedArrayBeam[0].coherent=true
 Observation.Beam[0].TiedArrayBeam[0].directionType=J2000
 Observation.Beam[0].TiedArrayBeam[0].dispersionMeasure=0
@@ -104,5 +104,5 @@ Observation.sampleClock=200
 Observation.startTime=2013-12-05 14:15:00
 Observation.stopTime=2013-12-05 14:15:03
 _DPname=LOFAR_ObsSW_TempObs0045
-PIC.Core.CS002HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
-PIC.Core.CS501HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
+PIC.Core.CS002HBA0.RSP.sources=[factory:]
+PIC.Core.CS501HBA0.RSP.sources=[factory:]
diff --git a/RTCP/Cobalt/GPUProc/test/t_cpu_utils.cc b/RTCP/Cobalt/GPUProc/test/t_cpu_utils.cc
deleted file mode 100644
index fd1e954891c9b7eb3a65abf256bc959c345cb03c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/t_cpu_utils.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-//# t_cpu_utils.cc: test cpu utilities
-//# Copyright (C) 2013  ASTRON (Netherlands Institute for Radio Astronomy)
-//# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
-//#
-//# This file is part of the LOFAR software suite.
-//# The LOFAR software suite is free software: you can redistribute it and/or
-//# modify it under the terms of the GNU General Public License as published
-//# by the Free Software Foundation, either version 3 of the License, or
-//# (at your option) any later version.
-//#
-//# The LOFAR software suite is distributed in the hope that it will be useful,
-//# but WITHOUT ANY WARRANTY; without even the implied warranty of
-//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//# GNU General Public License for more details.
-//#
-//# You should have received a copy of the GNU General Public License along
-//# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-//#
-//# $Id$
-
-#include <lofar_config.h>
-
-#include <GPUProc/cpu_utils.h>
-
-#include <cstring>
-#include <sched.h>
-#include <string>
-#include <iostream>
-
-#include <Common/LofarLogger.h>
-#include <Common/SystemCallException.h>
-#include <Common/SystemUtil.h>
-#include <CoInterface/Parset.h>
-
-using namespace std;
-using namespace LOFAR::Cobalt;
-
-static int test(const unsigned nprocs, unsigned cpuId)
-{
-  int status = 0;
-
-  setProcessorAffinity(cpuId);
-
-  // Validate the correct setting of the affinity
-  cpu_set_t mask;  
-  if (sched_getaffinity(0, sizeof(cpu_set_t), &mask) != 0)
-    THROW_SYSCALL("sched_getaffinity");
-
-  // expect alternating on cbt nodes
-  // (the original test code intended this, but was broken in many ways (still a poor idea to make it so specific))
-  int expect = !cpuId;
-  for (unsigned i = 0; i < nprocs; i++) {
-    if (CPU_ISSET(i, &mask) != expect) {
-      LOG_FATAL_STR("cpuId=" << cpuId << " Found that core " << i << " is" << (!expect ? " " : " NOT ") <<
-                    "in the set while it should" << (expect ? " " : " NOT ") << "be!");
-      status = 1;
-    }
-    expect ^= 1;
-  }
-
-  return status;
-}
-
-int main()
-{
-  INIT_LOGGER("t_cpu_utils");
-
-  string name(LOFAR::myHostname(false));
-  if (strncmp(name.c_str(), "cbt", sizeof("cbt")-1) &&
-      strncmp(name.c_str(), "drg", sizeof("drg")-1))
-  {
-    cout << "Test is not running on cbt* (COBALT) or drg* (DRAGNET) nodes and therefore skipped: " << name << endl;
-    return 0;
-  }
-
-  Parset ps("t_cpu_utils.in_parset");
-  
-  const unsigned nprocs = sysconf( _SC_NPROCESSORS_ONLN );
-
-  int status = 0;
-  status |= test(nprocs, 0);
-  status |= test(nprocs, 1);
-  return status;
-}
-
diff --git a/RTCP/Cobalt/GPUProc/test/t_cpu_utils.in_parset b/RTCP/Cobalt/GPUProc/test/t_cpu_utils.in_parset
deleted file mode 100644
index 6e369348ab001ceaf2a9d9ea7077794557d0a02d..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/GPUProc/test/t_cpu_utils.in_parset
+++ /dev/null
@@ -1,60 +0,0 @@
-OLAP.CNProc.integrationSteps = 3072
-OLAP.Correlator.integrationTime = 1
-Cobalt.Correlator.nrBlocksPerIntegration = 8
-Cobalt.BeamFormer.coherentDedisperseChannels = false
-Cobalt.correctBandPass = true
-Cobalt.correctClocks = T
-Cobalt.delayCompensation = true
-OLAP.dispersionMeasure = 0
-OLAP.maxNetworkDelay = 0.25
-Observation.nrBitsPerSample = 8
-Cobalt.realTime = false
-Observation.AnaBeam[0].angle1 = 2.15374
-Observation.AnaBeam[0].angle2 = 0.841549
-Observation.AnaBeam[0].directionType = J2000
-Observation.AnaBeam[0].duration = 300
-Observation.AnaBeam[0].maximizeDuration = false
-Observation.AnaBeam[0].rank = 1
-Observation.AnaBeam[0].startTime = 0
-Observation.AnaBeam[0].target = 
-Observation.Beam[0].angle1 = 2.15374
-Observation.Beam[0].angle2 = 0.841549
-Observation.Beam[0].beamletList = []
-Observation.Beam[0].directionType = J2000
-Observation.Beam[0].duration = 300
-Observation.Beam[0].nrTabRings = 0
-Observation.Beam[0].nrTiedArrayBeams = 0
-Observation.Beam[0].startTime = 0
-Observation.Beam[0].subbandList = [24..28]
-Observation.Beam[0].tabRingSize = 0
-Observation.Beam[0].target = 3c196
-Observation.DataProducts.Output_Correlated.enabled = true
-Observation.DataProducts.Output_Correlated.filenames = [SB0.MS,SB1.MS,SB2.MS,SB3.MS,SB4.MS]
-Observation.DataProducts.Output_Correlated.locations = [5*:.]
-Observation.Dataslots.RS106HBA.DataslotList = [0..4]
-Observation.Dataslots.RS106HBA.RSPBoardList = [5*0]
-Observation.ObsID = 76966
-Observation.VirtualInstrument.stationList = [RS106]
-Observation.antennaArray = HBA
-Observation.antennaSet = HBA_DUAL
-Observation.bandFilter = HBA_110_190
-Observation.beamList = [5*0]
-Cobalt.Correlator.nrChannelsPerSubband = 16
-Observation.nrAnaBeams = 1
-Observation.nrBeamformers = 0
-Observation.nrBeams = 1
-Observation.nrPolarisations = 2
-Observation.referencePhaseCenter = [3826577.066,461022.948,5064892.786]
-Observation.rspBoardList = [5*0]
-Observation.rspSlotList = [5*0]
-Observation.sampleClock = 200
-Observation.startTime = '2012-11-21 12:47:01'
-Observation.stopTime = '2012-11-21 12:47:02'
-Observation.subbandList = [24..28]
-PIC.Core.RS106HBA.clockCorrectionTime = 0
-PIC.Core.RS106HBA.phaseCenter = [3829205.598,469142.533,5062181.002]
-PIC.Core.RS106HBA.position = [3829205.598,469142.533,5062181.002]
-PIC.Core.RS106HBA.RSP.ports = [file:/localhome/lofar/test_sets/3sec/rs106.udp]
-_DPname = LOFAR_ObsSW_TempObs0024
-_parsetPrefix = CorrAppl.CorrProc.
-_processName = CorrProc
diff --git a/RTCP/Cobalt/GPUProc/test/t_gpu_utils.cc b/RTCP/Cobalt/GPUProc/test/t_gpu_utils.cc
index 420b54dc46369ec0126e7f4162934eceb60bcb98..3939faedbb66a276d21b3f492a50c67f8c088743 100644
--- a/RTCP/Cobalt/GPUProc/test/t_gpu_utils.cc
+++ b/RTCP/Cobalt/GPUProc/test/t_gpu_utils.cc
@@ -21,8 +21,6 @@
 
 #include <lofar_config.h>
 
-#ifdef USE_CUDA
-
 #include <cstdio>    // for remove()
 #include <cstdlib>   // for getenv()
 #include <cassert>
@@ -37,13 +35,7 @@
 using namespace std;
 using namespace LOFAR::Cobalt;
 
-#ifdef USE_CUDA
 const char* srcFile("t_gpu_utils.cu");
-#elif USE_OPENCL
-const char* srcFile("t_gpu_utils.cl");
-#else
-#error "Either USE_CUDA or USE_OPENCL must be defined"
-#endif
 
 struct CreateFixture
 {
@@ -57,11 +49,7 @@ struct CreateFixture
     ofs << "#if defined FOO && FOO != 42\n"
         << "#error FOO != 42\n"
         << "#endif\n"
-#ifdef USE_CUDA
         << "__global__ void dummy(void) {}\n"
-#elif USE_OPENCL
-        << "__kernel void dummy(__global void) {}\n"
-#endif
         << endl;
   }
   ~CreateFixture() {
@@ -99,7 +87,7 @@ TEST_FIXTURE(CreateFixture, CreatePtxWrongExtraFlag)
 {
   CompileFlags flags;
   flags.insert("--yaddayadda");
-  CHECK_THROW(createPTX(srcFile, defaultCompileDefinitions(), flags), 
+  CHECK_THROW(createPTX(srcFile, defaultCompileDefinitions(), flags),
               GPUProcException);
 }
 
@@ -111,16 +99,19 @@ TEST_FIXTURE(CreateFixture, CreateModule)
 
 TEST_FIXTURE(CreateFixture, CreateModuleHighestArch)
 {
-  // Highest known architecture is 3.5. 
+  // Highest known architecture is 3.5.
   // Only perform this test if we do NOT have a device with that capability.
   gpu::Device device(gpu::Platform().devices()[0]);
-  if (device.getComputeCapabilityMajor() == 3 && 
+
+  if (device.getComputeCapabilityMajor() > 3) return;
+  if (device.getComputeCapabilityMajor() == 3 &&
       device.getComputeCapabilityMinor() >= 5) return;
+
   CHECK_THROW(createModule(gpu::Context(device),
-                           srcFile, 
-                           createPTX(srcFile, 
-                                     defaultCompileDefinitions(), 
-                                     defaultCompileFlags(), 
+                           srcFile,
+                           createPTX(srcFile,
+                                     defaultCompileDefinitions(),
+                                     defaultCompileFlags(),
                                      vector<gpu::Device>())),
               gpu::GPUException);
 }
@@ -134,7 +125,7 @@ TEST(DumpBuffer)
   vector<element_type> input(num_elements), output(num_elements);
 
   // Initialize input vector
-  for(size_t i = 0; i < num_elements; i++) 
+  for(size_t i = 0; i < num_elements; i++)
     input[i] = element_type(i);
 
   // Initialize GPU device, context, and stream.
@@ -176,16 +167,3 @@ int main()
     return 0;
   }
 }
-
-#else
-
-#include <iostream>
-
-int main()
-{
-  std::cout << "The GPU wrapper classes are not yet available for OpenCL.\n"
-            << "Test skipped." << std::endl;
-  return 0;
-}
-
-#endif
diff --git a/RTCP/Cobalt/InputProc/src/Buffer/StationID.cc b/RTCP/Cobalt/InputProc/src/Buffer/StationID.cc
index a6c91985bba8568585dd012562b31dd3e9fb2d01..675323cd97436ca2561cc9be026690c3ba6512e5 100644
--- a/RTCP/Cobalt/InputProc/src/Buffer/StationID.cc
+++ b/RTCP/Cobalt/InputProc/src/Buffer/StationID.cc
@@ -30,7 +30,7 @@
 using boost::format;
 
 #ifndef HAVE_STRNLEN
-static size_t strnlen( const char *s, size_t maxlen )
+size_t strnlen( const char *s, size_t maxlen )
 {
   size_t len = 0;
 
diff --git a/RTCP/Cobalt/InputProc/src/CMakeLists.txt b/RTCP/Cobalt/InputProc/src/CMakeLists.txt
index 598e87ff8e21d7df9b3d35605968aab359c98fd9..f3374120138e75cbabd947709be41aa87d023e7f 100644
--- a/RTCP/Cobalt/InputProc/src/CMakeLists.txt
+++ b/RTCP/Cobalt/InputProc/src/CMakeLists.txt
@@ -36,12 +36,15 @@ lofar_add_bin_program(repairRSP Station/repairRSP.cc)
 lofar_add_bin_program(generateRSP Station/generateRSP.cc)
 lofar_add_bin_program(generate Station/generate.cc)
 lofar_add_bin_program(printDelays Delays/printDelays.cc)
+lofar_add_bin_program(mpi_node_list Transpose/mpi_node_list.cc)
 
 # install logprop files
-install(FILES
+lofar_add_sysconf_files(
   Delays/printDelays.log_prop
   Station/generateRSP.log_prop
-  DESTINATION etc)
+  Station/generate.log_prop
+  Transpose/mpi_node_list.log_prop
+  DESTINATION .)
 
 configure_file(
   ${CMAKE_CURRENT_SOURCE_DIR}/mpirun.sh.in
diff --git a/RTCP/Cobalt/InputProc/src/Delays/Delays.cc b/RTCP/Cobalt/InputProc/src/Delays/Delays.cc
index e2b600d35ab32f51ce623241f43b96dcfcad44db..41bac56e8c06e6b57c869a30f4baebef169cf8bb 100644
--- a/RTCP/Cobalt/InputProc/src/Delays/Delays.cc
+++ b/RTCP/Cobalt/InputProc/src/Delays/Delays.cc
@@ -27,11 +27,24 @@
 #include <Common/Thread/Mutex.h>
 #include <Common/Thread/Cancellation.h>
 #include <CoInterface/Exceptions.h>
+#include <CoInterface/TimeFuncs.h>
 
 #ifdef HAVE_CASACORE
 #include <casacore/measures/Measures/MEpoch.h>
 #include <casacore/measures/Measures/MCDirection.h>
 #include <casacore/casa/Exceptions/Error.h>
+#include <casacore/measures/Measures/MeasIERS.h>
+#include <casacore/tables/Tables/Table.h>
+#include <casacore/tables/Tables/TableRecord.h>
+#include <casacore/tables/Tables/ScalarColumn.h>
+#include <casacore/casa/Containers/RecordField.h>
+#include <casacore/casa/OS/Time.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <cstdlib>
+#include <limits.h>
 #endif
 
 
@@ -39,7 +52,6 @@ namespace LOFAR
 {
   namespace Cobalt
   {
-
     //##----------------  Public methods  ----------------##//
 
     Delays::Delays(const Parset &parset, size_t stationIdx, const TimeStamp &from, size_t increment)
@@ -91,9 +103,58 @@ namespace LOFAR
       return MVEpoch(day + 40587., frac);
     }
 
+    struct Delays::IERS_tablestats Delays::get_IERS_tablestats()
+    {
+      struct IERS_tablestats result;
+
+      Table table;
+      TableRecord kws;
+      ROTableRow row;
+      RORecordFieldPtr<Double> rfp[1];
+      String vs;
+      Double dt;
+      Int N = 0;
+      String rfn[1];
+
+      // locate TAI_UTC table
+      if (!MeasIERS::getTable(table, kws, row, rfp, vs, dt, N, rfn, "IERSeop97", "measures.ierseop97.directory", ""))
+        THROW(Exception, "Cannot open IERSeop97 table");
+
+      result.path = table.tableName();
+
+      // resolve any symlinks, which typically includes f.e. "current"
+      char resolved_path[PATH_MAX];
+      if (!realpath(table.tableName().c_str(), resolved_path))
+        THROW_SYSCALL("realpath()");
+
+      result.realpath = resolved_path;
+
+      // obtain table last modification on file system
+      struct stat filestats;
+
+      string tablef0 = string(resolved_path) + "/table.f0";
+
+      if (stat(tablef0.c_str(), &filestats) != 0)
+        THROW_SYSCALL("stat(): Cannot access IERSeop97 table");
+
+      result.last_fs_modification = filestats.st_mtime;
+
+      // read which timestamps the table contains
+      casacore::Vector<Double> mjds;
+      ScalarColumn<Double>(table, "MJD").getColumn(mjds);
+      casacore::Double last_mjd = mjds[mjds.size()-1];
+
+      Time last_time(last_mjd + 2400000);
+
+      // MJD -> seconds since 1970
+      result.last_entry_timestamp = (last_mjd - 40587) * 86400;
+
+      return result;
+    }
 
     bool Delays::test()
     {
+      // Test whether delays can be calculated
       try {
         ScopedLock lock(casacoreMutex);
         ScopedDelayCancellation dc;
@@ -122,6 +183,8 @@ namespace LOFAR
         return false;
       }
 
+      // Print information about age of TAI_UTC table
+
       return true;
     }
 
@@ -234,6 +297,19 @@ namespace LOFAR
     void Delays::init() {
     }
 
+    struct Delays::IERS_tablestats Delays::get_IERS_tablestats() {
+      struct IERS_tablestats result;
+      result.path     = "/dev/null";
+      result.realpath = "/dev/null";
+      result.last_fs_modification = 0;
+      result.last_entry_timestamp = 0;
+      return result;
+    }
+
+    std::time_t Delays::TAI_UTC_tableage() {
+      return 0;
+    }
+
     void Delays::calcDelays( const TimeStamp &timestamp, AllDelays &result ) {
       (void)timestamp;
 
diff --git a/RTCP/Cobalt/InputProc/src/Delays/Delays.h b/RTCP/Cobalt/InputProc/src/Delays/Delays.h
index f81abb6241f45a6ee2428a755606b38ba3395b0b..cd85ef8b4e962b5e580b7f20b36796ac887f6a4e 100644
--- a/RTCP/Cobalt/InputProc/src/Delays/Delays.h
+++ b/RTCP/Cobalt/InputProc/src/Delays/Delays.h
@@ -45,6 +45,8 @@
 #include <casacore/casa/Quanta/MVDirection.h>
 #include <casacore/casa/Quanta/MVPosition.h>
 #include <casacore/casa/Quanta/MVEpoch.h>
+
+#include <ctime>
 #endif
 
 namespace LOFAR
@@ -149,6 +151,15 @@ namespace LOFAR
        */
       void generateMetaData( const AllDelays &delaysAtBegin, const AllDelays &delaysAfterEnd, const std::vector<size_t> &subbands, std::vector<SubbandMetaData> &metaDatas, std::vector<ssize_t> &read_offsets );
 
+      struct IERS_tablestats {
+        std::string path;     // path to the IERS table, as provided by casacore
+        std::string realpath; // path to the IERS table, with all symlinks resolved
+        time_t last_fs_modification; // last modification to the IERS table, according to the file system (f.e. when table was written)
+        time_t last_entry_timestamp; // timestamp of last entry in the table
+      };
+
+      static struct IERS_tablestats get_IERS_tablestats();
+
     private:
       const Parset &parset;
       const size_t stationIdx;
diff --git a/RTCP/Cobalt/InputProc/src/RSPBoards.cc b/RTCP/Cobalt/InputProc/src/RSPBoards.cc
index 855582b81720eaa5aef53e3f88309b9a0fae90d7..60b4e7ac528a6e013a67f983c7f38dad79cc4b86 100644
--- a/RTCP/Cobalt/InputProc/src/RSPBoards.cc
+++ b/RTCP/Cobalt/InputProc/src/RSPBoards.cc
@@ -45,7 +45,7 @@ namespace LOFAR
     void RSPBoards::process()
     {
       // References to all threads that will need aborting
-      OMPThreadSet threads;
+      OMPThreadSet threads("RSPBoards");
 
       ASSERT(nrBoards > 0);
 
diff --git a/RTCP/Cobalt/InputProc/src/Station/Generator.cc b/RTCP/Cobalt/InputProc/src/Station/Generator.cc
index dcc2c6355218b4aab9dffb533124ea6e923ca2a4..a1afd6551384cc21718b792ec128f3e3b08e08ec 100644
--- a/RTCP/Cobalt/InputProc/src/Station/Generator.cc
+++ b/RTCP/Cobalt/InputProc/src/Station/Generator.cc
@@ -101,10 +101,12 @@ namespace LOFAR
 
     void Generator::logStatistics()
     {
+      //TODO: packets per second
       for( size_t nr = 0; nr < nrBoards; nr++ ) {
+        const Stream &s = *outputStreams[nr];
         const std::string logPrefix(str(boost::format("[station %s board %u] [Generator] ") % stationID.name() % nr));
 
-        LOG_INFO_STR( logPrefix << nrSent[nr] << " packets sent.");
+        LOG_INFO_STR( logPrefix << nrSent[nr] << " packets sent via " << s.description());
 
         nrSent[nr] = 0;
       }
diff --git a/RTCP/Cobalt/InputProc/src/Station/PacketReader.cc b/RTCP/Cobalt/InputProc/src/Station/PacketReader.cc
index 84d5975274b1e3a4a11cb2e19514ad894b0e6eae..a9b610478b41aac2753bfa7a1c1f1641497a784e 100644
--- a/RTCP/Cobalt/InputProc/src/Station/PacketReader.cc
+++ b/RTCP/Cobalt/InputProc/src/Station/PacketReader.cc
@@ -42,7 +42,7 @@ namespace LOFAR
                                 const BoardMode &mode )
     : mode(mode),
       inputStream(inputStream),
-      logPrefix(str(boost::format("%s [PacketReader] ") % logPrefix)),
+      logPrefix(logPrefix),
 
       hadSizeError(false),
       nrReceived(0),
@@ -76,16 +76,16 @@ namespace LOFAR
       const float lostPerc = totalNrReceived == 0.0 ? 0.0 : 100.0 * totalNrDiscarded / totalNrReceived;
 
       if (lostPerc > 0) {
-        LOG_WARN_STR(logPrefix << "Total discarded packets is " << lostPerc << "%.");
+        LOG_WARN_STR(logPrefix << "Total discarded packets is " << lostPerc << "% on " << inputStream.description());
 
         if (totalNrBadMode > 0)
-          LOG_WARN_STR(logPrefix << "Total discarded packets due to bad clock/bitmode is " << (100.0 * totalNrBadMode / totalNrReceived) << "%.");
+          LOG_WARN_STR(logPrefix << "Total discarded packets due to bad clock/bitmode is " << (100.0 * totalNrBadMode / totalNrReceived) << "% on " << inputStream.description());
         if (totalNrBadTime > 0)
-          LOG_WARN_STR(logPrefix << "Total discarded packets due to bad timestamps is " << (100.0 * totalNrBadTime / totalNrReceived) << "%.");
+          LOG_WARN_STR(logPrefix << "Total discarded packets due to bad timestamps is " << (100.0 * totalNrBadTime / totalNrReceived) << "% on " << inputStream.description());
         if (totalNrBadData > 0)
-          LOG_WARN_STR(logPrefix << "Total discarded packets due to payload errors is " << (100.0 * totalNrBadData / totalNrReceived) << "%.");
+          LOG_WARN_STR(logPrefix << "Total discarded packets due to payload errors is " << (100.0 * totalNrBadData / totalNrReceived) << "% on " << inputStream.description());
         if (totalNrBadOther > 0)
-          LOG_WARN_STR(logPrefix << "Total discarded packets due to other reasons is " << (100.0 * totalNrBadOther / totalNrReceived) << "%.");
+          LOG_WARN_STR(logPrefix << "Total discarded packets due to other reasons is " << (100.0 * totalNrBadOther / totalNrReceived) << "% on " << inputStream.description());
       }
     }
 
@@ -151,7 +151,7 @@ namespace LOFAR
             || numbytes != packet.packetSize() ) {
         if (!hadSizeError) {
           LOG_ERROR_STR( logPrefix << "Packet is " << numbytes <<
-                         " bytes, but should be " << packet.packetSize() << " bytes" );
+                         " bytes, but should be " << packet.packetSize() << " bytes on " << inputStream.description() );
           hadSizeError = true;
         }
 
@@ -203,20 +203,22 @@ namespace LOFAR
 
       const double interval = now - lastLogTime;
 
-      // Emit log line
-      LOG_INFO_STR( logPrefix << (nrReceived / interval) << " pps: received " <<
-                    nrReceived << " packets: " << nrBadTime << " bad timestamps, " <<
-                    nrBadMode << " bad clock/bitmode, " << nrBadData << " payload errors, " <<
-                    nrBadOther << " otherwise bad packets" );
-
-      // Emit data points for monitoring (PVSS)
-      // Reproduce PN_CSI_STREAM0_BLOCKS_IN or PN_CSI_STREAM0_REJECTED, but with the right nr.
-      string streamStr = str(boost::format("stream%u") % boardNr);
-      mdLogger.log(mdKeyPrefix + streamStr + ".blocksIn",
-                   (int)round(nrReceived / interval));
-      size_t nrBad = nrBadTime + nrBadMode + nrBadData + nrBadOther;
-      mdLogger.log(mdKeyPrefix + streamStr + ".rejected",
-                   (int)round(nrBad / interval));
+      // Emit log line, but only once we are producing increments
+      if (lastLogTime > 0.0) {
+        LOG_INFO_STR( logPrefix << (nrReceived / interval) << " pps: received " <<
+                      nrReceived << " packets: " << nrBadTime << " bad timestamps, " <<
+                      nrBadMode << " bad clock/bitmode, " << nrBadData << " payload errors, " <<
+                      nrBadOther << " otherwise bad packets via " << inputStream.description() );
+
+        // Emit data points for monitoring (PVSS)
+        // Reproduce PN_CSI_STREAM0_BLOCKS_IN or PN_CSI_STREAM0_REJECTED, but with the right nr.
+        string streamStr = str(boost::format("stream%u") % boardNr);
+        mdLogger.log(mdKeyPrefix + streamStr + ".blocksIn",
+                     (int)round(nrReceived / interval));
+        size_t nrBad = nrBadTime + nrBadMode + nrBadData + nrBadOther;
+        mdLogger.log(mdKeyPrefix + streamStr + ".rejected",
+                     (int)round(nrBad / interval));
+      }
 
       // Update totals
       totalNrReceived += nrReceived;
diff --git a/RTCP/Cobalt/InputProc/src/Station/PacketStream.h b/RTCP/Cobalt/InputProc/src/Station/PacketStream.h
index 4354c9521da55eb44b52c0d9973eba49d066e01a..d4a90dcc2a3f006249a8de43bfc6c91bd7b0f6a5 100644
--- a/RTCP/Cobalt/InputProc/src/Station/PacketStream.h
+++ b/RTCP/Cobalt/InputProc/src/Station/PacketStream.h
@@ -136,6 +136,11 @@ namespace LOFAR
         THROW(NotImplemented, "Writing to PacketStream is not supported");
       }
 
+      virtual std::string description() const {
+        //TODO: fill in all the packetstream details
+        return "PacketStream ";
+      }
+
     private:
       PacketFactory factory;
 
diff --git a/RTCP/Cobalt/InputProc/src/Station/filterRSP.cc b/RTCP/Cobalt/InputProc/src/Station/filterRSP.cc
index a08a7c694b8873e70fb71e8fbf2258db561d540a..86809656a229a8594b5ce46ba8d4f2e3eda531b7 100644
--- a/RTCP/Cobalt/InputProc/src/Station/filterRSP.cc
+++ b/RTCP/Cobalt/InputProc/src/Station/filterRSP.cc
@@ -27,7 +27,7 @@
 #include <omp.h>
 #include <boost/date_time/posix_time/posix_time.hpp>
 
-#include <Common/Thread/Queue.h>
+#include <CoInterface/Queue.h>
 #include <Common/Thread/Thread.h>
 #include <Common/LofarLogger.h>
 #include <Stream/StreamFactory.h>
@@ -174,7 +174,7 @@ int main(int argc, char **argv)
       } catch(EndOfStreamException&) {
       }
 
-      writeQueue.append(NULL);
+      writeQueue.append(NULL, false);
     }
 
 #   pragma omp section
@@ -230,7 +230,7 @@ int main(int argc, char **argv)
         // Add a NULL if we're done to free up
         // readQueue.remove(), to prevent race conditions.
         if (writerDone) {
-          readQueue.append(NULL);
+          readQueue.append(NULL, false);
           break;
         }
       }
diff --git a/RTCP/Cobalt/InputProc/src/Station/generate.cc b/RTCP/Cobalt/InputProc/src/Station/generate.cc
index a4b8b47d7e917874ecb84a1bf3665bd26393058c..c19c524fad42f9c24b14eae5b66aad4c91bc458a 100644
--- a/RTCP/Cobalt/InputProc/src/Station/generate.cc
+++ b/RTCP/Cobalt/InputProc/src/Station/generate.cc
@@ -23,49 +23,154 @@
 #include <string>
 #include <vector>
 #include <omp.h>
+#include <unistd.h>
 
 #include <Common/LofarLogger.h>
 #include <Stream/StreamFactory.h>
+#include <Stream/NetFuncs.h>
 
 #include <InputProc/Station/PacketFactory.h>
 #include <InputProc/Station/Generator.h>
+#include <CoInterface/Parset.h>
+
+#include <mpi.h>
+#include <InputProc/Transpose/MPIUtil.h>
 
 using namespace LOFAR;
 using namespace Cobalt;
 using namespace std;
 
+void usage()
+{
+  cerr << "Usage: generator -p parset [options]" << endl;
+  cerr << endl;
+  cerr << "Generates the RSP data streams as they would come from a station." << endl;
+  cerr << "If run in MPI, the stations for which to generate are distributed among the nodes." << endl;
+  cerr << endl;
+  cerr << "-h              Show this help." << endl;
+  cerr << "-p parset       Read configuration from given (augmented) parset." << endl;
+  cerr << "-s stations     Override station list (comma separated)." << endl;
+}
+
+// Create a skeleton parset
+void populateParsetSkeleton(Parset &ps)
+{
+  // Add one beam
+  ps.add("Observation.nrBeams", "1");
+  ps.add("Observation.Beam[0].subbandList", "[0]");
+
+  // Add at least one station
+  ps.add("Observation.VirtualInstrument.stationList", "[CS001]");
+}
+
 int main( int argc, char **argv )
 {
-  INIT_LOGGER( "generator" );
+  // Initialise MPI object before the logger, to make $MPIRANK available
+  LOFAR::Cobalt::MPI mpi;
 
-  omp_set_nested(true);
-  omp_set_num_threads(16);
+  INIT_LOGGER( "generate" );
+
+  int opt;
+  Parset ps;
+  string stationListOverride = "";
+
+  populateParsetSkeleton(ps);
+
+  // parse all command-line options
+  while ((opt = getopt(argc, argv, "hp:s:")) != -1) {
+    switch (opt) {
+    case 'p':
+      ps.adoptFile(optarg);
+      break;
+
+    case 's':
+      stationListOverride = optarg;
+      break;
 
-  if (argc < 3) {
-    cerr << "Syntax: generator stationname stream [stream] ..." << endl;
+    case 'h':
+      usage();
+      exit(0);
+
+    default: /* '?' */
+      usage();
+      exit(1);
+    }
+  }
+
+  // we expect no further arguments
+  if (optind != argc) {
+    usage();
     exit(1);
   }
 
-  const string stationName = argv[1];
-  vector< SmartPtr<Stream> > outputStreams;
-  for (int i = 2; i < argc; ++i) {
-    const string desc = argv[i];
+  if (stationListOverride != "")
+    ps.replace("Observation.VirtualInstrument.stationList", "[" + stationListOverride + "]");
 
-    LOG_INFO_STR("Connecting to " << desc);
-    outputStreams.push_back(createStream(desc, false));
-    LOG_INFO_STR("Connected.");
-  }
+  // regenerate ps.settings
+  ps.updateSettings();
 
-  struct StationID stationID(stationName, "LBA");
-  struct BoardMode mode(8, 200);
+  mpi.init(argc, argv);
+  LOG_INFO_STR("MPI rank " << mpi.rank() << " out of " << mpi.size() << " hosts");
 
+  omp_set_nested(true);
+  omp_set_num_threads(16);
+
+  struct BoardMode mode(ps.settings.nrBitsPerSample, ps.settings.clockMHz);
   const TimeStamp from(time(0), 3, mode.clockHz());
   const TimeStamp to(0);
 
-  PacketFactory factory(mode);
-  Generator g(stationID, outputStreams, factory, from, to);
+  // get all 10Gbps interfaces which are connected
+  set<string> interfaces_set = myInterfaces(false, true, 10e9);
+
+  vector<string> interfaces;
+  for(auto iface : interfaces_set) {
+    if(iface.find("10GB") != string::npos)
+      interfaces.push_back(iface);
+  }
+
+  if(interfaces.size() > 0) {
+      LOG_INFO_STR("Using the following interfaces for sending udp packets: " << interfaces);
+  } else {
+      LOG_ERROR_STR("No interfaces available for sending udp packets");
+      exit(1);
+  }
+
+  #pragma omp parallel for num_threads(ps.settings.antennaFields.size())
+  for (size_t f = 0; f < ps.settings.antennaFields.size(); ++f) {
+    const ObservationSettings::AntennaField& field = ps.settings.antennaFields[f];
+
+    // Distribute the fields round-robin over the MPI processes
+    if (static_cast<int>(f) % mpi.size() != mpi.rank())
+      continue;
 
-  // Generate packets
-  g.process();
+    // Skip stations without any boards defined
+    if (field.inputStreams.size() == 0) {
+      LOG_WARN_STR("[" << field.name << "] No streams defined. Ignoring.");
+      continue;
+    }
+
+    vector< SmartPtr<Stream> > outputStreams;
+
+    for (size_t s = 0; s < field.inputStreams.size(); ++s) {
+      string desc = field.inputStreams[s];
+
+      // distribute the outgoing streams over the available network interfaces (round robin)
+      if(interfaces.size() > 1) {
+        desc += ":" + interfaces[(f+outputStreams.size())%interfaces.size()];
+      }
+
+      LOG_INFO_STR("[" << field.name << "] Creating stream to " << desc);
+      outputStreams.push_back(createStream(desc, false));
+      LOG_INFO_STR("[" << field.name << "] Created stream to " << desc);
+    }
+
+    struct StationID stationID(field.name);
+
+    PacketFactory factory(mode);
+    Generator g(stationID, outputStreams, factory, from, to);
+
+    // Generate packets
+    g.process();
+  }
 }
 
diff --git a/RTCP/Cobalt/InputProc/src/Station/generate.log_prop b/RTCP/Cobalt/InputProc/src/Station/generate.log_prop
new file mode 100644
index 0000000000000000000000000000000000000000..7a07207486f65623d0c772ec949261b32f507bb6
--- /dev/null
+++ b/RTCP/Cobalt/InputProc/src/Station/generate.log_prop
@@ -0,0 +1,11 @@
+
+# Configure the loggers
+log4cplus.rootLogger=INFO, STDOUT
+log4cplus.logger.TRC=INFO
+
+# Logging to console
+log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
+log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
+log4cplus.appender.STDOUT.layout.ConversionPattern=generate:${MPIRANK}@%h %D{%Y-%m-%d %H:%M:%S.%q} %-5p %c{3} - %m [%b:%L]%n
+
+log4cplus.appender.DUMP=log4cplus::NullAppender
diff --git a/RTCP/Cobalt/InputProc/src/Station/repairRSP.cc b/RTCP/Cobalt/InputProc/src/Station/repairRSP.cc
index 26c5d28e608a3608368816a5f8fdc0a2d2cfa605..ca400d6f8caad09cafb4c71174f3bdfe297193b7 100644
--- a/RTCP/Cobalt/InputProc/src/Station/repairRSP.cc
+++ b/RTCP/Cobalt/InputProc/src/Station/repairRSP.cc
@@ -27,7 +27,7 @@
 #include <omp.h>
 #include <boost/date_time/posix_time/posix_time.hpp>
 
-#include <Common/Thread/Queue.h>
+#include <CoInterface/Queue.h>
 #include <Common/Thread/Thread.h>
 #include <Common/LofarLogger.h>
 #include <ApplCommon/PosixTime.h>
diff --git a/RTCP/Cobalt/InputProc/src/Transpose/MPISendStation.cc b/RTCP/Cobalt/InputProc/src/Transpose/MPISendStation.cc
index a4f7c792d4cdc72d4e658deceb5081d7b85fe3cc..60bd7b8b42f518d5c20989b54b8b9358d3b8476b 100644
--- a/RTCP/Cobalt/InputProc/src/Transpose/MPISendStation.cc
+++ b/RTCP/Cobalt/InputProc/src/Transpose/MPISendStation.cc
@@ -56,7 +56,8 @@ namespace LOFAR {
       beamlets(beamlets),
       nrSamples(nrSamples)
     {
-      LOG_DEBUG_STR(logPrefix << "Initialised");
+      // spammy, will be called nrStations * nrTargetRanks per block.
+      //LOG_DEBUG_STR(logPrefix << "Initialised");
 
       // Check whether we send each subband to at most one node
       ASSERT(!beamlets.empty());
diff --git a/RTCP/Cobalt/InputProc/src/Transpose/MPIUtil.cc b/RTCP/Cobalt/InputProc/src/Transpose/MPIUtil.cc
index 9276d97089104232d28b244da14c752241597605..64206f7b0b11743da55b630b2054bc3a8d3d025b 100644
--- a/RTCP/Cobalt/InputProc/src/Transpose/MPIUtil.cc
+++ b/RTCP/Cobalt/InputProc/src/Transpose/MPIUtil.cc
@@ -14,11 +14,14 @@
 #endif
 
 #include <ctime>
+#include <cstdlib>
 #include <boost/lexical_cast.hpp>
+#include <boost/format.hpp>
 #include <Common/Thread/Mutex.h>
 #include <Common/Timer.h>
 #include <CoInterface/SmartPtr.h>
 #include <CoInterface/TimeFuncs.h>
+#include <Common/SystemCallException.h>
 
 using namespace std;
 
@@ -55,6 +58,10 @@ namespace LOFAR {
       if ((sizestr = getenv("MV2_COMM_WORLD_SIZE")) != NULL)
         itsSize = boost::lexical_cast<int>(sizestr);
 #endif
+
+      // export MPIRANK to the environment for the log_prop files
+      if (setenv("MPIRANK", str(boost::format("%02d") % rank()).c_str(), 1) < 0)
+        THROW_SYSCALL("setenv(MPIRANK)");
     }
 
     void MPI::init(int argc, char **argv)
@@ -65,14 +72,24 @@ namespace LOFAR {
       ScopedLock sl(MPIMutex);
 
       // Initialise and query MPI
-      int provided_mpi_thread_support;
-
       LOG_INFO("----- Initialising MPI");
       if (MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided_mpi_thread_support) != MPI_SUCCESS) {
         LOG_FATAL("MPI_Init_thread failed");
         exit(1);
       }
 
+      LOG_DEBUG_STR("MPI_Init_thread: provided thread support: " <<
+        (provided_mpi_thread_support == MPI_THREAD_SINGLE     ? "MPI_THREAD_SINGLE" :
+         provided_mpi_thread_support == MPI_THREAD_FUNNELED   ? "MPI_THREAD_FUNNELED" :
+         provided_mpi_thread_support == MPI_THREAD_SERIALIZED ? "MPI_THREAD_SERIALIZED" :
+         provided_mpi_thread_support == MPI_THREAD_MULTIPLE   ? "MPI_THREAD_MULTIPLE" :
+         str(boost::format("??? (%d)") % provided_mpi_thread_support)));
+
+      if (!threadSafe()) {
+        LOG_FATAL("MPI does not provide multi-threading support");
+        exit(1);
+      }
+
       // Verify the rank/size settings we assumed earlier
       int real_rank;
       int real_size;
@@ -101,6 +118,24 @@ namespace LOFAR {
   #endif
     }
 
+    void MPI::bindNIC(const std::string &nic)
+    {
+      ASSERT(!initialised());
+
+      // configure openib module (OpenMPI < 4.0) to use specified NIC
+      if (setenv("OMPI_MCA_btl_openib_if_include", nic.c_str(), 1) < 0)
+        THROW_SYSCALL("setenv(OMPI_MCA_btl_openib_if_include)");
+
+      // configure UCX module to use specified NIC
+      if (setenv("UCX_NET_DEVICES", str(boost::format("%s:1") % nic).c_str(), 1) < 0)
+        THROW_SYSCALL("setenv(UCX_NET_DEVICES)");
+
+      // configure UCX module to not use shared memory
+      if (setenv("UCX_SHM_DEVICES", "", 1) < 0)
+        THROW_SYSCALL("setenv(UCX_SHM_DEVICES)");
+    }
+
+
     void *MPIAllocator::allocate(size_t size, size_t alignment)
     {
       ScopedLock sl(MPIMutex);
@@ -130,11 +165,9 @@ namespace LOFAR {
       DEBUG("SEND: size " << numBytes << " tag " << hex << tag << dec << " to " << destRank);
       ASSERT(numBytes > 0);
       ASSERT(tag >= 0); // Silly MPI requirement (Reason: MPI_ANY_TAG is -1, but only for receivers)
-      //SmartPtr<ScopedLock> sl = MPI_threadSafe() ? 0 : new ScopedLock(MPIMutex);
 
       MPI_Request request;
-      // const_cast is for missing const in protos in OpenMPI <=1.6 (1.10 is fixed, not sure in between)
-      int error = ::MPI_Issend(const_cast<void*>(ptr), numBytes, MPI_BYTE, destRank, tag, MPI_COMM_WORLD, &request);
+      int error = ::MPI_Issend(ptr, numBytes, MPI_BYTE, destRank, tag, MPI_COMM_WORLD, &request);
       ASSERT(error == MPI_SUCCESS);
       return request;
     }
@@ -143,11 +176,9 @@ namespace LOFAR {
       DEBUG("SEND: size " << numBytes << " tag " << hex << tag << dec << " to " << destRank);
       ASSERT(numBytes > 0);
       ASSERT(tag >= 0); // Silly MPI requirement (Reason: MPI_ANY_TAG is -1, but only for receivers)
-      //SmartPtr<ScopedLock> sl = MPI_threadSafe() ? 0 : new ScopedLock(MPIMutex);
 
       MPI_Request request;
-      // const_cast is for missing const in protos in OpenMPI <=1.6 (1.10 is fixed, not sure in between)
-      int error = ::MPI_Irsend(const_cast<void*>(ptr), numBytes, MPI_BYTE, destRank, tag, MPI_COMM_WORLD, &request);
+      int error = ::MPI_Irsend(ptr, numBytes, MPI_BYTE, destRank, tag, MPI_COMM_WORLD, &request);
       ASSERT(error == MPI_SUCCESS);
       return request;
     }
@@ -156,11 +187,9 @@ namespace LOFAR {
       DEBUG("SEND: size " << numBytes << " tag " << hex << tag << dec << " to " << destRank);
       ASSERT(numBytes > 0);
       ASSERT(tag >= 0); // Silly MPI requirement (Reason: MPI_ANY_TAG is -1, but only for receivers)
-      //SmartPtr<ScopedLock> sl = MPI_threadSafe() ? 0 : new ScopedLock(MPIMutex);
 
       MPI_Request request;
-      // const_cast is for missing const in protos in OpenMPI <=1.6 (1.10 is fixed, not sure in between)
-      int error = ::MPI_Ibsend(const_cast<void*>(ptr), numBytes, MPI_BYTE, destRank, tag, MPI_COMM_WORLD, &request);
+      int error = ::MPI_Ibsend(ptr, numBytes, MPI_BYTE, destRank, tag, MPI_COMM_WORLD, &request);
       ASSERT(error == MPI_SUCCESS);
       return request;
     }
@@ -169,11 +198,10 @@ namespace LOFAR {
       DEBUG("SEND: size " << numBytes << " tag " << hex << tag << dec << " to " << destRank);
       ASSERT(numBytes > 0);
       ASSERT(tag >= 0); // Silly MPI requirement (Reason: MPI_ANY_TAG is -1, but only for receivers)
-      //SmartPtr<ScopedLock> sl = MPI_threadSafe() ? 0 : new ScopedLock(MPIMutex);
 
       MPI_Request request;
       // const_cast is for missing const in protos in OpenMPI <=1.6 (1.10 is fixed, not sure in between)
-      int error = ::MPI_Isend(const_cast<void*>(ptr), numBytes, MPI_BYTE, destRank, tag, MPI_COMM_WORLD, &request);
+      int error = ::MPI_Isend(ptr, numBytes, MPI_BYTE, destRank, tag, MPI_COMM_WORLD, &request);
       ASSERT(error == MPI_SUCCESS);
       return request;
     }
@@ -183,8 +211,6 @@ namespace LOFAR {
 
       ASSERT(tag >= 0); // Silly MPI requirement
 
-      //SmartPtr<ScopedLock> sl = MPI_threadSafe() ? 0 : new ScopedLock(MPIMutex);
-
       MPI_Request request;
 
       int error;
@@ -198,8 +224,6 @@ namespace LOFAR {
     vector<MPI_Request> Guarded_MPI_Ibcast(void *ptr, size_t numBytes, int srcRank, int tag) {
       DEBUG("BCAST: size " << numBytes << " tag " << hex << tag);
 
-      //SmartPtr<ScopedLock> sl = MPI_threadSafe() ? 0 : new ScopedLock(MPIMutex);
-
       vector<MPI_Request> requests;
 
       /* MPI_Ibcast is MPI 3.0+, which is not a requirement,
@@ -422,11 +446,13 @@ namespace LOFAR {
       ScopedLock sl(mutex);
 
       while(!done) {
-        // next poll will be in 0.1 ms
+        // next poll will be in 0.5 ms
         //
         // NOTE: MPI is VERY sensitive to this, requiring
         //       often enough polling to keep transfers
         //       running smoothly.
+        //
+        // If the observations do not run at real time, try lowering the polling interval.
 
         if (requests.empty()) {
           // wait for request, with lock released
@@ -439,7 +465,7 @@ namespace LOFAR {
           // the lock and just wait with a timeout
           if (!requests.empty()) {
             struct timespec deadline = TimeSpec::now();
-            TimeSpec::inc(deadline, 0.0001);
+            TimeSpec::inc(deadline, 0.00025);
 
             newRequest.wait(mutex, deadline);
           }
@@ -472,22 +498,26 @@ namespace LOFAR {
 
    RequestSet::~RequestSet()
    {
-     // all requests should be finished and reported by now
-     {
-       ScopedLock sl(mutex);
+     try {
+       // all requests should be finished and reported by now
+       {
+         ScopedLock sl(mutex);
 
-       ASSERT(nrFinished == handles.size());
+         ASSERT(nrFinished == handles.size());
 
-       for (size_t i = 0; i < states.size(); ++i) {
-         ASSERT(states[i] == REPORTED);
+         for (size_t i = 0; i < states.size(); ++i) {
+           ASSERT(states[i] == REPORTED);
+         }
        }
-     }
 
-     // we should have been unregistered once our last
-     // request was FINISHED
-     {
-       ScopedLock sl(mutex);
-       ASSERT(!mpiPoller.have(this));
+       // we should have been unregistered once our last
+       // request was FINISHED
+       {
+         ScopedLock sl(mutex);
+         ASSERT(!mpiPoller.have(this));
+       }
+     } catch (Exception &ex) {
+       LOG_ERROR_STR(ex);
      }
    }
 
diff --git a/RTCP/Cobalt/InputProc/src/Transpose/MPIUtil.h b/RTCP/Cobalt/InputProc/src/Transpose/MPIUtil.h
index c3f866e4e8db63b2acea903f2201b78707fd7621..b98d2673a8c2d6a9c6ae10089f4a4de2bc5723cc 100644
--- a/RTCP/Cobalt/InputProc/src/Transpose/MPIUtil.h
+++ b/RTCP/Cobalt/InputProc/src/Transpose/MPIUtil.h
@@ -37,9 +37,16 @@ namespace LOFAR {
       void init(int argc, char **argv);
 
       bool initialised() const { return itsIsInitialised; }
+      bool threadSafe() const { return provided_mpi_thread_support >= MPI_THREAD_MULTIPLE; }
+
       int rank() const { return itsRank; }
       int size() const { return itsSize; }
 
+      // Force MPI to use a specfic NIC (f.e. "mlx5_0")
+      //
+      // Must be called before initialisation
+      void bindNIC(const std::string& nic);
+
     public:
       // Non-copyable!
       MPI(const MPI &);
@@ -53,6 +60,9 @@ namespace LOFAR {
     private:
       // Whether MPI_Init has been called
       bool itsIsInitialised;
+
+      // What level of multithreading MPI claims to support
+      int provided_mpi_thread_support;
     };
 
     // An allocator using MPI_Alloc_mem/MPI_Free_mem
diff --git a/RTCP/Cobalt/GPUProc/src/Station/mpi_node_list.cc b/RTCP/Cobalt/InputProc/src/Transpose/mpi_node_list.cc
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/Station/mpi_node_list.cc
rename to RTCP/Cobalt/InputProc/src/Transpose/mpi_node_list.cc
diff --git a/RTCP/Cobalt/GPUProc/src/Station/mpi_node_list.log_prop b/RTCP/Cobalt/InputProc/src/Transpose/mpi_node_list.log_prop
similarity index 100%
rename from RTCP/Cobalt/GPUProc/src/Station/mpi_node_list.log_prop
rename to RTCP/Cobalt/InputProc/src/Transpose/mpi_node_list.log_prop
diff --git a/RTCP/Cobalt/InputProc/src/ping_intl.sh b/RTCP/Cobalt/InputProc/src/ping_intl.sh
index a7bac2caee63d40d47f340bec7a269e83c8fa796..69d745a099b03466e0a0b23a52ff8561a41ec6cf 100755
--- a/RTCP/Cobalt/InputProc/src/ping_intl.sh
+++ b/RTCP/Cobalt/InputProc/src/ping_intl.sh
@@ -5,18 +5,32 @@ echo "Host  `hostname`"
 set -u
 #set -x
 
-HOSTNAME=`hostname`
-RSPCONNECTIONS=$LOFARROOT/etc/StaticMetaData/RSPConnections_Cobalt.dat
-
-# International stations have the name xx6xx.
-#
-# For each International Station VLAN, Cobalt has IP 10.x.x.50,
-# and we need to ping 10.x.x.1.
-SRCIPS=`
-  <$RSPCONNECTIONS fgrep $HOSTNAME |
-  grep -v "^#" |
+RSPCONNECTIONS=${LOFARROOT:-/opt/lofar}/etc/StaticMetaData/RSPConnections_Cobalt.dat
+
+# Get a list of my MAC addresses
+MYMACS=`cat /sys/class/net/*/address | sort | uniq`
+
+ILT_STATIONS_SENDING_TO_ME=`
+  for MAC in $MYMACS; do
+    # Select all stations going to one of my MAC addresses
+    fgrep -i $MAC $RSPCONNECTIONS |
+    # Avoid comments
+    grep -v "^#" |
+    # Select ILT stations only (name is xx6xx).
+    grep "^..6.. "
+  done
+`
+
+echo The following stations send to us:
+echo "$ILT_STATIONS_SENDING_TO_ME"
+echo ""
+
+# Construct IPs to ping, one or more per station
+RSPBOARD_IPS=`
+echo "$ILT_STATIONS_SENDING_TO_ME" |
   perl -ne '
-    if (/^..60?(..?) .* 10[.]([0-9]+)[.]([0-9]+)[.]1../) {
+    if (/^..60?(..?) .* 10[.]([0-9]+)[.]([0-9]+)[.]2../) {
+      # Parse our IP, and construct IP of first RSP board
       if ($3 == 1) {
         print "10.$2.$1.1\n"
       } else {
@@ -25,12 +39,12 @@ SRCIPS=`
     } '
 `
 
-echo "IPs   $SRCIPS"
+echo IPs of RSP boards to ping: $RSPBOARD_IPS
 
-for IP in $SRCIPS
+for IP in $RSPBOARD_IPS
 do
   # Ping this RSP board, but don't wait for an answer
-  ping -p 10fa -q -n -c 1 -w 1 $IP
+  ping -p 10fa -q -n -c 2 -i 0.5 -w 1 $IP
 done
 
 echo "End   `date`"
diff --git a/RTCP/Cobalt/InputProc/test/tDelays.cc b/RTCP/Cobalt/InputProc/test/tDelays.cc
index 5bb2cca2454b5da5fdecd80c81d78d13ac6037d3..e1414cb96353cb9d7aa5af9338bb6476be3aeb5c 100644
--- a/RTCP/Cobalt/InputProc/test/tDelays.cc
+++ b/RTCP/Cobalt/InputProc/test/tDelays.cc
@@ -26,6 +26,7 @@
 
 #include <Common/LofarLogger.h>
 #include <Stream/FixedBufferStream.h>
+#include <CoInterface/TimeFuncs.h>
 
 #include <InputProc/Delays/Delays.h>
 
@@ -131,6 +132,13 @@ int main()
 {
   INIT_LOGGER( "tDelays" );
 
+  // IERS table information
+  struct Delays::IERS_tablestats stats = Delays::get_IERS_tablestats();
+
+  LOG_INFO_STR("Using IERS table " << stats.realpath
+            << ", last entry is " << TimeDouble::toString(stats.last_entry_timestamp, false)
+            << ", table written on " << TimeDouble::toString(stats.last_fs_modification, false));
+
   return UnitTest::RunAllTests() > 0;
 }
 
diff --git a/RTCP/Cobalt/InputProc/test/tMPI.cc b/RTCP/Cobalt/InputProc/test/tMPI.cc
index b32c3d9a4dbe644c994ba8a1d4f0824bf1058717..188e5ee04830cbdacf658c7ef03053abb10eea02 100644
--- a/RTCP/Cobalt/InputProc/test/tMPI.cc
+++ b/RTCP/Cobalt/InputProc/test/tMPI.cc
@@ -31,7 +31,7 @@ using namespace LOFAR;
 using namespace LOFAR::Cobalt;
 using namespace std;
 
-const size_t BUFSIZE = 128 * 1024 * 1024;
+const size_t BUFSIZE = 1024 * 1024 * 1024;
 
 const size_t nrRuns = 10;
 
diff --git a/RTCP/Cobalt/InputProc/test/tPacketReader.cc b/RTCP/Cobalt/InputProc/test/tPacketReader.cc
index 3f5676bcdeafe53162582b0a61e0043f28529d92..10cb78fa03b9fb550756c8c2ac56efa9ec79e5f0 100644
--- a/RTCP/Cobalt/InputProc/test/tPacketReader.cc
+++ b/RTCP/Cobalt/InputProc/test/tPacketReader.cc
@@ -21,13 +21,18 @@
 #include <lofar_config.h>
 
 #include <string>
+#include <omp.h>
 
 #include <Common/LofarLogger.h>
 #include <Stream/FileStream.h>
+#include <Stream/SocketStream.h>
 
 #include <CoInterface/RSP.h>
+#include <CoInterface/OMPThread.h>
 #include <InputProc/Station/PacketReader.h>
 
+#include <UnitTest++.h>
+
 using namespace LOFAR;
 using namespace Cobalt;
 
@@ -57,11 +62,62 @@ void test(const std::string &filename, unsigned bitmode, unsigned nrPackets)
   }
 }
 
+TEST(16bit)
+{
+  test("tPacketReader.in_16bit", 16, 2);
+}
+
+TEST(8bit)
+{
+  test("tPacketReader.in_8bit",   8, 2);
+}
+
+TEST(recvmmsg_killable)
+{
+  SocketStream ss("localhost", 0, SocketStream::Protocol::UDP, SocketStream::Mode::Server, 0);
+  PacketReader reader("", ss);
+  bool success = false;
+
+  OMPThreadSet packetReaderThread("recvmmsg_killable");
+
+  OMPThread::init();
+
+  #pragma omp parallel sections num_threads(2)
+  {
+    #pragma omp section
+    {
+      try {
+        OMPThreadSet::ScopedRun sr(packetReaderThread);
+
+        vector<struct RSP> packets(1024);
+
+        // read packets -- will block as there is no sender
+        reader.readPackets(packets);
+      } catch(OMPThreadSet::CannotStartException &ex) {
+        LOG_ERROR_STR("Killed reading thread too early. Fix test.");
+      } catch(SystemCallException &ex) {
+        LOG_INFO_STR("Caught exception: " << ex.what());
+
+        if (ex.error == EINTR)
+          success = true;
+      }
+    }
+
+    #pragma omp section
+    {
+      sleep(1);
+
+      packetReaderThread.killAll();
+    }
+  }
+
+  CHECK(success);
+}
+
 int main()
 {
   INIT_LOGGER("tPacketReader");
 
-  test("tPacketReader.in_16bit", 16, 2);
-  test("tPacketReader.in_8bit",   8, 2);
+  return UnitTest::RunAllTests() > 0;
 }
 
diff --git a/RTCP/Cobalt/OpenCL_FFT/CMakeLists.txt b/RTCP/Cobalt/OpenCL_FFT/CMakeLists.txt
deleted file mode 100644
index 7cce981f91c6fc4d9350e1f109a7a7f5fbe7fd26..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# $Id$
-
-lofar_package(OpenCL_FFT 1.0)
-
-if(USE_OPENCL)
-  include(LofarFindPackage)
-  lofar_find_package(OpenCL REQUIRED)
-  add_subdirectory(src)
-endif()
diff --git a/RTCP/Cobalt/OpenCL_FFT/doc/package.dox b/RTCP/Cobalt/OpenCL_FFT/doc/package.dox
deleted file mode 100644
index dceac79a6589c784f0c4ef6a2127c9dbdf81651a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/doc/package.dox
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
-
-\ingroup Cobalt
-\defgroup OpenCL_FFT OpenCL FFT
-
-Apple's FFT library for OpenCL
-
-*/
-
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/AccelerateError.pdf b/RTCP/Cobalt/OpenCL_FFT/src/AccelerateError.pdf
deleted file mode 100644
index 55cd832de7c8b8a1e4ce0e1a640c0d659480b69e..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/OpenCL_FFT/src/AccelerateError.pdf and /dev/null differ
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/CMakeLists.txt b/RTCP/Cobalt/OpenCL_FFT/src/CMakeLists.txt
deleted file mode 100644
index e683168d04b311f7b206f15c7042a41464ab00f0..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-# $Id: CMakeLists.txt 17003 2011-01-06 08:54:59Z romein $
-
-include(LofarPackageVersion)
-
-# Create symbolic link to include directory.
-execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
-  ${CMAKE_CURRENT_SOURCE_DIR}
-  ${CMAKE_BINARY_DIR}/include/${PACKAGE_NAME})
-
-set(OpenCL_FFT_LIB_SRCS
-  #Package__Version.cc
-  fft_execute.cpp
-  fft_kernelstring.cpp
-  fft_setup.cpp)
-
-lofar_add_library(opencl_fft ${OpenCL_FFT_LIB_SRCS})
-
-#lofar_add_bin_program(versionopencl_fft versionopencl_fft.cc) #FIXME
-
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/Error.pdf b/RTCP/Cobalt/OpenCL_FFT/src/Error.pdf
deleted file mode 100644
index 1d252a9c1a0acdfac432caa11e11d705e9d8acc0..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/OpenCL_FFT/src/Error.pdf and /dev/null differ
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/Makefile b/RTCP/Cobalt/OpenCL_FFT/src/Makefile
deleted file mode 100644
index 3a25689ec2b15f91e630c4d731748f42f5dc41c2..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-SRCS = fft_execute.cpp fft_setup.cpp fft_kernelstring.cpp
-HEADERS = procs.h fft_internal.h fft_base_kernels.h clFFT.h
-LIBRARY = libOpenCL_FFT.a
-COMPILERFLAGS = -c -g -Wall -Werror -O3 -I..
-CFLAGS = $(COMPILERFLAGS) ${RC_CFLAGS} ${USE_ATF}
-CC = g++
-
-OBJECTS = fft_execute.o fft_setup.o fft_kernelstring.o
-TARGETOBJECT =
-all: $(LIBRARY)
-
-$(OBJECTS): $(SRCS) $(HEADERS)
-	$(CC) $(CFLAGS) $(SRCS)
-
-$(LIBRARY): $(OBJECTS)
-	ar r $@ $^
-
-clean:
-	rm -f $(TARGET) $(OBJECTS)
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/Makefile.not b/RTCP/Cobalt/OpenCL_FFT/src/Makefile.not
deleted file mode 100644
index 1c65cd84a7c59a494d0891ee9ac7443c1dbcc463..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/Makefile.not
+++ /dev/null
@@ -1,28 +0,0 @@
-ifdef BUILD_WITH_ATF
-ATF = -framework ATF
-USE_ATF = -DUSE_ATF
-endif
-
-SRCS = fft_execute.cpp fft_setup.cpp main.cpp fft_kernelstring.cpp
-HEADERS = procs.h fft_internal.h fft_base_kernels.h clFFT.h
-TARGET = test_clFFT
-COMPILERFLAGS = -c -g -Wall -Werror -O3
-CFLAGS = $(COMPILERFLAGS) ${RC_CFLAGS} ${USE_ATF}
-CC = g++
-LIBRARIES = -framework OpenCL -framework Accelerate -framework AppKit ${RC_CFLAGS} ${ATF}
-
-OBJECTS = fft_execute.o fft_setup.o main.o fft_kernelstring.o
-TARGETOBJECT =
-all: $(TARGET)
-
-$(OBJECTS): $(SRCS) $(HEADERS)
-	$(CC) $(CFLAGS) $(SRCS)
-
-$(TARGET): $(OBJECTS)
-	$(CC) $(OBJECTS) -o $@ $(LIBRARIES)
-
-clean:
-	rm -f $(TARGET) $(OBJECTS)
-
-.DEFAULT:
-	@echo The target \"$@\" does not exist in Makefile.
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/OpenCLError.pdf b/RTCP/Cobalt/OpenCL_FFT/src/OpenCLError.pdf
deleted file mode 100644
index c42309ff5196000bf9c83f5a7347564312db5a94..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/OpenCL_FFT/src/OpenCLError.pdf and /dev/null differ
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/OpenCL_FFT.xcodeproj/project.pbxproj b/RTCP/Cobalt/OpenCL_FFT/src/OpenCL_FFT.xcodeproj/project.pbxproj
deleted file mode 100644
index 5474161f048eb2b61197875e1ff642b9289aad9e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/OpenCL_FFT.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,237 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 45;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		BE94A7B3108AB33000C1AD87 /* fft_kernelstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE94A7B2108AB33000C1AD87 /* fft_kernelstring.cpp */; };
-		BE94A83D108AF8A100C1AD87 /* fft_setup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE94A83C108AF8A100C1AD87 /* fft_setup.cpp */; };
-		BEE709AF1097B8DD0017B8A5 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEE709AE1097B8DD0017B8A5 /* main.cpp */; };
-		BEEA39EE108BD89D00729F49 /* fft_execute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEEA39ED108BD89D00729F49 /* fft_execute.cpp */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		8DD76F690486A84900D96B5E /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 8;
-			dstPath = /usr/share/man/man1/;
-			dstSubfolderSpec = 0;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 1;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		8DD76F6C0486A84900D96B5E /* OpenCL_FFT */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = OpenCL_FFT; sourceTree = BUILT_PRODUCTS_DIR; };
-		BE94A7B2108AB33000C1AD87 /* fft_kernelstring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fft_kernelstring.cpp; sourceTree = "<group>"; };
-		BE94A7CB108AB8BF00C1AD87 /* clFFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = clFFT.h; sourceTree = "<group>"; };
-		BE94A7D4108ABFF000C1AD87 /* fft_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft_internal.h; sourceTree = "<group>"; };
-		BE94A83C108AF8A100C1AD87 /* fft_setup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fft_setup.cpp; sourceTree = "<group>"; };
-		BE9DE3E010923A4E00940D66 /* fft_base_kernels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft_base_kernels.h; sourceTree = "<group>"; };
-		BE9DE4741092732C00940D66 /* param.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = param.txt; sourceTree = "<group>"; };
-		BE9DE4761092732C00940D66 /* procs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = procs.h; sourceTree = "<group>"; };
-		BEE709AE1097B8DD0017B8A5 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
-		BEEA39ED108BD89D00729F49 /* fft_execute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fft_execute.cpp; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		8DD76F660486A84900D96B5E /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		08FB7794FE84155DC02AAC07 /* OpenCL_FFT */ = {
-			isa = PBXGroup;
-			children = (
-				BE9DE4741092732C00940D66 /* param.txt */,
-				08FB7795FE84155DC02AAC07 /* Source */,
-				C6859E8C029090F304C91782 /* Documentation */,
-				1AB674ADFE9D54B511CA2CBB /* Products */,
-			);
-			name = OpenCL_FFT;
-			sourceTree = "<group>";
-		};
-		08FB7795FE84155DC02AAC07 /* Source */ = {
-			isa = PBXGroup;
-			children = (
-				BE9DE4761092732C00940D66 /* procs.h */,
-				BEEA39ED108BD89D00729F49 /* fft_execute.cpp */,
-				BE94A83C108AF8A100C1AD87 /* fft_setup.cpp */,
-				BEE709AE1097B8DD0017B8A5 /* main.cpp */,
-				BE94A7D4108ABFF000C1AD87 /* fft_internal.h */,
-				BE9DE3E010923A4E00940D66 /* fft_base_kernels.h */,
-				BE94A7CB108AB8BF00C1AD87 /* clFFT.h */,
-				BE94A7B2108AB33000C1AD87 /* fft_kernelstring.cpp */,
-			);
-			name = Source;
-			sourceTree = "<group>";
-		};
-		1AB674ADFE9D54B511CA2CBB /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				8DD76F6C0486A84900D96B5E /* OpenCL_FFT */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		C6859E8C029090F304C91782 /* Documentation */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			name = Documentation;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		8DD76F620486A84900D96B5E /* OpenCL_FFT */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "OpenCL_FFT" */;
-			buildPhases = (
-				8DD76F640486A84900D96B5E /* Sources */,
-				8DD76F660486A84900D96B5E /* Frameworks */,
-				8DD76F690486A84900D96B5E /* CopyFiles */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = OpenCL_FFT;
-			productInstallPath = "$(HOME)/bin";
-			productName = OpenCL_FFT;
-			productReference = 8DD76F6C0486A84900D96B5E /* OpenCL_FFT */;
-			productType = "com.apple.product-type.tool";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		08FB7793FE84155DC02AAC07 /* Project object */ = {
-			isa = PBXProject;
-			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "OpenCL_FFT" */;
-			compatibilityVersion = "Xcode 3.1";
-			hasScannedForEncodings = 1;
-			mainGroup = 08FB7794FE84155DC02AAC07 /* OpenCL_FFT */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				8DD76F620486A84900D96B5E /* OpenCL_FFT */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXSourcesBuildPhase section */
-		8DD76F640486A84900D96B5E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				BE94A7B3108AB33000C1AD87 /* fft_kernelstring.cpp in Sources */,
-				BE94A83D108AF8A100C1AD87 /* fft_setup.cpp in Sources */,
-				BEEA39EE108BD89D00729F49 /* fft_execute.cpp in Sources */,
-				BEE709AF1097B8DD0017B8A5 /* main.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		1DEB923208733DC60010E9CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"_GLIBCXX_DEBUG=1",
-					"_GLIBCXX_DEBUG_PEDANTIC=1",
-				);
-				INSTALL_PATH = /usr/local/bin;
-				PRODUCT_NAME = OpenCL_FFT;
-			};
-			name = Debug;
-		};
-		1DEB923308733DC60010E9CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				INSTALL_PATH = /usr/local/bin;
-				PRODUCT_NAME = OpenCL_FFT;
-			};
-			name = Release;
-		};
-		1DEB923608733DC60010E9CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				OTHER_LDFLAGS = (
-					"-framework",
-					OpenCL,
-					"-framework",
-					Accelerate,
-				);
-				PREBINDING = NO;
-				SDKROOT = "";
-			};
-			name = Debug;
-		};
-		1DEB923708733DC60010E9CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				OTHER_LDFLAGS = (
-					"-framework",
-					OpenCL,
-					"-framework",
-					Accelerate,
-				);
-				PREBINDING = NO;
-				SDKROOT = "";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "OpenCL_FFT" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB923208733DC60010E9CD /* Debug */,
-				1DEB923308733DC60010E9CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "OpenCL_FFT" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB923608733DC60010E9CD /* Debug */,
-				1DEB923708733DC60010E9CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
-}
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/ReadMe.txt b/RTCP/Cobalt/OpenCL_FFT/src/ReadMe.txt
deleted file mode 100644
index b90455fe13d5f7654f4d651fa81bf1dfc51181cd..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/ReadMe.txt
+++ /dev/null
@@ -1 +0,0 @@
-### OpenCL FFT (Fast Fourier Transform) ###

===========================================================================
DESCRIPTION:

This example shows how OpenCL can be used to compute FFT. Algorithm implemented
is described in the following references

1) Fitting FFT onto the G80 Architecture
   by Vasily Volkov and Brian Kazian
   University of California, Berkeley, May 19, 2008
   http://www.cs.berkeley.edu/~kubitron/courses/cs258-S08/projects/reports/project6_report.pdf
   
2) High Performance Discrete Fourier Tansforms on Graphics Processors
   by Naga K. Govindaraju, Brandon Lloyd, Yuri Dotsenko, Burton Smith, and John Manferdelli
   Supercomputing 2008.
   http://portal.acm.org/citation.cfm?id=1413373
   
Current version only supports power of two transform sizes however it should be straight forward
to extend the sample to non-power of two but power of base primes like 3, 5, 7. 

Current version supports 1D, 2D, 3D batched transforms. 

Current version supports both in-place and out-of-place transforms.

Current version supports both forward and inverse transform.

Current version supports both plannar and interleaved data format.

Current version only supports complex-to-complex transform. For real 
transform, one can use plannar data format with imaginary array mem set to zero. 

Current version only supports transform on GPU device. Accelerate framework can be used on CPU.

Current version supports sizes that fits in device global memory although "Twist Kernel" is 
included in fft plan if user wants to virtualize (implement sizes larger than what can fit 
in GPU global memory).

Users can dump all the kernels and global, local dimensions with which these kernels are run 
so that they can not only inspect/modify these kernels and understand how FFT is being 
computed on GPU, but also create their own stand along app for executing FFT of size of
their interest.

For any given signal size n, sample crates a clFFT_Plan, that encapsulates the kernel string, 
associated compiled cl_program. Note that kernel string is generated at runtime based on 
input size, dimension (1D, 2D, 3D) and data format (plannar or interleaved) along with some 
device depended parameters encapsulated in the clFFT_Plan. These device dependent parameters 
are set such that kernel is generated for high performance meeting following requirements

   1) Access pattern to global memory (of-chip DRAM) is such that memory transaction 
      coalesceing is achieved if device supports it thus achieving full bandwidth
   2) Local shuffles (matrix transposes or data sharing among work items of a workgroup)
      are band conflict free if local memory is banked.
   3) Kernel is fully optimized for memory hierarcy meaning that it uses GPU's large 
      vector register file, which is fastest, first before reverting to local memory 
      for data sharing among work items to save global DRAM bandwidth and only then 
      reverts to global memory if signal size is such that transform cannnot be computed
      by singal workgroup and thus require global communation among work groups.
      
Users can modify these parameters to get best performance on their particular GPU.     

Users how really want to understand the details of implementation are highly encouraged 
to read above two references but here is a high level description.
At a higher the algorithm decomposes signal of length N into factors as 

                   N = N1 x N2 x N3 x N4 x .... Nn
                   
where the factors (N1, ....., Nn) are sorted such that N1 is largest. It thus decomposes 
N into n-dimensional matrix. It than applies fft along each dimension, multiply by twiddle
factors and transposes the matrix as follow 

                      N2 x N3 x N4 x ............ x Nn x N1   (fft along N1 and transpose)
                      N3 x N4 x N5 x ....    x Nn x N2 x N1   (fft along N2 and transpose)
                      N4 x N5 x N6 x .. x Nn x N3 x N2 x N1   (fft along N3 and transpose)
                      
                      ......
                     Nn x Nn-1 x Nn-2 x ........ N3 x N2 x N1 (fft along Nn and transpose)
                     
 Decomposition is such that algorithm is fully optimized for memory hierarchy. N1 (largest
 base radix) is constrained by maximum register usage by work item (largest size of in-register 
 fft) and product N2 x N3 .... x Nn determine the maximum size of work group which is constrained
 by local memory used by work group (local memory is used to share data among work items i.e.
 local transposes). Togather these two parameters determine the maximum size fft that can be 
 computed by just using register file and local memory without reverting to global memory 
 for transpose (i.e. these sizes do not require global transpose and thus no inter work group 
 communication). However, for larger sizes, global communication among workgroup is required
 and multiple kernel launches are needed depending on the size and the base radix used. 
 
 For details of parameters user can play with, please see the comments in fft_internal.h
 and kernel_string.cpp, which has the main kernel generator functions ... especially
 see the comments preceeding function getRadixArray and getGlobalRadixInfo.
 User can adjust these parameters you achieve best performance on his device. 

Description of API Calls
=========================
clFFT_Plan clFFT_CreatePlan( cl_context context, clFFT_Dim3 n, clFFT_Dimension dim, clFFT_DataFormat dataFormat, cl_int *error_code );

This function creates a plan and returns a handle to it for use with other functions below. 
context    context in which things are happening
n          n.x, n.y, n.z contain the dimension of signal (length along each dimension)
dim        much be one of clFFT_1D, clFFT_2D, clFFT_3D for one, two or three dimensional fft
dataFormat much be either clFFT_InterleavedComplexFormat or clFFT_SplitComplexFormat for either interleaved or plannar data (real and imaginary)
error_code pointer for getting error back in plan creation. In case of error NULL plan is returned
==========================
void clFFT_DestroyPlan( clFFT_Plan plan );

Function to release/free resources
==========================
cl_int clFFT_ExecuteInterleaved( cl_command_queue queue, clFFT_Plan plan, cl_int batchSize, clFFT_Direction dir, 
								 cl_mem data_in, cl_mem data_out,
								 cl_int num_events, cl_event *event_list, cl_event *event );
								 
Function for interleaved fft execution.
queue      command queue for the device on which fft needs to be executed. It should be present in the context for this plan was created
plan       fft plan that was created using clFFT_CreatePlan
batchSize  size of the batch for batched transform
dir        much be either clFFT_Forward or clFFT_Inverse for forward or inverse transform
data_in    input data
data_out   output data. For in-place transform, pass same mem object for both data_in and data_out
num_events, event_list and event are for future use for letting fft fit in other CL based application pipeline through event dependency.
Not implemented in this version yet so these parameters are redundant right now. Just pass NULL.

=========================
cl_int clFFT_ExecutePlannar( cl_command_queue queue, clFFT_Plan plan, cl_int batchSize, clFFT_Direction dir, 
							 cl_mem data_in_real, cl_mem data_in_imag, cl_mem data_out_real, cl_mem data_out_imag,
							 cl_int num_events, cl_event *event_list, cl_event *event );
							 
Same as above but for plannar data type.							 
=========================
cl_int clFFT_1DTwistInterleaved( clFFT_Plan plan, cl_mem mem, size_t numRows, size_t numCols, size_t startRow, clFFT_Direction dir );

Function for applying twist (twiddle factor multiplication) for virtualizing computation of very large ffts that cannot fit into global
memory at once but can be decomposed into many global memory fitting ffts followed by twiddle multiplication (twist) followed by transpose
followed by again many global memory fitting ffts.

=========================
cl_int clFFT_1DTwistPlanner( clFFT_Plan plan, cl_mem mem_real, cl_mem mem_imag, size_t numRows, size_t numCols, size_t startRow, clFFT_Direction dir );

Same fucntion as above but for plannar data
=========================	

void clFFT_DumpPlan( clFFT_Plan plan, FILE *file);	

Function to dump the plan. Passing stdout to file prints out the plan to standard out. It prints out
the kernel string and local, global dimension with which each kernel is executed in this plan.
						
==================================================================================
IMPORTANT NOTE ON PERFORMANCE:

Currently there are a few known performance issues (bug) that this sample has discovered
in rumtime and code generation that are being actively fixed. Hence, for sizes >= 1024, 
performance is much below the expected peak for any particular size. However, we have 
internally verified that once these bugs are fixed, performance should be on par with 
expected peak. Note that these are bugs in OpenCL runtime/compiler and not in this
sample.

===========================================================================
BUILD REQUIREMENTS:

Mac OS X v10.6 or later

If you are running in Xcode, be sure to pass file name "param.txt". You can do that
by double clicking OpenCL_FFT under executable and then click on Argument tab and 
add ./../../param.txt under "Arguments to be passed on launch" section. 

===========================================================================
RUNTIME REQUIREMENTS:

. Mac OS X v10.6 or later with OpenCL 1.0
. For good performance, device should support local memory. 
  FFT performance critically depend on how efficiently local shuffles 
  (matrix transposes) using local memory to reduce external DRAM bandwidth
  requirement.

===========================================================================
PACKAGING LIST:

AccelerateError.pdf
clFFT.h
Error.pdf
fft_base_kernels.h
fft_execute.cpp
fft_internal.h
fft_kernelstring.cpp
fft_setup.cpp
main.cpp
Makefile
OpenCL_FFT.xcodeproj
OpenCLError.pdf
param.txt
procs.h
ReadMe.txt

===========================================================================
CHANGES FROM PREVIOUS VERSIONS:

Version 1.0
- First version.

===========================================================================
Copyright (C) 2008 Apple Inc. All rights reserved.
\ No newline at end of file
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/clFFT.h b/RTCP/Cobalt/OpenCL_FFT/src/clFFT.h
deleted file mode 100644
index e893d95393a63af2a825778e3654b84c3ce62c4f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/clFFT.h
+++ /dev/null
@@ -1,129 +0,0 @@
-
-//
-// File:       clFFT.h
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef __CLFFT_H
-#define __CLFFT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <CL/cl.h>
-#include <stdio.h>
-
-// XForm type
-typedef enum 
-{
-	clFFT_Forward	= 	-1,
-	clFFT_Inverse	= 	 1
-	
-}clFFT_Direction;
-
-// XForm dimension
-typedef enum
-{
-	clFFT_1D	= 0,
-	clFFT_2D	= 1,
-	clFFT_3D	= 3
-	
-}clFFT_Dimension;
-
-// XForm Data type
-typedef enum
-{
-	clFFT_SplitComplexFormat       = 0,
-	clFFT_InterleavedComplexFormat = 1
-}clFFT_DataFormat;
-
-typedef struct
-{
-	unsigned int x;
-	unsigned int y;
-	unsigned int z;
-}clFFT_Dim3;	
-	
-typedef struct
-{
-	float *real;
-	float *imag;
-} clFFT_SplitComplex;
-
-typedef struct
-{
-	float real;
-	float imag;
-}clFFT_Complex;
-
-typedef void* clFFT_Plan;	
-
-clFFT_Plan clFFT_CreatePlan( cl_context context, clFFT_Dim3 n, clFFT_Dimension dim, clFFT_DataFormat dataFormat, cl_int *error_code );
-
-void clFFT_DestroyPlan( clFFT_Plan plan );
-
-cl_int clFFT_ExecuteInterleaved( cl_command_queue queue, clFFT_Plan plan, cl_int batchSize, clFFT_Direction dir, 
-								 cl_mem data_in, cl_mem data_out,
-								 cl_int num_events, cl_event *event_list, cl_event *event );
-
-cl_int clFFT_ExecutePlannar( cl_command_queue queue, clFFT_Plan plan, cl_int batchSize, clFFT_Direction dir, 
-							 cl_mem data_in_real, cl_mem data_in_imag, cl_mem data_out_real, cl_mem data_out_imag,
-							 cl_int num_events, cl_event *event_list, cl_event *event );
-
-cl_int clFFT_1DTwistInterleaved(clFFT_Plan Plan, cl_command_queue queue, cl_mem array, 
-						        size_t numRows, size_t numCols, size_t startRow, size_t rowsToProcess, clFFT_Direction dir);
-	
-
-cl_int clFFT_1DTwistPlannar(clFFT_Plan Plan, cl_command_queue queue, cl_mem array_real, cl_mem array_imag, 
-					        size_t numRows, size_t numCols, size_t startRow, size_t rowsToProcess, clFFT_Direction dir);
-	
-void clFFT_DumpPlan( clFFT_Plan plan, FILE *file);	
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif 
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/fft_base_kernels.h b/RTCP/Cobalt/OpenCL_FFT/src/fft_base_kernels.h
deleted file mode 100644
index 101795697f55e125e4fbafa8757aef5de033fad6..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/fft_base_kernels.h
+++ /dev/null
@@ -1,277 +0,0 @@
-
-//
-// File:       fft_base_kernels.h
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef __CL_FFT_BASE_KERNELS_
-#define __CL_FFT_BASE_KERNELS_
-
-#include <string>
-
-using namespace std;
-
-static string baseKernels = string(
-                          "#ifndef M_PI\n"
-						  "#define M_PI 0x1.921fb54442d18p+1\n"
-						  "#endif\n"
-						  "#define complexMul(a,b) ((float2)(mad(-(a).y, (b).y, (a).x * (b).x), mad((a).y, (b).x, (a).x * (b).y)))\n"
-						  "#define conj(a) ((float2)((a).x, -(a).y))\n"
-						  "#define conjTransp(a) ((float2)(-(a).y, (a).x))\n"		   
-						  "\n"
-						  "#define fftKernel2(a,dir) \\\n"
-						  "{ \\\n"
-						  "    float2 c = (a)[0];    \\\n"
-						  "    (a)[0] = c + (a)[1];  \\\n"
-						  "    (a)[1] = c - (a)[1];  \\\n"
-						  "}\n"
-						  "\n"						  
-						  "#define fftKernel2S(d1,d2,dir) \\\n"
-						  "{ \\\n"
-						  "    float2 c = (d1);   \\\n"
-						  "    (d1) = c + (d2);   \\\n"
-						  "    (d2) = c - (d2);   \\\n"
-						  "}\n"
-						  "\n"						  
-						  "#define fftKernel4(a,dir) \\\n"
-						  "{ \\\n"
-						  "    fftKernel2S((a)[0], (a)[2], dir); \\\n"
-						  "    fftKernel2S((a)[1], (a)[3], dir); \\\n"
-						  "    fftKernel2S((a)[0], (a)[1], dir); \\\n"
-						  "    (a)[3] = (float2)(dir)*(conjTransp((a)[3])); \\\n"
-						  "    fftKernel2S((a)[2], (a)[3], dir); \\\n"
-						  "    float2 c = (a)[1]; \\\n"
-						  "    (a)[1] = (a)[2]; \\\n"
-						  "    (a)[2] = c; \\\n"
-						  "}\n"
-						  "\n"						  
-						  "#define fftKernel4s(a0,a1,a2,a3,dir) \\\n"
-						  "{ \\\n"
-						  "    fftKernel2S((a0), (a2), dir); \\\n"
-						  "    fftKernel2S((a1), (a3), dir); \\\n"
-						  "    fftKernel2S((a0), (a1), dir); \\\n"
-						  "    (a3) = (float2)(dir)*(conjTransp((a3))); \\\n"
-						  "    fftKernel2S((a2), (a3), dir); \\\n"
-						  "    float2 c = (a1); \\\n"
-						  "    (a1) = (a2); \\\n"
-						  "    (a2) = c; \\\n" 
-						  "}\n"
-						  "\n"						  
-						  "#define bitreverse8(a) \\\n"
-						  "{ \\\n"
-						  "    float2 c; \\\n"
-						  "    c = (a)[1]; \\\n"
-						  "    (a)[1] = (a)[4]; \\\n"
-						  "    (a)[4] = c; \\\n"
-						  "    c = (a)[3]; \\\n"
-						  "    (a)[3] = (a)[6]; \\\n"
-						  "    (a)[6] = c; \\\n"
-						  "}\n"
-						  "\n"						  
-						  "#define fftKernel8(a,dir) \\\n"
-						  "{ \\\n"
-						  "	const float2 w1  = (float2)(0x1.6a09e6p-1f,  dir*0x1.6a09e6p-1f);  \\\n"
-						  "	const float2 w3  = (float2)(-0x1.6a09e6p-1f, dir*0x1.6a09e6p-1f);  \\\n"
-						  "	float2 c; \\\n"
-						  "	fftKernel2S((a)[0], (a)[4], dir); \\\n"
-						  "	fftKernel2S((a)[1], (a)[5], dir); \\\n"
-						  "	fftKernel2S((a)[2], (a)[6], dir); \\\n"
-						  "	fftKernel2S((a)[3], (a)[7], dir); \\\n"
-						  "	(a)[5] = complexMul(w1, (a)[5]); \\\n"
-						  "	(a)[6] = (float2)(dir)*(conjTransp((a)[6])); \\\n"
-						  "	(a)[7] = complexMul(w3, (a)[7]); \\\n"
-						  "	fftKernel2S((a)[0], (a)[2], dir); \\\n"
-						  "	fftKernel2S((a)[1], (a)[3], dir); \\\n"
-						  "	fftKernel2S((a)[4], (a)[6], dir); \\\n"
-						  "	fftKernel2S((a)[5], (a)[7], dir); \\\n"
-						  "	(a)[3] = (float2)(dir)*(conjTransp((a)[3])); \\\n"
-						  "	(a)[7] = (float2)(dir)*(conjTransp((a)[7])); \\\n"
-						  "	fftKernel2S((a)[0], (a)[1], dir); \\\n"
-						  "	fftKernel2S((a)[2], (a)[3], dir); \\\n"
-						  "	fftKernel2S((a)[4], (a)[5], dir); \\\n"
-						  "	fftKernel2S((a)[6], (a)[7], dir); \\\n"
-						  "	bitreverse8((a)); \\\n"
-						  "}\n"
-						  "\n"						  
-						  "#define bitreverse4x4(a) \\\n"
-						  "{ \\\n"
-						  "	float2 c; \\\n"
-						  "	c = (a)[1];  (a)[1]  = (a)[4];  (a)[4]  = c; \\\n"
-						  "	c = (a)[2];  (a)[2]  = (a)[8];  (a)[8]  = c; \\\n"
-						  "	c = (a)[3];  (a)[3]  = (a)[12]; (a)[12] = c; \\\n"
-						  "	c = (a)[6];  (a)[6]  = (a)[9];  (a)[9]  = c; \\\n"
-						  "	c = (a)[7];  (a)[7]  = (a)[13]; (a)[13] = c; \\\n"
-						  "	c = (a)[11]; (a)[11] = (a)[14]; (a)[14] = c; \\\n"
-						  "}\n"
-						  "\n"						  
-						  "#define fftKernel16(a,dir) \\\n"
-						  "{ \\\n"
-						  "    const float w0 = 0x1.d906bcp-1f; \\\n"
-						  "    const float w1 = 0x1.87de2ap-2f; \\\n"
-						  "    const float w2 = 0x1.6a09e6p-1f; \\\n"
-						  "    fftKernel4s((a)[0], (a)[4], (a)[8],  (a)[12], dir); \\\n"
-						  "    fftKernel4s((a)[1], (a)[5], (a)[9],  (a)[13], dir); \\\n"
-						  "    fftKernel4s((a)[2], (a)[6], (a)[10], (a)[14], dir); \\\n"
-						  "    fftKernel4s((a)[3], (a)[7], (a)[11], (a)[15], dir); \\\n"
-						  "    (a)[5]  = complexMul((a)[5], (float2)(w0, dir*w1)); \\\n"
-						  "    (a)[6]  = complexMul((a)[6], (float2)(w2, dir*w2)); \\\n"
-						  "    (a)[7]  = complexMul((a)[7], (float2)(w1, dir*w0)); \\\n"
-						  "    (a)[9]  = complexMul((a)[9], (float2)(w2, dir*w2)); \\\n"
-						  "    (a)[10] = (float2)(dir)*(conjTransp((a)[10])); \\\n"
-						  "    (a)[11] = complexMul((a)[11], (float2)(-w2, dir*w2)); \\\n"
-						  "    (a)[13] = complexMul((a)[13], (float2)(w1, dir*w0)); \\\n"
-						  "    (a)[14] = complexMul((a)[14], (float2)(-w2, dir*w2)); \\\n"
-						  "    (a)[15] = complexMul((a)[15], (float2)(-w0, dir*-w1)); \\\n"
-						  "    fftKernel4((a), dir); \\\n"
-						  "    fftKernel4((a) + 4, dir); \\\n"
-						  "    fftKernel4((a) + 8, dir); \\\n"
-						  "    fftKernel4((a) + 12, dir); \\\n"
-						  "    bitreverse4x4((a)); \\\n"
-						  "}\n"
-						  "\n"						  
-						  "#define bitreverse32(a) \\\n"
-						  "{ \\\n"
-						  "    float2 c1, c2; \\\n"
-						  "    c1 = (a)[2];   (a)[2] = (a)[1];   c2 = (a)[4];   (a)[4] = c1;   c1 = (a)[8];   (a)[8] = c2;    c2 = (a)[16];  (a)[16] = c1;   (a)[1] = c2; \\\n"
-						  "    c1 = (a)[6];   (a)[6] = (a)[3];   c2 = (a)[12];  (a)[12] = c1;  c1 = (a)[24];  (a)[24] = c2;   c2 = (a)[17];  (a)[17] = c1;   (a)[3] = c2; \\\n"
-						  "    c1 = (a)[10];  (a)[10] = (a)[5];  c2 = (a)[20];  (a)[20] = c1;  c1 = (a)[9];   (a)[9] = c2;    c2 = (a)[18];  (a)[18] = c1;   (a)[5] = c2; \\\n"
-						  "    c1 = (a)[14];  (a)[14] = (a)[7];  c2 = (a)[28];  (a)[28] = c1;  c1 = (a)[25];  (a)[25] = c2;   c2 = (a)[19];  (a)[19] = c1;   (a)[7] = c2; \\\n"
-						  "    c1 = (a)[22];  (a)[22] = (a)[11]; c2 = (a)[13];  (a)[13] = c1;  c1 = (a)[26];  (a)[26] = c2;   c2 = (a)[21];  (a)[21] = c1;   (a)[11] = c2; \\\n"
-						  "    c1 = (a)[30];  (a)[30] = (a)[15]; c2 = (a)[29];  (a)[29] = c1;  c1 = (a)[27];  (a)[27] = c2;   c2 = (a)[23];  (a)[23] = c1;   (a)[15] = c2; \\\n"
-						  "}\n"
-						  "\n"						  
-						  "#define fftKernel32(a,dir) \\\n"
-						  "{ \\\n"
-						  "    fftKernel2S((a)[0],  (a)[16], dir); \\\n"
-						  "    fftKernel2S((a)[1],  (a)[17], dir); \\\n"
-						  "    fftKernel2S((a)[2],  (a)[18], dir); \\\n"
-						  "    fftKernel2S((a)[3],  (a)[19], dir); \\\n"
-						  "    fftKernel2S((a)[4],  (a)[20], dir); \\\n"
-						  "    fftKernel2S((a)[5],  (a)[21], dir); \\\n"
-						  "    fftKernel2S((a)[6],  (a)[22], dir); \\\n"
-						  "    fftKernel2S((a)[7],  (a)[23], dir); \\\n"
-						  "    fftKernel2S((a)[8],  (a)[24], dir); \\\n"
-						  "    fftKernel2S((a)[9],  (a)[25], dir); \\\n"
-						  "    fftKernel2S((a)[10], (a)[26], dir); \\\n"
-						  "    fftKernel2S((a)[11], (a)[27], dir); \\\n"
-						  "    fftKernel2S((a)[12], (a)[28], dir); \\\n"
-						  "    fftKernel2S((a)[13], (a)[29], dir); \\\n"
-						  "    fftKernel2S((a)[14], (a)[30], dir); \\\n"
-						  "    fftKernel2S((a)[15], (a)[31], dir); \\\n"
-						  "    (a)[17] = complexMul((a)[17], (float2)(0x1.f6297cp-1f, dir*0x1.8f8b84p-3f)); \\\n"
-						  "    (a)[18] = complexMul((a)[18], (float2)(0x1.d906bcp-1f, dir*0x1.87de2ap-2f)); \\\n"
-						  "    (a)[19] = complexMul((a)[19], (float2)(0x1.a9b662p-1f, dir*0x1.1c73b4p-1f)); \\\n"
-						  "    (a)[20] = complexMul((a)[20], (float2)(0x1.6a09e6p-1f, dir*0x1.6a09e6p-1f)); \\\n"
-						  "    (a)[21] = complexMul((a)[21], (float2)(0x1.1c73b4p-1f, dir*0x1.a9b662p-1f)); \\\n"
-						  "    (a)[22] = complexMul((a)[22], (float2)(0x1.87de2ap-2f, dir*0x1.d906bcp-1f)); \\\n"
-						  "    (a)[23] = complexMul((a)[23], (float2)(0x1.8f8b84p-3f, dir*0x1.f6297cp-1f)); \\\n"
-						  "    (a)[24] = complexMul((a)[24], (float2)(0x0p+0f, dir*0x1p+0f)); \\\n"
-						  "    (a)[25] = complexMul((a)[25], (float2)(-0x1.8f8b84p-3f, dir*0x1.f6297cp-1f)); \\\n"
-						  "    (a)[26] = complexMul((a)[26], (float2)(-0x1.87de2ap-2f, dir*0x1.d906bcp-1f)); \\\n"
-						  "    (a)[27] = complexMul((a)[27], (float2)(-0x1.1c73b4p-1f, dir*0x1.a9b662p-1f)); \\\n"
-						  "    (a)[28] = complexMul((a)[28], (float2)(-0x1.6a09e6p-1f, dir*0x1.6a09e6p-1f)); \\\n"
-						  "    (a)[29] = complexMul((a)[29], (float2)(-0x1.a9b662p-1f, dir*0x1.1c73b4p-1f)); \\\n"
-						  "    (a)[30] = complexMul((a)[30], (float2)(-0x1.d906bcp-1f, dir*0x1.87de2ap-2f)); \\\n"
-						  "    (a)[31] = complexMul((a)[31], (float2)(-0x1.f6297cp-1f, dir*0x1.8f8b84p-3f)); \\\n"
-						  "    fftKernel16((a), dir); \\\n"
-						  "    fftKernel16((a) + 16, dir); \\\n"
-						  "    bitreverse32((a)); \\\n"
-						  "}\n\n"
-						  );
-
-static string twistKernelInterleaved = string(
-											  "__kernel void \\\n"
-											  "clFFT_1DTwistInterleaved(__global float2 *in, unsigned int startRow, unsigned int numCols, unsigned int N, unsigned int numRowsToProcess, int dir) \\\n"
-											  "{ \\\n"
-											  "   float2 a, w; \\\n"
-											  "   float ang; \\\n"
-											  "   unsigned int j; \\\n"
-											  "	unsigned int i = get_global_id(0); \\\n"
-											  "	unsigned int startIndex = i; \\\n"
-											  "	 \\\n"
-											  "	if(i < numCols) \\\n"
-											  "	{ \\\n"
-											  "	    for(j = 0; j < numRowsToProcess; j++) \\\n"
-											  "	    { \\\n"
-											  "	        a = in[startIndex]; \\\n"
-											  "	        ang = 2.0f * M_PI * dir * i * (startRow + j) / N; \\\n"
-											  "	        w = (float2)(native_cos(ang), native_sin(ang)); \\\n"
-											  "	        a = complexMul(a, w); \\\n"
-											  "	        in[startIndex] = a; \\\n"
-											  "	        startIndex += numCols; \\\n"
-											  "	    } \\\n"
-											  "	}	 \\\n"
-											  "} \\\n"
-											  );
-
-static string twistKernelPlannar = string(
-										  "__kernel void \\\n"
-										  "clFFT_1DTwistSplit(__global float *in_real, __global float *in_imag , unsigned int startRow, unsigned int numCols, unsigned int N, unsigned int numRowsToProcess, int dir) \\\n"
-										  "{ \\\n"
-										  "    float2 a, w; \\\n"
-										  "    float ang; \\\n"
-										  "    unsigned int j; \\\n"
-										  "	unsigned int i = get_global_id(0); \\\n"
-										  "	unsigned int startIndex = i; \\\n"
-										  "	 \\\n"
-										  "	if(i < numCols) \\\n"
-										  "	{ \\\n"
-										  "	    for(j = 0; j < numRowsToProcess; j++) \\\n"
-										  "	    { \\\n"
-										  "	        a = (float2)(in_real[startIndex], in_imag[startIndex]); \\\n"
-										  "	        ang = 2.0f * M_PI * dir * i * (startRow + j) / N; \\\n"
-										  "	        w = (float2)(native_cos(ang), native_sin(ang)); \\\n"
-										  "	        a = complexMul(a, w); \\\n"
-										  "	        in_real[startIndex] = a.x; \\\n"
-										  "	        in_imag[startIndex] = a.y; \\\n"
-										  "	        startIndex += numCols; \\\n"
-										  "	    } \\\n"
-										  "	}	 \\\n"
-										  "} \\\n"
-										  );										  
-
-
-
-#endif
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/fft_execute.cpp b/RTCP/Cobalt/OpenCL_FFT/src/fft_execute.cpp
deleted file mode 100644
index 64dacdfbdbcec3e1fa879b9236f0015775570305..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/fft_execute.cpp
+++ /dev/null
@@ -1,405 +0,0 @@
-
-//
-// File:       fft_execute.cpp
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.¬
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#include "fft_internal.h"
-#include "clFFT.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-
-#define max(a,b) (((a)>(b)) ? (a) : (b))
-#define min(a,b) (((a)<(b)) ? (a) : (b))
-
-static cl_int
-allocateTemporaryBufferInterleaved(cl_fft_plan *plan, cl_uint batchSize)
-{
-	cl_int err = CL_SUCCESS;
-	if(plan->temp_buffer_needed && plan->last_batch_size != batchSize) 
-	{
-		plan->last_batch_size = batchSize; 
-		size_t tmpLength = plan->n.x * plan->n.y * plan->n.z * batchSize * 2 * sizeof(cl_float);
-		
-		if(plan->tempmemobj)
-			clReleaseMemObject(plan->tempmemobj);
-			
-		plan->tempmemobj = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &err);
-	}
-	return err;	
-}
-
-static cl_int
-allocateTemporaryBufferPlannar(cl_fft_plan *plan, cl_uint batchSize)
-{
-	cl_int err = CL_SUCCESS;
-	cl_int terr;
-	if(plan->temp_buffer_needed && plan->last_batch_size != batchSize) 
-	{
-		plan->last_batch_size = batchSize; 
-		size_t tmpLength = plan->n.x * plan->n.y * plan->n.z * batchSize * sizeof(cl_float);
-		
-		if(plan->tempmemobj_real)
-			clReleaseMemObject(plan->tempmemobj_real);
-
-		if(plan->tempmemobj_imag)
-			clReleaseMemObject(plan->tempmemobj_imag);			
-			
-		plan->tempmemobj_real = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &err);
-		plan->tempmemobj_imag = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &terr);
-		err |= terr;
- 	}	
-	return err;
-}
-
-void
-getKernelWorkDimensions(cl_fft_plan *plan, cl_fft_kernel_info *kernelInfo, cl_int *batchSize, size_t *gWorkItems, size_t *lWorkItems)
-{
-	*lWorkItems = kernelInfo->num_workitems_per_workgroup;
-	int numWorkGroups = kernelInfo->num_workgroups;
-    int numXFormsPerWG = kernelInfo->num_xforms_per_workgroup;
-	
-	switch(kernelInfo->dir)
-	{
-		case cl_fft_kernel_x:
-            *batchSize *= (plan->n.y * plan->n.z);
-            numWorkGroups = (*batchSize % numXFormsPerWG) ? (*batchSize/numXFormsPerWG + 1) : (*batchSize/numXFormsPerWG);
-            numWorkGroups *= kernelInfo->num_workgroups;
-			break;
-		case cl_fft_kernel_y:
-			*batchSize *= plan->n.z;
-			numWorkGroups *= *batchSize;
-			break;
-		case cl_fft_kernel_z:
-			numWorkGroups *= *batchSize;
-			break;
-	}
-	
-	*gWorkItems = numWorkGroups * *lWorkItems;
-}
-
-cl_int 
-clFFT_ExecuteInterleaved( cl_command_queue queue, clFFT_Plan Plan, cl_int batchSize, clFFT_Direction dir, 
-						 cl_mem data_in, cl_mem data_out, 
-						 cl_int num_events, cl_event *event_list, cl_event *event )
-{	
-	int s;
-	cl_fft_plan *plan = (cl_fft_plan *) Plan;
-	if(plan->format != clFFT_InterleavedComplexFormat)
-		return CL_INVALID_VALUE;
-	
-	cl_int err;
-	size_t gWorkItems, lWorkItems;
-	int inPlaceDone;
-	
-	cl_int isInPlace = data_in == data_out ? 1 : 0;
-	
-	if((err = allocateTemporaryBufferInterleaved(plan, batchSize)) != CL_SUCCESS)
-		return err;	
-	
-	cl_mem memObj[3];
-	memObj[0] = data_in;
-	memObj[1] = data_out;
-	memObj[2] = plan->tempmemobj;
-	cl_fft_kernel_info *kernelInfo = plan->kernel_info;
-	int numKernels = plan->num_kernels;
-	
-	int numKernelsOdd = numKernels & 1;
-	int currRead  = 0;
-	int currWrite = 1;
-	
-	// at least one external dram shuffle (transpose) required
-	if(plan->temp_buffer_needed) 
-	{
-		// in-place transform
-		if(isInPlace) 
-		{
-			inPlaceDone = 0;
-			currRead  = 1;
-			currWrite = 2;
-		}
-		else
-		{
-			currWrite = (numKernels & 1) ? 1 : 2;
-		}
-		
-		while(kernelInfo) 
-		{
-			if( isInPlace && numKernelsOdd && !inPlaceDone && kernelInfo->in_place_possible) 
-			{
-				currWrite = currRead;
-				inPlaceDone = 1;
-			}
-			
-			s = batchSize;
-			getKernelWorkDimensions(plan, kernelInfo, &s, &gWorkItems, &lWorkItems);
-			err |= clSetKernelArg(kernelInfo->kernel, 0, sizeof(cl_mem), &memObj[currRead]);
-			err |= clSetKernelArg(kernelInfo->kernel, 1, sizeof(cl_mem), &memObj[currWrite]);
-			err |= clSetKernelArg(kernelInfo->kernel, 2, sizeof(cl_int), &dir);
-			err |= clSetKernelArg(kernelInfo->kernel, 3, sizeof(cl_int), &s);
-			
-			err |= clEnqueueNDRangeKernel(queue,  kernelInfo->kernel, 1, NULL, &gWorkItems, &lWorkItems, num_events, event_list, event);
-			if(err)
-				return err;
-			
-			currRead  = (currWrite == 1) ? 1 : 2;
-			currWrite = (currWrite == 1) ? 2 : 1; 
-			
-			kernelInfo = kernelInfo->next;
-		}			
-	}
-	// no dram shuffle (transpose required) transform
-	// all kernels can execute in-place.
-	else {
-		
-		while(kernelInfo)
-		{
-		    s = batchSize;
-		    getKernelWorkDimensions(plan, kernelInfo, &s, &gWorkItems, &lWorkItems);
-		    err |= clSetKernelArg(kernelInfo->kernel, 0, sizeof(cl_mem), &memObj[currRead]);
-		    err |= clSetKernelArg(kernelInfo->kernel, 1, sizeof(cl_mem), &memObj[currWrite]);
-		    err |= clSetKernelArg(kernelInfo->kernel, 2, sizeof(cl_int), &dir);
-		    err |= clSetKernelArg(kernelInfo->kernel, 3, sizeof(cl_int), &s);
-		
-		    err |= clEnqueueNDRangeKernel(queue,  kernelInfo->kernel, 1, NULL, &gWorkItems, &lWorkItems, num_events, event_list, event);
-		    if(err)
-			    return err;		
-			
-			currRead  = 1;
-			currWrite = 1;
-			
-			kernelInfo = kernelInfo->next;
-		}
-	}
-	
-	return err;
-}
-
-cl_int 
-clFFT_ExecutePlannar( cl_command_queue queue, clFFT_Plan Plan, cl_int batchSize, clFFT_Direction dir, 
-					  cl_mem data_in_real, cl_mem data_in_imag, cl_mem data_out_real, cl_mem data_out_imag,
-					  cl_int num_events, cl_event *event_list, cl_event *event)
-{	
-	int s;
-	cl_fft_plan *plan = (cl_fft_plan *) Plan;
-	
-	if(plan->format != clFFT_SplitComplexFormat)
-		return CL_INVALID_VALUE;
-	
-	cl_int err;
-	size_t gWorkItems, lWorkItems;
-	int inPlaceDone;
-	
-	cl_int isInPlace = ((data_in_real == data_out_real) && (data_in_imag == data_out_imag)) ? 1 : 0;
-	
-	if((err = allocateTemporaryBufferPlannar(plan, batchSize)) != CL_SUCCESS)
-		return err;	
-	
-	cl_mem memObj_real[3];
-	cl_mem memObj_imag[3];
-	memObj_real[0] = data_in_real;
-	memObj_real[1] = data_out_real;
-	memObj_real[2] = plan->tempmemobj_real;
-	memObj_imag[0] = data_in_imag;
-	memObj_imag[1] = data_out_imag;
-	memObj_imag[2] = plan->tempmemobj_imag;
-		
-	cl_fft_kernel_info *kernelInfo = plan->kernel_info;
-	int numKernels = plan->num_kernels;
-	
-	int numKernelsOdd = numKernels & 1;
-	int currRead  = 0;
-	int currWrite = 1;
-	
-	// at least one external dram shuffle (transpose) required
-	if(plan->temp_buffer_needed) 
-	{
-		// in-place transform
-		if(isInPlace) 
-		{
-			inPlaceDone = 0;
-			currRead  = 1;
-			currWrite = 2;
-		}
-		else
-		{
-			currWrite = (numKernels & 1) ? 1 : 2;
-		}
-		
-		while(kernelInfo) 
-		{
-			if( isInPlace && numKernelsOdd && !inPlaceDone && kernelInfo->in_place_possible) 
-			{
-				currWrite = currRead;
-				inPlaceDone = 1;
-			}
-			
-			s = batchSize;
-			getKernelWorkDimensions(plan, kernelInfo, &s, &gWorkItems, &lWorkItems);
-			err |= clSetKernelArg(kernelInfo->kernel, 0, sizeof(cl_mem), &memObj_real[currRead]);
-			err |= clSetKernelArg(kernelInfo->kernel, 1, sizeof(cl_mem), &memObj_imag[currRead]);
-			err |= clSetKernelArg(kernelInfo->kernel, 2, sizeof(cl_mem), &memObj_real[currWrite]);
-			err |= clSetKernelArg(kernelInfo->kernel, 3, sizeof(cl_mem), &memObj_imag[currWrite]);
-			err |= clSetKernelArg(kernelInfo->kernel, 4, sizeof(cl_int), &dir);
-			err |= clSetKernelArg(kernelInfo->kernel, 5, sizeof(cl_int), &s);
-			
-			err |= clEnqueueNDRangeKernel(queue,  kernelInfo->kernel, 1, NULL, &gWorkItems, &lWorkItems, num_events, event_list, event);
-			if(err)
-				return err;			
-			
-			currRead  = (currWrite == 1) ? 1 : 2;
-			currWrite = (currWrite == 1) ? 2 : 1; 
-			
-			kernelInfo = kernelInfo->next;
-		}			
-	}
-	// no dram shuffle (transpose required) transform
-	else {
-		
-		while(kernelInfo)
-		{
-		    s = batchSize;
-		    getKernelWorkDimensions(plan, kernelInfo, &s, &gWorkItems, &lWorkItems);
-		    err |= clSetKernelArg(kernelInfo->kernel, 0, sizeof(cl_mem), &memObj_real[currRead]);
-		    err |= clSetKernelArg(kernelInfo->kernel, 1, sizeof(cl_mem), &memObj_imag[currRead]);
-		    err |= clSetKernelArg(kernelInfo->kernel, 2, sizeof(cl_mem), &memObj_real[currWrite]);
-		    err |= clSetKernelArg(kernelInfo->kernel, 3, sizeof(cl_mem), &memObj_imag[currWrite]);
-		    err |= clSetKernelArg(kernelInfo->kernel, 4, sizeof(cl_int), &dir);
-		    err |= clSetKernelArg(kernelInfo->kernel, 5, sizeof(cl_int), &s);
-		
-		    err |= clEnqueueNDRangeKernel(queue,  kernelInfo->kernel, 1, NULL, &gWorkItems, &lWorkItems, num_events, event_list, event);
-		    if(err)
-			    return err;	
-			
-			currRead  = 1;
-			currWrite = 1;
-		
-			kernelInfo = kernelInfo->next;
-		}
-	}
-	
-	return err;
-}
-
-cl_int 
-clFFT_1DTwistInterleaved(clFFT_Plan Plan, cl_command_queue queue, cl_mem array, 
-						 size_t numRows, size_t numCols, size_t startRow, size_t rowsToProcess, clFFT_Direction dir)
-{
-	cl_fft_plan *plan = (cl_fft_plan *) Plan;
-	
-	unsigned int N = numRows*numCols;
-	unsigned int nCols = numCols;
-	unsigned int sRow = startRow;
-	unsigned int rToProcess = rowsToProcess;
-	int d = dir;
-	int err = 0;
-	
-	cl_device_id device_id;
-	err = clGetCommandQueueInfo(queue, CL_QUEUE_DEVICE, sizeof(cl_device_id), &device_id, NULL);
-	if(err)
-	    return err;
-	
-	size_t gSize;
-	err = clGetKernelWorkGroupInfo(plan->twist_kernel, device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &gSize, NULL);
-	if(err)
-	    return err;
-	      
-	gSize = min(128, gSize);
-	size_t numGlobalThreads[1] = { max(numCols / gSize, 1)*gSize };
-	size_t numLocalThreads[1]  = { gSize };
-	
-	err |= clSetKernelArg(plan->twist_kernel, 0, sizeof(cl_mem), &array);
-	err |= clSetKernelArg(plan->twist_kernel, 1, sizeof(unsigned int), &sRow);
-	err |= clSetKernelArg(plan->twist_kernel, 2, sizeof(unsigned int), &nCols);
-	err |= clSetKernelArg(plan->twist_kernel, 3, sizeof(unsigned int), &N);
-	err |= clSetKernelArg(plan->twist_kernel, 4, sizeof(unsigned int), &rToProcess);
-	err |= clSetKernelArg(plan->twist_kernel, 5, sizeof(int), &d);
-	
-	err |= clEnqueueNDRangeKernel(queue, plan->twist_kernel, 1, NULL, numGlobalThreads, numLocalThreads, 0, NULL, NULL);            
-	
-	return err;	
-}
-
-cl_int 
-clFFT_1DTwistPlannar(clFFT_Plan Plan, cl_command_queue queue, cl_mem array_real, cl_mem array_imag, 
-					 size_t numRows, size_t numCols, size_t startRow, size_t rowsToProcess, clFFT_Direction dir)
-{
-	cl_fft_plan *plan = (cl_fft_plan *) Plan;
-	
-	unsigned int N = numRows*numCols;
-	unsigned int nCols = numCols;
-	unsigned int sRow = startRow;
-	unsigned int rToProcess = rowsToProcess;
-	int d = dir;
-	int err = 0;
-	
-	cl_device_id device_id;
-	err = clGetCommandQueueInfo(queue, CL_QUEUE_DEVICE, sizeof(cl_device_id), &device_id, NULL);
-	if(err)
-	    return err;
-	
-	size_t gSize;
-	err = clGetKernelWorkGroupInfo(plan->twist_kernel, device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &gSize, NULL);
-	if(err)
-	    return err;
-	      
-	gSize = min(128, gSize);
-	size_t numGlobalThreads[1] = { max(numCols / gSize, 1)*gSize };
-	size_t numLocalThreads[1]  = { gSize };
-	
-	err |= clSetKernelArg(plan->twist_kernel, 0, sizeof(cl_mem), &array_real);
-	err |= clSetKernelArg(plan->twist_kernel, 1, sizeof(cl_mem), &array_imag);
-	err |= clSetKernelArg(plan->twist_kernel, 2, sizeof(unsigned int), &sRow);
-	err |= clSetKernelArg(plan->twist_kernel, 3, sizeof(unsigned int), &nCols);
-	err |= clSetKernelArg(plan->twist_kernel, 4, sizeof(unsigned int), &N);
-	err |= clSetKernelArg(plan->twist_kernel, 5, sizeof(unsigned int), &rToProcess);
-	err |= clSetKernelArg(plan->twist_kernel, 6, sizeof(int), &d);
-	
-	err |= clEnqueueNDRangeKernel(queue, plan->twist_kernel, 1, NULL, numGlobalThreads, numLocalThreads, 0, NULL, NULL);            
-	
-	return err;	
-}
-
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/fft_internal.h b/RTCP/Cobalt/OpenCL_FFT/src/fft_internal.h
deleted file mode 100644
index a45b69c98af037b2228aa29b4a046b1c4f1cf86f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/fft_internal.h
+++ /dev/null
@@ -1,163 +0,0 @@
-
-//
-// File:       fft_internal.h
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef __CLFFT_INTERNAL_H
-#define __CLFFT_INTERNAL_H
-
-#include "clFFT.h"
-#include <iostream>
-#include <string>
-#include <sstream>
-
-using namespace std;
-
-typedef enum kernel_dir_t
-{
-	cl_fft_kernel_x,
-	cl_fft_kernel_y,
-	cl_fft_kernel_z
-}cl_fft_kernel_dir;
-
-typedef struct kernel_info_t
-{
-	cl_kernel kernel;
-	char *kernel_name;
-	size_t lmem_size;
-	size_t num_workgroups;
-    size_t num_xforms_per_workgroup;
-	size_t num_workitems_per_workgroup;
-	cl_fft_kernel_dir dir;
-	int in_place_possible;
-	kernel_info_t *next;
-}cl_fft_kernel_info;
-
-typedef struct 
-{
-	// context in which fft resources are created and kernels are executed
-	cl_context              context;
-	
-	// size of signal
-	clFFT_Dim3              n;
-	
-	// dimension of transform ... must be either 1D, 2D or 3D
-	clFFT_Dimension			dim;
-	
-	// data format ... must be either interleaved or plannar
-	clFFT_DataFormat		format;
-	
-	// string containing kernel source. Generated at runtime based on
-	// n, dim, format and other parameters
-	string                  *kernel_string;
-	
-	// CL program containing source and kernel this particular 
-	// n, dim, data format
-	cl_program				program;
-	
-	// linked list of kernels which needs to be executed for this fft
-	cl_fft_kernel_info		*kernel_info;
-	
-	// number of kernels
-	int                     num_kernels;
-	
-	// twist kernel for virtualizing fft of very large sizes that do not
-	// fit in GPU global memory
-	cl_kernel				twist_kernel;
-	
-	// flag indicating if temporary intermediate buffer is needed or not.
-	// this depends on fft kernels being executed and if transform is 
-	// in-place or out-of-place. e.g. Local memory fft (say 1D 1024 ... 
-	// one that does not require global transpose do not need temporary buffer)
-	// 2D 1024x1024 out-of-place fft however do require intermediate buffer.
-	// If temp buffer is needed, its allocation is lazy i.e. its not allocated
-	// until its needed
-	cl_int                  temp_buffer_needed;
-	
-	// Batch size is runtime parameter and size of temporary buffer (if needed)
-	// depends on batch size. Allocation of temporary buffer is lazy i.e. its
-	// only created when needed. Once its created at first call of clFFT_Executexxx
-	// it is not allocated next time if next time clFFT_Executexxx is called with 
-	// batch size different than the first call. last_batch_size caches the last
-	// batch size with which this plan is used so that we dont keep allocating/deallocating
-	// temp buffer if same batch size is used again and again.
-	size_t                  last_batch_size;
-	
-	// temporary buffer for interleaved plan
-	cl_mem   				tempmemobj;
-	
-	// temporary buffer for planner plan. Only one of tempmemobj or 
-	// (tempmemobj_real, tempmemobj_imag) pair is valid (allocated) depending 
-	// data format of plan (plannar or interleaved)
-	cl_mem                  tempmemobj_real, tempmemobj_imag;
-	
-	// Maximum size of signal for which local memory transposed based
-	// fft is sufficient i.e. no global mem transpose (communication)
-	// is needed
-	size_t					max_localmem_fft_size;
-	
-	// Maximum work items per work group allowed. This, along with max_radix below controls 
-	// maximum local memory being used by fft kernels of this plan. Set to 256 by default
-	size_t                  max_work_item_per_workgroup;
-	
-	// Maximum base radix for local memory fft ... this controls the maximum register 
-	// space used by work items. Currently defaults to 16
-	size_t                  max_radix;
-	
-	// Device depended parameter that tells how many work-items need to be read consecutive
-	// values to make sure global memory access by work-items of a work-group result in 
-	// coalesced memory access to utilize full bandwidth e.g. on NVidia tesla, this is 16
-	size_t                  min_mem_coalesce_width;
-	
-	// Number of local memory banks. This is used to geneate kernel with local memory 
-	// transposes with appropriate padding to avoid bank conflicts to local memory
-	// e.g. on NVidia it is 16.
-	size_t                  num_local_mem_banks;
-}cl_fft_plan;
-
-void FFT1D(cl_fft_plan *plan, cl_fft_kernel_dir dir);
-
-#endif  
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/fft_kernelstring.cpp b/RTCP/Cobalt/OpenCL_FFT/src/fft_kernelstring.cpp
deleted file mode 100644
index 71a7633a45a00a1b21c02363c0adace90cdc8c71..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/fft_kernelstring.cpp
+++ /dev/null
@@ -1,1256 +0,0 @@
-
-//
-// File:       fft_kernelstring.cpp
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#include <cstdio>
-#include <cstdlib>
-#include <cmath>
-#include <iostream>
-#include <sstream>
-#include <cstring>
-#include <cassert>
-#include "fft_internal.h"
-#include "clFFT.h"
-
-using namespace std;
-
-#define max(A,B) ((A) > (B) ? (A) : (B))
-#define min(A,B) ((A) < (B) ? (A) : (B))
-
-static string 
-num2str(int num)
-{
-	char temp[200];
-	sprintf(temp, "%d", num);
-	return string(temp);
-}
-
-// For any n, this function decomposes n into factors for loacal memory tranpose 
-// based fft. Factors (radices) are sorted such that the first one (radixArray[0])
-// is the largest. This base radix determines the number of registers used by each
-// work item and product of remaining radices determine the size of work group needed.
-// To make things concrete with and example, suppose n = 1024. It is decomposed into
-// 1024 = 16 x 16 x 4. Hence kernel uses float2 a[16], for local in-register fft and 
-// needs 16 x 4 = 64 work items per work group. So kernel first performance 64 length
-// 16 ffts (64 work items working in parallel) following by transpose using local 
-// memory followed by again 64 length 16 ffts followed by transpose using local memory
-// followed by 256 length 4 ffts. For the last step since with size of work group is 
-// 64 and each work item can array for 16 values, 64 work items can compute 256 length
-// 4 ffts by each work item computing 4 length 4 ffts. 
-// Similarly for n = 2048 = 8 x 8 x 8 x 4, each work group has 8 x 8 x 4 = 256 work
-// iterms which each computes 256 (in-parallel) length 8 ffts in-register, followed
-// by transpose using local memory, followed by 256 length 8 in-register ffts, followed
-// by transpose using local memory, followed by 256 length 8 in-register ffts, followed
-// by transpose using local memory, followed by 512 length 4 in-register ffts. Again,
-// for the last step, each work item computes two length 4 in-register ffts and thus
-// 256 work items are needed to compute all 512 ffts. 
-// For n = 32 = 8 x 4, 4 work items first compute 4 in-register 
-// lenth 8 ffts, followed by transpose using local memory followed by 8 in-register
-// length 4 ffts, where each work item computes two length 4 ffts thus 4 work items
-// can compute 8 length 4 ffts. However if work group size of say 64 is choosen, 
-// each work group can compute 64/ 4 = 16 size 32 ffts (batched transform). 
-// Users can play with these parameters to figure what gives best performance on
-// their particular device i.e. some device have less register space thus using
-// smaller base radix can avoid spilling ... some has small local memory thus 
-// using smaller work group size may be required etc
-
-static void 
-getRadixArray(unsigned int n, unsigned int *radixArray, unsigned int *numRadices, unsigned int maxRadix)
-{
-    if(maxRadix > 1)
-    {
-        maxRadix = min(n, maxRadix);
-        unsigned int cnt = 0;
-        while(n > maxRadix)
-        {
-            radixArray[cnt++] = maxRadix;
-            n /= maxRadix;
-        }
-        radixArray[cnt++] = n;
-        *numRadices = cnt;
-        return;
-    }
-
-	switch(n) 
-	{
-		case 2:
-			*numRadices = 1;
-			radixArray[0] = 2;
-			break;
-			
-		case 4:
-			*numRadices = 1;
-			radixArray[0] = 4;
-			break;
-			
-		case 8:
-			*numRadices = 1;
-			radixArray[0] = 8;
-			break;
-			
-		case 16:
-			*numRadices = 2;
-			radixArray[0] = 8; radixArray[1] = 2; 
-			break;
-			
-		case 32:
-			*numRadices = 2;
-			radixArray[0] = 8; radixArray[1] = 4;
-			break;
-			
-		case 64:
-			*numRadices = 2;
-			radixArray[0] = 8; radixArray[1] = 8;
-			break;
-			
-		case 128:
-			*numRadices = 3;
-			radixArray[0] = 8; radixArray[1] = 4; radixArray[2] = 4;
-			break;
-			
-		case 256:
-			*numRadices = 4;
-			radixArray[0] = 4; radixArray[1] = 4; radixArray[2] = 4; radixArray[3] = 4;
-			break;
-			
-		case 512:
-			*numRadices = 3;
-			radixArray[0] = 8; radixArray[1] = 8; radixArray[2] = 8;
-			break;			
-			
-		case 1024:
-			*numRadices = 3;
-			radixArray[0] = 16; radixArray[1] = 16; radixArray[2] = 4;
-			break;	
-		case 2048:
-			*numRadices = 4;
-			radixArray[0] = 8; radixArray[1] = 8; radixArray[2] = 8; radixArray[3] = 4;
-			break;
-		default:
-			*numRadices = 0;
-			return;
-	}
-}
-
-static void
-insertHeader(string &kernelString, string &kernelName, clFFT_DataFormat dataFormat)
-{
-	if(dataFormat == clFFT_SplitComplexFormat) 
-		kernelString += string("__kernel void ") + kernelName + string("(__global float *in_real, __global float *in_imag, __global float *out_real, __global float *out_imag, int dir, int S)\n");
-	else 
-		kernelString += string("__kernel void ") + kernelName + string("(__global float2 *in, __global float2 *out, int dir, int S)\n");
-}
-
-static void 
-insertVariables(string &kStream, int maxRadix)
-{
-	kStream += string("    int i, j, r, indexIn, indexOut, index, tid, bNum, xNum, k, l;\n");
-    kStream += string("    int s, ii, jj, offset;\n");
-	kStream += string("    float2 w;\n");
-	kStream += string("    float ang, angf, ang1;\n");
-    kStream += string("    __local float *lMemStore, *lMemLoad;\n");
-    kStream += string("    float2 a[") +  num2str(maxRadix) + string("];\n");
-    kStream += string("    int lId = get_local_id( 0 );\n");
-    kStream += string("    int groupId = get_group_id( 0 );\n");
-}
-
-static void
-formattedLoad(string &kernelString, int aIndex, int gIndex, clFFT_DataFormat dataFormat)
-{
-	if(dataFormat == clFFT_InterleavedComplexFormat)
-		kernelString += string("        a[") + num2str(aIndex) + string("] = in[") + num2str(gIndex) + string("];\n");
-	else
-	{
-		kernelString += string("        a[") + num2str(aIndex) + string("].x = in_real[") + num2str(gIndex) + string("];\n");
-		kernelString += string("        a[") + num2str(aIndex) + string("].y = in_imag[") + num2str(gIndex) + string("];\n");
-	}
-}
-
-static void
-formattedStore(string &kernelString, int aIndex, int gIndex, clFFT_DataFormat dataFormat)
-{
-	if(dataFormat == clFFT_InterleavedComplexFormat)
-		kernelString += string("        out[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("];\n");
-	else
-	{
-		kernelString += string("        out_real[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("].x;\n");
-		kernelString += string("        out_imag[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("].y;\n");
-	}
-}
-
-static int
-insertGlobalLoadsAndTranspose(string &kernelString, int N, int numWorkItemsPerXForm, int numXFormsPerWG, int R0, int mem_coalesce_width, clFFT_DataFormat dataFormat)
-{
-	int log2NumWorkItemsPerXForm = (int) log2(numWorkItemsPerXForm);
-	int groupSize = numWorkItemsPerXForm * numXFormsPerWG;
-	int i, j;
-	int lMemSize = 0;
-	
-	if(numXFormsPerWG > 1)
-	    kernelString += string("        s = S & ") + num2str(numXFormsPerWG - 1) + string(";\n");
-	
-    if(numWorkItemsPerXForm >= mem_coalesce_width)
-    {   		
-		if(numXFormsPerWG > 1)
-		{
-            kernelString += string("    ii = lId & ") + num2str(numWorkItemsPerXForm-1) + string(";\n");
-            kernelString += string("    jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n");
-            kernelString += string("    if( !s || (groupId < get_num_groups(0)-1) || (jj < s) ) {\n");
-			kernelString += string("        offset = mad24( mad24(groupId, ") + num2str(numXFormsPerWG) + string(", jj), ") + num2str(N) + string(", ii );\n");
-			if(dataFormat == clFFT_InterleavedComplexFormat)
-			{
-			    kernelString += string("        in += offset;\n");
-			    kernelString += string("        out += offset;\n");
-			}
-			else
-			{
-			    kernelString += string("        in_real += offset;\n");
-				kernelString += string("        in_imag += offset;\n");
-			    kernelString += string("        out_real += offset;\n");
-				kernelString += string("        out_imag += offset;\n");
-			}
-			for(i = 0; i < R0; i++)
-				formattedLoad(kernelString, i, i*numWorkItemsPerXForm, dataFormat);
-			kernelString += string("    }\n");
-		}
-		else
-		{
-			kernelString += string("    ii = lId;\n");
-			kernelString += string("    jj = 0;\n");
-			kernelString += string("    offset =  mad24(groupId, ") + num2str(N) + string(", ii);\n");
-			if(dataFormat == clFFT_InterleavedComplexFormat)
-			{
-			    kernelString += string("        in += offset;\n");
-			    kernelString += string("        out += offset;\n");
-			}
-			else
-			{
-			    kernelString += string("        in_real += offset;\n");
-				kernelString += string("        in_imag += offset;\n");
-			    kernelString += string("        out_real += offset;\n");
-				kernelString += string("        out_imag += offset;\n");
-			}
-			for(i = 0; i < R0; i++)
-				formattedLoad(kernelString, i, i*numWorkItemsPerXForm, dataFormat);
-		}
-    }
-    else if( N >= mem_coalesce_width )
-    {
-        int numInnerIter = N / mem_coalesce_width;
-        int numOuterIter = numXFormsPerWG / ( groupSize / mem_coalesce_width );
-		
-        kernelString += string("    ii = lId & ") + num2str(mem_coalesce_width - 1) + string(";\n");
-        kernelString += string("    jj = lId >> ") + num2str((int)log2(mem_coalesce_width)) + string(";\n");
-        kernelString += string("    lMemStore = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");
-        kernelString += string("    offset = mad24( groupId, ") + num2str(numXFormsPerWG) + string(", jj);\n");
-        kernelString += string("    offset = mad24( offset, ") + num2str(N) + string(", ii );\n");
-		if(dataFormat == clFFT_InterleavedComplexFormat)
-		{
-			kernelString += string("        in += offset;\n");
-			kernelString += string("        out += offset;\n");
-		}
-		else
-		{
-			kernelString += string("        in_real += offset;\n");
-			kernelString += string("        in_imag += offset;\n");
-			kernelString += string("        out_real += offset;\n");
-			kernelString += string("        out_imag += offset;\n");
-		}
-        
-		kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n");
-        for(i = 0; i < numOuterIter; i++ )
-        {
-            kernelString += string("    if( jj < s ) {\n");
-			for(j = 0; j < numInnerIter; j++ ) 
-				formattedLoad(kernelString, i * numInnerIter + j, j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * N, dataFormat);
-			kernelString += string("    }\n"); 
-			if(i != numOuterIter - 1)
-			    kernelString += string("    jj += ") + num2str(groupSize / mem_coalesce_width) + string(";\n");			 
-        }
-		kernelString += string("}\n ");
-		kernelString += string("else {\n");
-        for(i = 0; i < numOuterIter; i++ )
-        {
-			for(j = 0; j < numInnerIter; j++ ) 
-				formattedLoad(kernelString, i * numInnerIter + j, j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * N, dataFormat);			
-        }		
-		kernelString += string("}\n");
-        
-		kernelString += string("    ii = lId & ") + num2str(numWorkItemsPerXForm - 1) + string(";\n");
-		kernelString += string("    jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n");
-        kernelString += string("    lMemLoad  = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii);\n");  
-		
-        for( i = 0; i < numOuterIter; i++ )
-		{
-			for( j = 0; j < numInnerIter; j++ )
-			{	
-				kernelString += string("    lMemStore[") + num2str(j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * (N + numWorkItemsPerXForm )) + string("] = a[") + 
-				                num2str(i * numInnerIter + j) + string("].x;\n");
-			}
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-        
-        for( i = 0; i < R0; i++ )
-			kernelString += string("    a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n");            
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");  
-
-	    for( i = 0; i < numOuterIter; i++ )
-		{
-			for( j = 0; j < numInnerIter; j++ )
-			{	
-				kernelString += string("    lMemStore[") + num2str(j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * (N + numWorkItemsPerXForm )) + string("] = a[") + 
-								num2str(i * numInnerIter + j) + string("].y;\n");
-			}
-	    }	
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-																						   
-		for( i = 0; i < R0; i++ )
-			kernelString += string("    a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n");            
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");  
-		
-		lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG;
-    }  
-    else
-    {
-        kernelString += string("    offset = mad24( groupId,  ") + num2str(N * numXFormsPerWG) + string(", lId );\n");
-		if(dataFormat == clFFT_InterleavedComplexFormat)
-		{
-			kernelString += string("        in += offset;\n");
-			kernelString += string("        out += offset;\n");
-		}
-		else
-		{
-			kernelString += string("        in_real += offset;\n");
-			kernelString += string("        in_imag += offset;\n");
-			kernelString += string("        out_real += offset;\n");
-			kernelString += string("        out_imag += offset;\n");
-		}
-        
-        kernelString += string("    ii = lId & ") + num2str(N-1) + string(";\n");
-        kernelString += string("    jj = lId >> ") + num2str((int)log2(N)) + string(";\n");
-        kernelString += string("    lMemStore = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");
-        
-		kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n");
-        for( i = 0; i < R0; i++ )
-        {
-            kernelString += string("    if(jj < s )\n");
-			formattedLoad(kernelString, i, i*groupSize, dataFormat);
-			if(i != R0 - 1)
-			    kernelString += string("    jj += ") + num2str(groupSize / N) + string(";\n");
-        }
-		kernelString += string("}\n");
-		kernelString += string("else {\n");
-        for( i = 0; i < R0; i++ )
-        {
-			formattedLoad(kernelString, i, i*groupSize, dataFormat);
-        }		
-		kernelString += string("}\n");
-        
-		if(numWorkItemsPerXForm > 1)
-		{
-            kernelString += string("    ii = lId & ") + num2str(numWorkItemsPerXForm - 1) + string(";\n");
-            kernelString += string("    jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n");
-            kernelString += string("    lMemLoad = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); 
-		}
-		else 
-		{
-            kernelString += string("    ii = 0;\n");
-            kernelString += string("    jj = lId;\n");
-            kernelString += string("    lMemLoad = sMem + jj * ") + num2str(N + numWorkItemsPerXForm) + string(";\n"); 			
-		}
-
-		
-        for( i = 0; i < R0; i++ )
-            kernelString += string("    lMemStore[") + num2str(i * ( groupSize / N ) * ( N + numWorkItemsPerXForm )) + string("] = a[") + num2str(i) + string("].x;\n"); 
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-        
-        for( i = 0; i < R0; i++ )
-            kernelString += string("    a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n");
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-        
-        for( i = 0; i < R0; i++ )
-            kernelString += string("    lMemStore[") + num2str(i * ( groupSize / N ) * ( N + numWorkItemsPerXForm )) + string("] = a[") + num2str(i) + string("].y;\n"); 
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-        
-        for( i = 0; i < R0; i++ )
-            kernelString += string("    a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n");
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-		
-		lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG;
-    }
-	
-	return lMemSize;
-}
-
-static int
-insertGlobalStoresAndTranspose(string &kernelString, int N, int maxRadix, int Nr, int numWorkItemsPerXForm, int numXFormsPerWG, int mem_coalesce_width, clFFT_DataFormat dataFormat)
-{
-	int groupSize = numWorkItemsPerXForm * numXFormsPerWG;
-	int i, j, k, ind;
-	int lMemSize = 0;
-	int numIter = maxRadix / Nr;
-	string indent = string("");
-	
-    if( numWorkItemsPerXForm >= mem_coalesce_width )
-    {   
-		if(numXFormsPerWG > 1)
-		{
-            kernelString += string("    if( !s || (groupId < get_num_groups(0)-1) || (jj < s) ) {\n");
-			indent = string("    ");
-		}	
-		for(i = 0; i < maxRadix; i++) 
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-			formattedStore(kernelString, ind, i*numWorkItemsPerXForm, dataFormat);
-		}
-		if(numXFormsPerWG > 1)
-		    kernelString += string("    }\n");
-    }
-    else if( N >= mem_coalesce_width )
-    {
-        int numInnerIter = N / mem_coalesce_width;
-        int numOuterIter = numXFormsPerWG / ( groupSize / mem_coalesce_width );
-		
-        kernelString += string("    lMemLoad  = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");  
-        kernelString += string("    ii = lId & ") + num2str(mem_coalesce_width - 1) + string(";\n");
-        kernelString += string("    jj = lId >> ") + num2str((int)log2(mem_coalesce_width)) + string(";\n");
-        kernelString += string("    lMemStore = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");
-		
-        for( i = 0; i < maxRadix; i++ )
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-            kernelString += string("    lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].x;\n");            
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");         
-		
-        for( i = 0; i < numOuterIter; i++ )
-			for( j = 0; j < numInnerIter; j++ )
-				kernelString += string("    a[") + num2str(i*numInnerIter + j) + string("].x = lMemStore[") + num2str(j*mem_coalesce_width + i*( groupSize / mem_coalesce_width )*(N + numWorkItemsPerXForm)) + string("];\n");
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-		
-        for( i = 0; i < maxRadix; i++ )
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-            kernelString += string("    lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].y;\n");            
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");         
-		
-        for( i = 0; i < numOuterIter; i++ )
-			for( j = 0; j < numInnerIter; j++ )
-				kernelString += string("    a[") + num2str(i*numInnerIter + j) + string("].y = lMemStore[") + num2str(j*mem_coalesce_width + i*( groupSize / mem_coalesce_width )*(N + numWorkItemsPerXForm)) + string("];\n");
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-		
-		kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n");
-		for(i = 0; i < numOuterIter; i++ )
-        {
-            kernelString += string("    if( jj < s ) {\n");
-			for(j = 0; j < numInnerIter; j++ ) 
-				formattedStore(kernelString, i*numInnerIter + j, j*mem_coalesce_width + i*(groupSize/mem_coalesce_width)*N, dataFormat); 
-			kernelString += string("    }\n"); 
-			if(i != numOuterIter - 1)
-			    kernelString += string("    jj += ") + num2str(groupSize / mem_coalesce_width) + string(";\n");			 
-        }
-		kernelString += string("}\n");
-		kernelString += string("else {\n");
-		for(i = 0; i < numOuterIter; i++ )
-        {
-			for(j = 0; j < numInnerIter; j++ ) 
-				formattedStore(kernelString, i*numInnerIter + j, j*mem_coalesce_width + i*(groupSize/mem_coalesce_width)*N, dataFormat); 
-        }		
-		kernelString += string("}\n");
-		
-		lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG;
-	}   	
-    else
-    {   
-        kernelString += string("    lMemLoad  = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");  
-        
-		kernelString += string("    ii = lId & ") + num2str(N - 1) + string(";\n");
-        kernelString += string("    jj = lId >> ") + num2str((int) log2(N)) + string(";\n");
-        kernelString += string("    lMemStore = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");
-        
-        for( i = 0; i < maxRadix; i++ )
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-            kernelString += string("    lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].x;\n");
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-        
-        for( i = 0; i < maxRadix; i++ )
-            kernelString += string("    a[") + num2str(i) + string("].x = lMemStore[") + num2str(i*( groupSize / N )*( N + numWorkItemsPerXForm )) + string("];\n"); 
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-        
-        for( i = 0; i < maxRadix; i++ )
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-            kernelString += string("    lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].y;\n");
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-        
-        for( i = 0; i < maxRadix; i++ )
-            kernelString += string("    a[") + num2str(i) + string("].y = lMemStore[") + num2str(i*( groupSize / N )*( N + numWorkItemsPerXForm )) + string("];\n"); 
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-        
-		kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n");
-		for( i = 0; i < maxRadix; i++ )
-        {
-            kernelString += string("    if(jj < s ) {\n");
-			formattedStore(kernelString, i, i*groupSize, dataFormat);
-			kernelString += string("    }\n");
-			if( i != maxRadix - 1)
-				kernelString += string("    jj +=") + num2str(groupSize / N) + string(";\n");
-        } 
-		kernelString += string("}\n");
-		kernelString += string("else {\n");
-		for( i = 0; i < maxRadix; i++ )
-        {
-			formattedStore(kernelString, i, i*groupSize, dataFormat);
-        } 		
-		kernelString += string("}\n");
-		
-		lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG;
-    }
-	
-	return lMemSize;
-}
-
-static void 
-insertfftKernel(string &kernelString, int Nr, int numIter)
-{
-	int i;
-	for(i = 0; i < numIter; i++) 
-	{
-		kernelString += string("    fftKernel") + num2str(Nr) + string("(a+") + num2str(i*Nr) + string(", dir);\n");
-	}
-}
-
-static void
-insertTwiddleKernel(string &kernelString, int Nr, int numIter, int Nprev, int len, int numWorkItemsPerXForm)
-{
-	int z, k;
-	int logNPrev = log2(Nprev);
-	
-	for(z = 0; z < numIter; z++) 
-	{
-		if(z == 0)
-		{
-			if(Nprev > 1)
-			    kernelString += string("    angf = (float) (ii >> ") + num2str(logNPrev) + string(");\n");
-			else
-				kernelString += string("    angf = (float) ii;\n");
-		}	
-		else
-		{
-			if(Nprev > 1)
-			    kernelString += string("    angf = (float) ((") + num2str(z*numWorkItemsPerXForm) + string(" + ii) >>") + num2str(logNPrev) + string(");\n"); 
-			else
-				kernelString += string("    angf = (float) (") + num2str(z*numWorkItemsPerXForm) + string(" + ii);\n");
-		}	
-	
-		for(k = 1; k < Nr; k++) {
-			int ind = z*Nr + k;
-			//float fac =  (float) (2.0 * M_PI * (double) k / (double) len);
-			kernelString += string("    ang = dir * ( 2.0f * M_PI * ") + num2str(k) + string(".0f / ") + num2str(len) + string(".0f )") + string(" * angf;\n");
-			kernelString += string("    w = (float2)(native_cos(ang), native_sin(ang));\n");
-			kernelString += string("    a[") + num2str(ind) + string("] = complexMul(a[") + num2str(ind) + string("], w);\n");
-		}
-	}
-}
-
-static int
-getPadding(int numWorkItemsPerXForm, int Nprev, int numWorkItemsReq, int numXFormsPerWG, int Nr, int numBanks, int *offset, int *midPad)
-{
-	if((numWorkItemsPerXForm <= Nprev) || (Nprev >= numBanks))
-		*offset = 0;
-	else {
-		int numRowsReq = ((numWorkItemsPerXForm < numBanks) ? numWorkItemsPerXForm : numBanks) / Nprev;
-		int numColsReq = 1;
-		if(numRowsReq > Nr)
-			numColsReq = numRowsReq / Nr;
-		numColsReq = Nprev * numColsReq;
-		*offset = numColsReq;
-	}
-	
-	if(numWorkItemsPerXForm >= numBanks || numXFormsPerWG == 1)
-		*midPad = 0;
-	else {
-		int bankNum = ( (numWorkItemsReq + *offset) * Nr ) & (numBanks - 1);
-		if( bankNum >= numWorkItemsPerXForm )
-			*midPad = 0;
-		else
-			*midPad = numWorkItemsPerXForm - bankNum;
-	}
-	
-	int lMemSize = ( numWorkItemsReq + *offset) * Nr * numXFormsPerWG + *midPad * (numXFormsPerWG - 1);
-	return lMemSize;
-}
-
-
-static void 
-insertLocalStores(string &kernelString, int numIter, int Nr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, string &comp)
-{
-	int z, k;
-
-	for(z = 0; z < numIter; z++) {
-		for(k = 0; k < Nr; k++) {
-			int index = k*(numWorkItemsReq + offset) + z*numWorkItemsPerXForm;
-			kernelString += string("    lMemStore[") + num2str(index) + string("] = a[") + num2str(z*Nr + k) + string("].") + comp + string(";\n");
-		}
-	}
-	kernelString += string("    barrier(CLK_LOCAL_MEM_FENCE);\n");
-}
-
-static void 
-insertLocalLoads(string &kernelString, int n, int Nr, int Nrn, int Nprev, int Ncurr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, string &comp)
-{
-	int numWorkItemsReqN = n / Nrn;										
-	int interBlockHNum = max( Nprev / numWorkItemsPerXForm, 1 );			
-	int interBlockHStride = numWorkItemsPerXForm;							
-	int vertWidth = max(numWorkItemsPerXForm / Nprev, 1);					
-	vertWidth = min( vertWidth, Nr);									
-	int vertNum = Nr / vertWidth;										
-	int vertStride = ( n / Nr + offset ) * vertWidth;					
-	int iter = max( numWorkItemsReqN / numWorkItemsPerXForm, 1);
-	int intraBlockHStride = (numWorkItemsPerXForm / (Nprev*Nr)) > 1 ? (numWorkItemsPerXForm / (Nprev*Nr)) : 1;
-	intraBlockHStride *= Nprev;
-	
-	int stride = numWorkItemsReq / Nrn;									
-	int i;
-	for(i = 0; i < iter; i++) {
-		int ii = i / (interBlockHNum * vertNum);
-		int zz = i % (interBlockHNum * vertNum);
-		int jj = zz % interBlockHNum;
-		int kk = zz / interBlockHNum;
-		int z;
-		for(z = 0; z < Nrn; z++) {
-			int st = kk * vertStride + jj * interBlockHStride + ii * intraBlockHStride + z * stride;
-			kernelString += string("    a[") + num2str(i*Nrn + z) + string("].") + comp + string(" = lMemLoad[") + num2str(st) + string("];\n");
-		}
-	}
-	kernelString += string("    barrier(CLK_LOCAL_MEM_FENCE);\n");
-}
-
-static void
-insertLocalLoadIndexArithmatic(string &kernelString, int Nprev, int Nr, int numWorkItemsReq, int numWorkItemsPerXForm, int numXFormsPerWG, int offset, int midPad)
-{	
-	int Ncurr = Nprev * Nr;
-	int logNcurr = log2(Ncurr);
-	int logNprev = log2(Nprev);
-	int incr = (numWorkItemsReq + offset) * Nr + midPad;
-	
-	if(Ncurr < numWorkItemsPerXForm) 
-	{
-		if(Nprev == 1)
-		    kernelString += string("    j = ii & ") + num2str(Ncurr - 1) + string(";\n");
-		else
-			kernelString += string("    j = (ii & ") + num2str(Ncurr - 1) + string(") >> ") + num2str(logNprev) + string(";\n");
-		
-		if(Nprev == 1) 
-			kernelString += string("    i = ii >> ") + num2str(logNcurr) + string(";\n");
-		else 
-			kernelString += string("    i = mad24(ii >> ") + num2str(logNcurr) + string(", ") + num2str(Nprev) + string(", ii & ") + num2str(Nprev - 1) + string(");\n"); 
-	}	
-	else 
-	{
-		if(Nprev == 1)
-		    kernelString += string("    j = ii;\n");
-		else
-			kernelString += string("    j = ii >> ") + num2str(logNprev) + string(";\n");
-		if(Nprev == 1) 
-			kernelString += string("    i = 0;\n"); 
-		else 
-			kernelString += string("    i = ii & ") + num2str(Nprev - 1) + string(";\n");
-	}
-
-    if(numXFormsPerWG > 1)
-        kernelString += string("    i = mad24(jj, ") + num2str(incr) + string(", i);\n");		
-
-    kernelString += string("    lMemLoad = sMem + mad24(j, ") + num2str(numWorkItemsReq + offset) + string(", i);\n"); 
-}
-
-static void
-insertLocalStoreIndexArithmatic(string &kernelString, int numWorkItemsReq, int numXFormsPerWG, int Nr, int offset, int midPad)
-{
-	if(numXFormsPerWG == 1) {
-		kernelString += string("    lMemStore = sMem + ii;\n");		
-	}
-	else {
-		kernelString += string("    lMemStore = sMem + mad24(jj, ") + num2str((numWorkItemsReq + offset)*Nr + midPad) + string(", ii);\n");	
-	}
-}
-
-
-static void
-createLocalMemfftKernelString(cl_fft_plan *plan)
-{
-	unsigned int radixArray[10];
-	unsigned int numRadix;
-	 
-	unsigned int n = plan->n.x;
-	
-	assert(n <= plan->max_work_item_per_workgroup * plan->max_radix && "signal lenght too big for local mem fft\n");
-	
-	getRadixArray(n, radixArray, &numRadix, 0);
-	assert(numRadix > 0 && "no radix array supplied\n");
-	
-	if(n/radixArray[0] > plan->max_work_item_per_workgroup)
-	    getRadixArray(n, radixArray, &numRadix, plan->max_radix);
-
-	assert(radixArray[0] <= plan->max_radix && "max radix choosen is greater than allowed\n");
-	assert(n/radixArray[0] <= plan->max_work_item_per_workgroup && "required work items per xform greater than maximum work items allowed per work group for local mem fft\n");
-	
-	unsigned int tmpLen = 1;
-	unsigned int i;
-	for(i = 0; i < numRadix; i++)
-	{	
-		assert( radixArray[i] && !( (radixArray[i] - 1) & radixArray[i] ) );
-	    tmpLen *= radixArray[i];
-	}
-	assert(tmpLen == n && "product of radices choosen doesnt match the length of signal\n");
-	
-	int offset, midPad;
-	string localString(""), kernelName("");
-	
-	clFFT_DataFormat dataFormat = plan->format;
-	string *kernelString = plan->kernel_string;
-	
-	
-	cl_fft_kernel_info **kInfo = &plan->kernel_info;
-	int kCount = 0;
-	
-	while(*kInfo)
-	{
-		kInfo = &(*kInfo)->next;
-		kCount++;
-	}
-	
-	kernelName = string("fft") + num2str(kCount);
-	
-	*kInfo = (cl_fft_kernel_info *) malloc(sizeof(cl_fft_kernel_info));
-	(*kInfo)->kernel = 0;
-	(*kInfo)->lmem_size = 0;
-	(*kInfo)->num_workgroups = 0;
-	(*kInfo)->num_workitems_per_workgroup = 0;
-	(*kInfo)->dir = cl_fft_kernel_x;
-	(*kInfo)->in_place_possible = 1;
-	(*kInfo)->next = NULL;
-	(*kInfo)->kernel_name = (char *) malloc(sizeof(char)*(kernelName.size()+1));
-	strcpy((*kInfo)->kernel_name, kernelName.c_str());
-	
-	unsigned int numWorkItemsPerXForm = n / radixArray[0];
-	unsigned int numWorkItemsPerWG = numWorkItemsPerXForm <= 64 ? 64 : numWorkItemsPerXForm; 
-	assert(numWorkItemsPerWG <= plan->max_work_item_per_workgroup);
-	int numXFormsPerWG = numWorkItemsPerWG / numWorkItemsPerXForm;
-	(*kInfo)->num_workgroups = 1;
-    (*kInfo)->num_xforms_per_workgroup = numXFormsPerWG;
-	(*kInfo)->num_workitems_per_workgroup = numWorkItemsPerWG;
-	
-	unsigned int *N = radixArray;
-	unsigned int maxRadix = N[0];
-	unsigned int lMemSize = 0;
-		
-	insertVariables(localString, maxRadix);
-	
-	lMemSize = insertGlobalLoadsAndTranspose(localString, n, numWorkItemsPerXForm, numXFormsPerWG, maxRadix, plan->min_mem_coalesce_width, dataFormat);
-	(*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size;
-	
-	string xcomp = string("x");
-	string ycomp = string("y");
-	
-	unsigned int Nprev = 1;
-	unsigned int len = n;
-	unsigned int r;
-	for(r = 0; r < numRadix; r++) 
-	{
-		int numIter = N[0] / N[r];
-		int numWorkItemsReq = n / N[r];
-		int Ncurr = Nprev * N[r];
-		insertfftKernel(localString, N[r], numIter);
-		
-		if(r < (numRadix - 1)) {
-			insertTwiddleKernel(localString, N[r], numIter, Nprev, len, numWorkItemsPerXForm);
-			lMemSize = getPadding(numWorkItemsPerXForm, Nprev, numWorkItemsReq, numXFormsPerWG, N[r], plan->num_local_mem_banks, &offset, &midPad);
-			(*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size;
-			insertLocalStoreIndexArithmatic(localString, numWorkItemsReq, numXFormsPerWG, N[r], offset, midPad);
-			insertLocalLoadIndexArithmatic(localString, Nprev, N[r], numWorkItemsReq, numWorkItemsPerXForm, numXFormsPerWG, offset, midPad);
-			insertLocalStores(localString, numIter, N[r], numWorkItemsPerXForm, numWorkItemsReq, offset, xcomp);
-			insertLocalLoads(localString, n, N[r], N[r+1], Nprev, Ncurr, numWorkItemsPerXForm, numWorkItemsReq, offset, xcomp);
-			insertLocalStores(localString, numIter, N[r], numWorkItemsPerXForm, numWorkItemsReq, offset, ycomp);
-			insertLocalLoads(localString, n, N[r], N[r+1], Nprev, Ncurr, numWorkItemsPerXForm, numWorkItemsReq, offset, ycomp);
-			Nprev = Ncurr;
-			len = len / N[r];
-		}
-	}
-	
-	lMemSize = insertGlobalStoresAndTranspose(localString, n, maxRadix, N[numRadix - 1], numWorkItemsPerXForm, numXFormsPerWG, plan->min_mem_coalesce_width, dataFormat);
-	(*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size;
-	
-	insertHeader(*kernelString, kernelName, dataFormat);
-	*kernelString += string("{\n");
-	if((*kInfo)->lmem_size)
-        *kernelString += string("    __local float sMem[") + num2str((*kInfo)->lmem_size) + string("];\n");
-	*kernelString += localString;
-	*kernelString += string("}\n");
-}
-
-// For n larger than what can be computed using local memory fft, global transposes
-// multiple kernel launces is needed. For these sizes, n can be decomposed using
-// much larger base radices i.e. say n = 262144 = 128 x 64 x 32. Thus three kernel
-// launches will be needed, first computing 64 x 32, length 128 ffts, second computing
-// 128 x 32 length 64 ffts, and finally a kernel computing 128 x 64 length 32 ffts. 
-// Each of these base radices can futher be divided into factors so that each of these 
-// base ffts can be computed within one kernel launch using in-register ffts and local 
-// memory transposes i.e for the first kernel above which computes 64 x 32 ffts on length 
-// 128, 128 can be decomposed into 128 = 16 x 8 i.e. 8 work items can compute 8 length 
-// 16 ffts followed by transpose using local memory followed by each of these eight 
-// work items computing 2 length 8 ffts thus computing 16 length 8 ffts in total. This 
-// means only 8 work items are needed for computing one length 128 fft. If we choose
-// work group size of say 64, we can compute 64/8 = 8 length 128 ffts within one
-// work group. Since we need to compute 64 x 32 length 128 ffts in first kernel, this 
-// means we need to launch 64 x 32 / 8 = 256 work groups with 64 work items in each 
-// work group where each work group is computing 8 length 128 ffts where each length
-// 128 fft is computed by 8 work items. Same logic can be applied to other two kernels
-// in this example. Users can play with difference base radices and difference 
-// decompositions of base radices to generates different kernels and see which gives
-// best performance. Following function is just fixed to use 128 as base radix
-
-void
-getGlobalRadixInfo(int n, int *radix, int *R1, int *R2, int *numRadices)
-{
-	int baseRadix = min(n, 128);
-	
-	int numR = 0;
-	int N = n;
-	while(N > baseRadix) 
-	{
-		N /= baseRadix;
-		numR++;
-	}
-	
-	for(int i = 0; i < numR; i++)
-		radix[i] = baseRadix;
-	
-	radix[numR] = N;
-	numR++;
-	*numRadices = numR;
-		
-	for(int i = 0; i < numR; i++)
-	{
-		int B = radix[i];
-		if(B <= 8)
-		{
-			R1[i] = B;
-			R2[i] = 1;
-			continue;
-		}
-		
-		int r1 = 2; 
-		int r2 = B / r1;
-	    while(r2 > r1)
-	    {
-		   r1 *=2;
-		   r2 = B / r1;
-	    }
-		R1[i] = r1;
-		R2[i] = r2;
-	}	
-}
-
-static void
-createGlobalFFTKernelString(cl_fft_plan *plan, int n, int BS, cl_fft_kernel_dir dir, int vertBS)
-{		
-	int i, j, k, t;
-	int radixArr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-    int R1Arr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-    int R2Arr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-	int radix, R1, R2;
-	int numRadices;
-	
-	int maxThreadsPerBlock = plan->max_work_item_per_workgroup;
-	int maxArrayLen = plan->max_radix;
-	int batchSize = plan->min_mem_coalesce_width;	
-	clFFT_DataFormat dataFormat = plan->format;
-	int vertical = (dir == cl_fft_kernel_x) ? 0 : 1;	
-	
-	getGlobalRadixInfo(n, radixArr, R1Arr, R2Arr, &numRadices);
-		
-	int numPasses = numRadices;
-	
-	string localString(""), kernelName("");
-	string *kernelString = plan->kernel_string;
-	cl_fft_kernel_info **kInfo = &plan->kernel_info; 
-	int kCount = 0;
-	
-	while(*kInfo)
-	{
-		kInfo = &(*kInfo)->next;
-		kCount++;
-	}
-	
-	int N = n;
-	int m = (int)log2(n);
-	int Rinit = vertical ? BS : 1;
-	batchSize = vertical ? min(BS, batchSize) : batchSize;
-	int passNum;
-	
-	for(passNum = 0; passNum < numPasses; passNum++) 
-	{
-		
-		localString.clear();
-		kernelName.clear();
-		
-		radix = radixArr[passNum];
-		R1 = R1Arr[passNum];
-		R2 = R2Arr[passNum];
-				
-		int strideI = Rinit;
-		for(i = 0; i < numPasses; i++)
-			if(i != passNum)
-				strideI *= radixArr[i];
-		
-		int strideO = Rinit;
-		for(i = 0; i < passNum; i++)
-			strideO *= radixArr[i];
-		
-		int threadsPerXForm = R2;
-		batchSize = R2 == 1 ? plan->max_work_item_per_workgroup : batchSize;
-		batchSize = min(batchSize, strideI);
-		int threadsPerBlock = batchSize * threadsPerXForm;
-		threadsPerBlock = min(threadsPerBlock, maxThreadsPerBlock);
-		batchSize = threadsPerBlock / threadsPerXForm;
-		assert(R2 <= R1);
-		assert(R1*R2 == radix);
-		assert(R1 <= maxArrayLen);
-		assert(threadsPerBlock <= maxThreadsPerBlock);
-		
-		int numIter = R1 / R2;
-		int gInInc = threadsPerBlock / batchSize;
-		
-		
-		int lgStrideO = log2(strideO);
-		int numBlocksPerXForm = strideI / batchSize;
-		int numBlocks = numBlocksPerXForm;
-		if(!vertical)
-			numBlocks *= BS;
-		else
-			numBlocks *= vertBS;
-		
-		kernelName = string("fft") + num2str(kCount);
-		*kInfo = (cl_fft_kernel_info *) malloc(sizeof(cl_fft_kernel_info));
-		(*kInfo)->kernel = 0;
-		if(R2 == 1)
-			(*kInfo)->lmem_size = 0;
-		else
-		{
-		    if(strideO == 1)
-		        (*kInfo)->lmem_size = (radix + 1)*batchSize;
-		    else
-			    (*kInfo)->lmem_size = threadsPerBlock*R1;
-		}
-		(*kInfo)->num_workgroups = numBlocks;
-        (*kInfo)->num_xforms_per_workgroup = 1;
-		(*kInfo)->num_workitems_per_workgroup = threadsPerBlock;
-		(*kInfo)->dir = dir;
-		if( (passNum == (numPasses - 1)) && (numPasses & 1) )
-		    (*kInfo)->in_place_possible = 1;
-		else
-			(*kInfo)->in_place_possible = 0;
-		(*kInfo)->next = NULL;
-		(*kInfo)->kernel_name = (char *) malloc(sizeof(char)*(kernelName.size()+1));
-		strcpy((*kInfo)->kernel_name, kernelName.c_str());
-		
-		insertVariables(localString, R1);
-						
-		if(vertical) 
-		{
-			localString += string("xNum = groupId >> ") + num2str((int)log2(numBlocksPerXForm)) + string(";\n");
-			localString += string("groupId = groupId & ") + num2str(numBlocksPerXForm - 1) + string(";\n");
-			localString += string("indexIn = mad24(groupId, ") + num2str(batchSize) + string(", xNum << ") + num2str((int)log2(n*BS)) + string(");\n");
-			localString += string("tid = groupId * ") + num2str(batchSize) + string(";\n");
-			localString += string("i = tid >> ") + num2str(lgStrideO) + string(";\n");
-			localString += string("j = tid & ") + num2str(strideO - 1) + string(";\n");
-			int stride = radix*Rinit;
-			for(i = 0; i < passNum; i++)
-				stride *= radixArr[i];
-			localString += string("indexOut = mad24(i, ") + num2str(stride) + string(", j + ") + string("(xNum << ") + num2str((int) log2(n*BS)) + string("));\n");
-			localString += string("bNum = groupId;\n");
-		}
-		else 
-		{
-			int lgNumBlocksPerXForm = log2(numBlocksPerXForm);
-			localString += string("bNum = groupId & ") + num2str(numBlocksPerXForm - 1) + string(";\n");
-			localString += string("xNum = groupId >> ") + num2str(lgNumBlocksPerXForm) + string(";\n");
-			localString += string("indexIn = bNum * ") + num2str(batchSize) + string(";\n");
-			localString += string("tid = indexIn;\n");
-			localString += string("i = tid >> ") + num2str(lgStrideO) + string(";\n");
-			localString += string("j = tid & ") + num2str(strideO - 1) + string(";\n"); 
-			int stride = radix*Rinit;
-			for(i = 0; i < passNum; i++)
-				stride *= radixArr[i];
-			localString += string("indexOut = mad24(i, ") + num2str(stride) + string(", j);\n");			
-			localString += string("indexIn += (xNum << ") + num2str(m) + string(");\n");
-			localString += string("indexOut += (xNum << ") + num2str(m) + string(");\n");	
-		}
-		
-		// Load Data
-		int lgBatchSize = log2(batchSize);
-		localString += string("tid = lId;\n");
-		localString += string("i = tid & ") + num2str(batchSize - 1) + string(";\n");
-		localString += string("j = tid >> ") + num2str(lgBatchSize) + string(";\n"); 
-		localString += string("indexIn += mad24(j, ") + num2str(strideI) + string(", i);\n");
-
-		if(dataFormat == clFFT_SplitComplexFormat) 
-		{
-			localString += string("in_real += indexIn;\n");
-			localString += string("in_imag += indexIn;\n");			
-			for(j = 0; j < R1; j++)
-				localString += string("a[") + num2str(j) + string("].x = in_real[") + num2str(j*gInInc*strideI) + string("];\n");
-			for(j = 0; j < R1; j++) 
-				localString += string("a[") + num2str(j) + string("].y = in_imag[") + num2str(j*gInInc*strideI) + string("];\n");
-		}
-		else 
-		{
-			localString += string("in += indexIn;\n");
-			for(j = 0; j < R1; j++)
-				localString += string("a[") + num2str(j) + string("] = in[") + num2str(j*gInInc*strideI) + string("];\n");
-	    }
-		
-		localString += string("fftKernel") + num2str(R1) + string("(a, dir);\n");							  
-		
-		if(R2 > 1)
-		{
-		    // twiddle
-		    for(k = 1; k < R1; k++) 
-		    {
-			    localString += string("ang = dir*(2.0f*M_PI*") + num2str(k) + string("/") + num2str(radix) + string(")*j;\n");
-			    localString += string("w = (float2)(native_cos(ang), native_sin(ang));\n");
-			    localString += string("a[") + num2str(k) + string("] = complexMul(a[") + num2str(k) + string("], w);\n"); 
-		    }
-		
-		    // shuffle
-		    numIter = R1 / R2;	
-		    localString += string("indexIn = mad24(j, ") + num2str(threadsPerBlock*numIter) + string(", i);\n");
-		    localString += string("lMemStore = sMem + tid;\n");
-		    localString += string("lMemLoad = sMem + indexIn;\n");
-		    for(k = 0; k < R1; k++) 
-			    localString += string("lMemStore[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].x;\n");
-		    localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");	
-		    for(k = 0; k < numIter; k++)
-			    for(t = 0; t < R2; t++)
-				    localString += string("a[") + num2str(k*R2+t) + string("].x = lMemLoad[") + num2str(t*batchSize + k*threadsPerBlock) + string("];\n");
-		    localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-		    for(k = 0; k < R1; k++) 
-			    localString += string("lMemStore[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].y;\n");
-		    localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");	
-		    for(k = 0; k < numIter; k++)
-			    for(t = 0; t < R2; t++)
-				    localString += string("a[") + num2str(k*R2+t) + string("].y = lMemLoad[") + num2str(t*batchSize + k*threadsPerBlock) + string("];\n");
-		    localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-		
-		    for(j = 0; j < numIter; j++)
-			    localString += string("fftKernel") + num2str(R2) + string("(a + ") + num2str(j*R2) + string(", dir);\n");
-		}
-		
-		// twiddle
-		if(passNum < (numPasses - 1)) 
-		{
-			localString += string("l = ((bNum << ") + num2str(lgBatchSize) + string(") + i) >> ") + num2str(lgStrideO) + string(";\n");
-			localString += string("k = j << ") + num2str((int)log2(R1/R2)) + string(";\n"); 
-			localString += string("ang1 = dir*(2.0f*M_PI/") + num2str(N) + string(")*l;\n");
-			for(t = 0; t < R1; t++) 
-			{
-				localString += string("ang = ang1*(k + ") + num2str((t%R2)*R1 + (t/R2)) + string(");\n");
-				localString += string("w = (float2)(native_cos(ang), native_sin(ang));\n");
-				localString += string("a[") + num2str(t) + string("] = complexMul(a[") + num2str(t) + string("], w);\n");
-			}
-		}
-		
-		// Store Data
-		if(strideO == 1) 
-		{
-			
-			localString += string("lMemStore = sMem + mad24(i, ") + num2str(radix + 1) + string(", j << ") + num2str((int)log2(R1/R2)) + string(");\n");
-			localString += string("lMemLoad = sMem + mad24(tid >> ") + num2str((int)log2(radix)) + string(", ") + num2str(radix+1) + string(", tid & ") + num2str(radix-1) + string(");\n");
-			
-			for(int i = 0; i < R1/R2; i++)
-				for(int j = 0; j < R2; j++)
-					localString += string("lMemStore[ ") + num2str(i + j*R1) + string("] = a[") + num2str(i*R2+j) + string("].x;\n");
-			localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-			if(threadsPerBlock >= radix)
-            {
-                for(int i = 0; i < R1; i++)
-                localString += string("a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i*(radix+1)*(threadsPerBlock/radix)) + string("];\n");
-            }
-            else
-            {
-                int innerIter = radix/threadsPerBlock;
-                int outerIter = R1/innerIter;
-                for(int i = 0; i < outerIter; i++)
-                    for(int j = 0; j < innerIter; j++)
-                        localString += string("a[") + num2str(i*innerIter+j) + string("].x = lMemLoad[") + num2str(j*threadsPerBlock + i*(radix+1)) + string("];\n");
-            }
-			localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-			
-			for(int i = 0; i < R1/R2; i++)
-				for(int j = 0; j < R2; j++)
-					localString += string("lMemStore[ ") + num2str(i + j*R1) + string("] = a[") + num2str(i*R2+j) + string("].y;\n");
-			localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-			if(threadsPerBlock >= radix)
-            {
-                for(int i = 0; i < R1; i++)
-                    localString += string("a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i*(radix+1)*(threadsPerBlock/radix)) + string("];\n");
-            }
-            else
-            {
-                int innerIter = radix/threadsPerBlock;
-                int outerIter = R1/innerIter;
-                for(int i = 0; i < outerIter; i++)
-                    for(int j = 0; j < innerIter; j++)
-                        localString += string("a[") + num2str(i*innerIter+j) + string("].y = lMemLoad[") + num2str(j*threadsPerBlock + i*(radix+1)) + string("];\n");
-            }
-			localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-			
-			localString += string("indexOut += tid;\n");
-			if(dataFormat == clFFT_SplitComplexFormat) {
-				localString += string("out_real += indexOut;\n");
-				localString += string("out_imag += indexOut;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out_real[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].x;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out_imag[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].y;\n");
-			}
-			else {
-				localString += string("out += indexOut;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("];\n");				
-			}
-		 
-		}
-		else 
-		{
-			localString += string("indexOut += mad24(j, ") + num2str(numIter*strideO) + string(", i);\n");
-			if(dataFormat == clFFT_SplitComplexFormat) {
-				localString += string("out_real += indexOut;\n");
-				localString += string("out_imag += indexOut;\n");			
-				for(k = 0; k < R1; k++)
-					localString += string("out_real[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("].x;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out_imag[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("].y;\n");
-			}
-			else {
-				localString += string("out += indexOut;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("];\n");
-			}
-		}
-		
-		insertHeader(*kernelString, kernelName, dataFormat);
-		*kernelString += string("{\n");
-		if((*kInfo)->lmem_size)
-			*kernelString += string("    __local float sMem[") + num2str((*kInfo)->lmem_size) + string("];\n");
-		*kernelString += localString;
-		*kernelString += string("}\n");		
-		
-		N /= radix;
-		kInfo = &(*kInfo)->next;
-		kCount++;
-	}
-}
-
-void FFT1D(cl_fft_plan *plan, cl_fft_kernel_dir dir)
-{	
-    unsigned int radixArray[10];
-    unsigned int numRadix;
-    
-	switch(dir)
-	{
-		case cl_fft_kernel_x:
-		    if(plan->n.x > plan->max_localmem_fft_size)
-		    {
-		        createGlobalFFTKernelString(plan, plan->n.x, 1, cl_fft_kernel_x, 1);
-		    }
-		    else if(plan->n.x > 1)
-		    {
-		        getRadixArray(plan->n.x, radixArray, &numRadix, 0);
-		        if(plan->n.x / radixArray[0] <= plan->max_work_item_per_workgroup)
-		        {
-				    createLocalMemfftKernelString(plan);
-				}
-			    else
-			    {
-			        getRadixArray(plan->n.x, radixArray, &numRadix, plan->max_radix);
-			        if(plan->n.x / radixArray[0] <= plan->max_work_item_per_workgroup)
-			            createLocalMemfftKernelString(plan);
-			        else
-				        createGlobalFFTKernelString(plan, plan->n.x, 1, cl_fft_kernel_x, 1);
-				}
-		    }
-			break;
-			
-		case cl_fft_kernel_y:
-			if(plan->n.y > 1)
-			    createGlobalFFTKernelString(plan, plan->n.y, plan->n.x, cl_fft_kernel_y, 1);
-			break;
-			
-		case cl_fft_kernel_z:
-			if(plan->n.z > 1)
-			    createGlobalFFTKernelString(plan, plan->n.z, plan->n.x*plan->n.y, cl_fft_kernel_z, 1);
-		default:
-			return;
-	}
-}
-
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/fft_kernelstring.cpp.orig b/RTCP/Cobalt/OpenCL_FFT/src/fft_kernelstring.cpp.orig
deleted file mode 100644
index bbb9298d921528032397da8a71cdafa5502a421e..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/fft_kernelstring.cpp.orig
+++ /dev/null
@@ -1,1256 +0,0 @@
-
-//
-// File:       fft_kernelstring.cpp
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#include <cstdio>
-#include <cstdlib>
-#include <cmath>
-#include <iostream>
-#include <sstream>
-#include <cstring>
-#include <cassert>
-#include "fft_internal.h"
-#include "clFFT.h"
-
-using namespace std;
-
-#define max(A,B) ((A) > (B) ? (A) : (B))
-#define min(A,B) ((A) < (B) ? (A) : (B))
-
-static string 
-num2str(int num)
-{
-	char temp[200];
-	sprintf(temp, "%d", num);
-	return string(temp);
-}
-
-// For any n, this function decomposes n into factors for loacal memory tranpose 
-// based fft. Factors (radices) are sorted such that the first one (radixArray[0])
-// is the largest. This base radix determines the number of registers used by each
-// work item and product of remaining radices determine the size of work group needed.
-// To make things concrete with and example, suppose n = 1024. It is decomposed into
-// 1024 = 16 x 16 x 4. Hence kernel uses float2 a[16], for local in-register fft and 
-// needs 16 x 4 = 64 work items per work group. So kernel first performance 64 length
-// 16 ffts (64 work items working in parallel) following by transpose using local 
-// memory followed by again 64 length 16 ffts followed by transpose using local memory
-// followed by 256 length 4 ffts. For the last step since with size of work group is 
-// 64 and each work item can array for 16 values, 64 work items can compute 256 length
-// 4 ffts by each work item computing 4 length 4 ffts. 
-// Similarly for n = 2048 = 8 x 8 x 8 x 4, each work group has 8 x 8 x 4 = 256 work
-// iterms which each computes 256 (in-parallel) length 8 ffts in-register, followed
-// by transpose using local memory, followed by 256 length 8 in-register ffts, followed
-// by transpose using local memory, followed by 256 length 8 in-register ffts, followed
-// by transpose using local memory, followed by 512 length 4 in-register ffts. Again,
-// for the last step, each work item computes two length 4 in-register ffts and thus
-// 256 work items are needed to compute all 512 ffts. 
-// For n = 32 = 8 x 4, 4 work items first compute 4 in-register 
-// lenth 8 ffts, followed by transpose using local memory followed by 8 in-register
-// length 4 ffts, where each work item computes two length 4 ffts thus 4 work items
-// can compute 8 length 4 ffts. However if work group size of say 64 is choosen, 
-// each work group can compute 64/ 4 = 16 size 32 ffts (batched transform). 
-// Users can play with these parameters to figure what gives best performance on
-// their particular device i.e. some device have less register space thus using
-// smaller base radix can avoid spilling ... some has small local memory thus 
-// using smaller work group size may be required etc
-
-static void 
-getRadixArray(unsigned int n, unsigned int *radixArray, unsigned int *numRadices, unsigned int maxRadix)
-{
-    if(maxRadix > 1)
-    {
-        maxRadix = min(n, maxRadix);
-        unsigned int cnt = 0;
-        while(n > maxRadix)
-        {
-            radixArray[cnt++] = maxRadix;
-            n /= maxRadix;
-        }
-        radixArray[cnt++] = n;
-        *numRadices = cnt;
-        return;
-    }
-
-	switch(n) 
-	{
-		case 2:
-			*numRadices = 1;
-			radixArray[0] = 2;
-			break;
-			
-		case 4:
-			*numRadices = 1;
-			radixArray[0] = 4;
-			break;
-			
-		case 8:
-			*numRadices = 1;
-			radixArray[0] = 8;
-			break;
-			
-		case 16:
-			*numRadices = 2;
-			radixArray[0] = 8; radixArray[1] = 2; 
-			break;
-			
-		case 32:
-			*numRadices = 2;
-			radixArray[0] = 8; radixArray[1] = 4;
-			break;
-			
-		case 64:
-			*numRadices = 2;
-			radixArray[0] = 8; radixArray[1] = 8;
-			break;
-			
-		case 128:
-			*numRadices = 3;
-			radixArray[0] = 8; radixArray[1] = 4; radixArray[2] = 4;
-			break;
-			
-		case 256:
-			*numRadices = 4;
-			radixArray[0] = 4; radixArray[1] = 4; radixArray[2] = 4; radixArray[3] = 4;
-			break;
-			
-		case 512:
-			*numRadices = 3;
-			radixArray[0] = 8; radixArray[1] = 8; radixArray[2] = 8;
-			break;			
-			
-		case 1024:
-			*numRadices = 3;
-			radixArray[0] = 16; radixArray[1] = 16; radixArray[2] = 4;
-			break;	
-		case 2048:
-			*numRadices = 4;
-			radixArray[0] = 8; radixArray[1] = 8; radixArray[2] = 8; radixArray[3] = 4;
-			break;
-		default:
-			*numRadices = 0;
-			return;
-	}
-}
-
-static void
-insertHeader(string &kernelString, string &kernelName, clFFT_DataFormat dataFormat)
-{
-	if(dataFormat == clFFT_SplitComplexFormat) 
-		kernelString += string("__kernel void ") + kernelName + string("(__global float *in_real, __global float *in_imag, __global float *out_real, __global float *out_imag, int dir, int S)\n");
-	else 
-		kernelString += string("__kernel void ") + kernelName + string("(__global float2 *in, __global float2 *out, int dir, int S)\n");
-}
-
-static void 
-insertVariables(string &kStream, int maxRadix)
-{
-	kStream += string("    int i, j, r, indexIn, indexOut, index, tid, bNum, xNum, k, l;\n");
-    kStream += string("    int s, ii, jj, offset;\n");
-	kStream += string("    float2 w;\n");
-	kStream += string("    float ang, angf, ang1;\n");
-    kStream += string("    __local float *lMemStore, *lMemLoad;\n");
-    kStream += string("    float2 a[") +  num2str(maxRadix) + string("];\n");
-    kStream += string("    int lId = get_local_id( 0 );\n");
-    kStream += string("    int groupId = get_group_id( 0 );\n");
-}
-
-static void
-formattedLoad(string &kernelString, int aIndex, int gIndex, clFFT_DataFormat dataFormat)
-{
-	if(dataFormat == clFFT_InterleavedComplexFormat)
-		kernelString += string("        a[") + num2str(aIndex) + string("] = in[") + num2str(gIndex) + string("];\n");
-	else
-	{
-		kernelString += string("        a[") + num2str(aIndex) + string("].x = in_real[") + num2str(gIndex) + string("];\n");
-		kernelString += string("        a[") + num2str(aIndex) + string("].y = in_imag[") + num2str(gIndex) + string("];\n");
-	}
-}
-
-static void
-formattedStore(string &kernelString, int aIndex, int gIndex, clFFT_DataFormat dataFormat)
-{
-	if(dataFormat == clFFT_InterleavedComplexFormat)
-		kernelString += string("        out[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("];\n");
-	else
-	{
-		kernelString += string("        out_real[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("].x;\n");
-		kernelString += string("        out_imag[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("].y;\n");
-	}
-}
-
-static int
-insertGlobalLoadsAndTranspose(string &kernelString, int N, int numWorkItemsPerXForm, int numXFormsPerWG, int R0, int mem_coalesce_width, clFFT_DataFormat dataFormat)
-{
-	int log2NumWorkItemsPerXForm = (int) log2(numWorkItemsPerXForm);
-	int groupSize = numWorkItemsPerXForm * numXFormsPerWG;
-	int i, j;
-	int lMemSize = 0;
-	
-	if(numXFormsPerWG > 1)
-	    kernelString += string("        s = S & ") + num2str(numXFormsPerWG - 1) + string(";\n");
-	
-    if(numWorkItemsPerXForm >= mem_coalesce_width)
-    {   		
-		if(numXFormsPerWG > 1)
-		{
-            kernelString += string("    ii = lId & ") + num2str(numWorkItemsPerXForm-1) + string(";\n");
-            kernelString += string("    jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n");
-            kernelString += string("    if( !s || (groupId < get_num_groups(0)-1) || (jj < s) ) {\n");
-			kernelString += string("        offset = mad24( mad24(groupId, ") + num2str(numXFormsPerWG) + string(", jj), ") + num2str(N) + string(", ii );\n");
-			if(dataFormat == clFFT_InterleavedComplexFormat)
-			{
-			    kernelString += string("        in += offset;\n");
-			    kernelString += string("        out += offset;\n");
-			}
-			else
-			{
-			    kernelString += string("        in_real += offset;\n");
-				kernelString += string("        in_imag += offset;\n");
-			    kernelString += string("        out_real += offset;\n");
-				kernelString += string("        out_imag += offset;\n");
-			}
-			for(i = 0; i < R0; i++)
-				formattedLoad(kernelString, i, i*numWorkItemsPerXForm, dataFormat);
-			kernelString += string("    }\n");
-		}
-		else
-		{
-			kernelString += string("    ii = lId;\n");
-			kernelString += string("    jj = 0;\n");
-			kernelString += string("    offset =  mad24(groupId, ") + num2str(N) + string(", ii);\n");
-			if(dataFormat == clFFT_InterleavedComplexFormat)
-			{
-			    kernelString += string("        in += offset;\n");
-			    kernelString += string("        out += offset;\n");
-			}
-			else
-			{
-			    kernelString += string("        in_real += offset;\n");
-				kernelString += string("        in_imag += offset;\n");
-			    kernelString += string("        out_real += offset;\n");
-				kernelString += string("        out_imag += offset;\n");
-			}
-			for(i = 0; i < R0; i++)
-				formattedLoad(kernelString, i, i*numWorkItemsPerXForm, dataFormat);
-		}
-    }
-    else if( N >= mem_coalesce_width )
-    {
-        int numInnerIter = N / mem_coalesce_width;
-        int numOuterIter = numXFormsPerWG / ( groupSize / mem_coalesce_width );
-		
-        kernelString += string("    ii = lId & ") + num2str(mem_coalesce_width - 1) + string(";\n");
-        kernelString += string("    jj = lId >> ") + num2str((int)log2(mem_coalesce_width)) + string(";\n");
-        kernelString += string("    lMemStore = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");
-        kernelString += string("    offset = mad24( groupId, ") + num2str(numXFormsPerWG) + string(", jj);\n");
-        kernelString += string("    offset = mad24( offset, ") + num2str(N) + string(", ii );\n");
-		if(dataFormat == clFFT_InterleavedComplexFormat)
-		{
-			kernelString += string("        in += offset;\n");
-			kernelString += string("        out += offset;\n");
-		}
-		else
-		{
-			kernelString += string("        in_real += offset;\n");
-			kernelString += string("        in_imag += offset;\n");
-			kernelString += string("        out_real += offset;\n");
-			kernelString += string("        out_imag += offset;\n");
-		}
-        
-		kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n");
-        for(i = 0; i < numOuterIter; i++ )
-        {
-            kernelString += string("    if( jj < s ) {\n");
-			for(j = 0; j < numInnerIter; j++ ) 
-				formattedLoad(kernelString, i * numInnerIter + j, j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * N, dataFormat);
-			kernelString += string("    }\n"); 
-			if(i != numOuterIter - 1)
-			    kernelString += string("    jj += ") + num2str(groupSize / mem_coalesce_width) + string(";\n");			 
-        }
-		kernelString += string("}\n ");
-		kernelString += string("else {\n");
-        for(i = 0; i < numOuterIter; i++ )
-        {
-			for(j = 0; j < numInnerIter; j++ ) 
-				formattedLoad(kernelString, i * numInnerIter + j, j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * N, dataFormat);			
-        }		
-		kernelString += string("}\n");
-        
-		kernelString += string("    ii = lId & ") + num2str(numWorkItemsPerXForm - 1) + string(";\n");
-		kernelString += string("    jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n");
-        kernelString += string("    lMemLoad  = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii);\n");  
-		
-        for( i = 0; i < numOuterIter; i++ )
-		{
-			for( j = 0; j < numInnerIter; j++ )
-			{	
-				kernelString += string("    lMemStore[") + num2str(j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * (N + numWorkItemsPerXForm )) + string("] = a[") + 
-				                num2str(i * numInnerIter + j) + string("].x;\n");
-			}
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-        
-        for( i = 0; i < R0; i++ )
-			kernelString += string("    a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n");            
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");  
-
-	    for( i = 0; i < numOuterIter; i++ )
-		{
-			for( j = 0; j < numInnerIter; j++ )
-			{	
-				kernelString += string("    lMemStore[") + num2str(j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * (N + numWorkItemsPerXForm )) + string("] = a[") + 
-								num2str(i * numInnerIter + j) + string("].y;\n");
-			}
-	    }	
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-																						   
-		for( i = 0; i < R0; i++ )
-			kernelString += string("    a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n");            
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");  
-		
-		lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG;
-    }  
-    else
-    {
-        kernelString += string("    offset = mad24( groupId,  ") + num2str(N * numXFormsPerWG) + string(", lId );\n");
-		if(dataFormat == clFFT_InterleavedComplexFormat)
-		{
-			kernelString += string("        in += offset;\n");
-			kernelString += string("        out += offset;\n");
-		}
-		else
-		{
-			kernelString += string("        in_real += offset;\n");
-			kernelString += string("        in_imag += offset;\n");
-			kernelString += string("        out_real += offset;\n");
-			kernelString += string("        out_imag += offset;\n");
-		}
-        
-        kernelString += string("    ii = lId & ") + num2str(N-1) + string(";\n");
-        kernelString += string("    jj = lId >> ") + num2str((int)log2(N)) + string(";\n");
-        kernelString += string("    lMemStore = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");
-        
-		kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n");
-        for( i = 0; i < R0; i++ )
-        {
-            kernelString += string("    if(jj < s )\n");
-			formattedLoad(kernelString, i, i*groupSize, dataFormat);
-			if(i != R0 - 1)
-			    kernelString += string("    jj += ") + num2str(groupSize / N) + string(";\n");
-        }
-		kernelString += string("}\n");
-		kernelString += string("else {\n");
-        for( i = 0; i < R0; i++ )
-        {
-			formattedLoad(kernelString, i, i*groupSize, dataFormat);
-        }		
-		kernelString += string("}\n");
-        
-		if(numWorkItemsPerXForm > 1)
-		{
-            kernelString += string("    ii = lId & ") + num2str(numWorkItemsPerXForm - 1) + string(";\n");
-            kernelString += string("    jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n");
-            kernelString += string("    lMemLoad = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); 
-		}
-		else 
-		{
-            kernelString += string("    ii = 0;\n");
-            kernelString += string("    jj = lId;\n");
-            kernelString += string("    lMemLoad = sMem + mul24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(");\n"); 			
-		}
-
-		
-        for( i = 0; i < R0; i++ )
-            kernelString += string("    lMemStore[") + num2str(i * ( groupSize / N ) * ( N + numWorkItemsPerXForm )) + string("] = a[") + num2str(i) + string("].x;\n"); 
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-        
-        for( i = 0; i < R0; i++ )
-            kernelString += string("    a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n");
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-        
-        for( i = 0; i < R0; i++ )
-            kernelString += string("    lMemStore[") + num2str(i * ( groupSize / N ) * ( N + numWorkItemsPerXForm )) + string("] = a[") + num2str(i) + string("].y;\n"); 
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-        
-        for( i = 0; i < R0; i++ )
-            kernelString += string("    a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n");
-		kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-		
-		lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG;
-    }
-	
-	return lMemSize;
-}
-
-static int
-insertGlobalStoresAndTranspose(string &kernelString, int N, int maxRadix, int Nr, int numWorkItemsPerXForm, int numXFormsPerWG, int mem_coalesce_width, clFFT_DataFormat dataFormat)
-{
-	int groupSize = numWorkItemsPerXForm * numXFormsPerWG;
-	int i, j, k, ind;
-	int lMemSize = 0;
-	int numIter = maxRadix / Nr;
-	string indent = string("");
-	
-    if( numWorkItemsPerXForm >= mem_coalesce_width )
-    {   
-		if(numXFormsPerWG > 1)
-		{
-            kernelString += string("    if( !s || (groupId < get_num_groups(0)-1) || (jj < s) ) {\n");
-			indent = string("    ");
-		}	
-		for(i = 0; i < maxRadix; i++) 
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-			formattedStore(kernelString, ind, i*numWorkItemsPerXForm, dataFormat);
-		}
-		if(numXFormsPerWG > 1)
-		    kernelString += string("    }\n");
-    }
-    else if( N >= mem_coalesce_width )
-    {
-        int numInnerIter = N / mem_coalesce_width;
-        int numOuterIter = numXFormsPerWG / ( groupSize / mem_coalesce_width );
-		
-        kernelString += string("    lMemLoad  = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");  
-        kernelString += string("    ii = lId & ") + num2str(mem_coalesce_width - 1) + string(";\n");
-        kernelString += string("    jj = lId >> ") + num2str((int)log2(mem_coalesce_width)) + string(";\n");
-        kernelString += string("    lMemStore = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");
-		
-        for( i = 0; i < maxRadix; i++ )
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-            kernelString += string("    lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].x;\n");            
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");         
-		
-        for( i = 0; i < numOuterIter; i++ )
-			for( j = 0; j < numInnerIter; j++ )
-				kernelString += string("    a[") + num2str(i*numInnerIter + j) + string("].x = lMemStore[") + num2str(j*mem_coalesce_width + i*( groupSize / mem_coalesce_width )*(N + numWorkItemsPerXForm)) + string("];\n");
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-		
-        for( i = 0; i < maxRadix; i++ )
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-            kernelString += string("    lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].y;\n");            
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");         
-		
-        for( i = 0; i < numOuterIter; i++ )
-			for( j = 0; j < numInnerIter; j++ )
-				kernelString += string("    a[") + num2str(i*numInnerIter + j) + string("].y = lMemStore[") + num2str(j*mem_coalesce_width + i*( groupSize / mem_coalesce_width )*(N + numWorkItemsPerXForm)) + string("];\n");
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-		
-		kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n");
-		for(i = 0; i < numOuterIter; i++ )
-        {
-            kernelString += string("    if( jj < s ) {\n");
-			for(j = 0; j < numInnerIter; j++ ) 
-				formattedStore(kernelString, i*numInnerIter + j, j*mem_coalesce_width + i*(groupSize/mem_coalesce_width)*N, dataFormat); 
-			kernelString += string("    }\n"); 
-			if(i != numOuterIter - 1)
-			    kernelString += string("    jj += ") + num2str(groupSize / mem_coalesce_width) + string(";\n");			 
-        }
-		kernelString += string("}\n");
-		kernelString += string("else {\n");
-		for(i = 0; i < numOuterIter; i++ )
-        {
-			for(j = 0; j < numInnerIter; j++ ) 
-				formattedStore(kernelString, i*numInnerIter + j, j*mem_coalesce_width + i*(groupSize/mem_coalesce_width)*N, dataFormat); 
-        }		
-		kernelString += string("}\n");
-		
-		lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG;
-	}   	
-    else
-    {   
-        kernelString += string("    lMemLoad  = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");  
-        
-		kernelString += string("    ii = lId & ") + num2str(N - 1) + string(";\n");
-        kernelString += string("    jj = lId >> ") + num2str((int) log2(N)) + string(";\n");
-        kernelString += string("    lMemStore = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n");
-        
-        for( i = 0; i < maxRadix; i++ )
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-            kernelString += string("    lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].x;\n");
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-        
-        for( i = 0; i < maxRadix; i++ )
-            kernelString += string("    a[") + num2str(i) + string("].x = lMemStore[") + num2str(i*( groupSize / N )*( N + numWorkItemsPerXForm )) + string("];\n"); 
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-        
-        for( i = 0; i < maxRadix; i++ )
-		{
-			j = i % numIter;
-			k = i / numIter;
-			ind = j * Nr + k;
-            kernelString += string("    lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].y;\n");
-		}	
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n");
-        
-        for( i = 0; i < maxRadix; i++ )
-            kernelString += string("    a[") + num2str(i) + string("].y = lMemStore[") + num2str(i*( groupSize / N )*( N + numWorkItemsPerXForm )) + string("];\n"); 
-        kernelString += string("    barrier( CLK_LOCAL_MEM_FENCE );\n"); 
-        
-		kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n");
-		for( i = 0; i < maxRadix; i++ )
-        {
-            kernelString += string("    if(jj < s ) {\n");
-			formattedStore(kernelString, i, i*groupSize, dataFormat);
-			kernelString += string("    }\n");
-			if( i != maxRadix - 1)
-				kernelString += string("    jj +=") + num2str(groupSize / N) + string(";\n");
-        } 
-		kernelString += string("}\n");
-		kernelString += string("else {\n");
-		for( i = 0; i < maxRadix; i++ )
-        {
-			formattedStore(kernelString, i, i*groupSize, dataFormat);
-        } 		
-		kernelString += string("}\n");
-		
-		lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG;
-    }
-	
-	return lMemSize;
-}
-
-static void 
-insertfftKernel(string &kernelString, int Nr, int numIter)
-{
-	int i;
-	for(i = 0; i < numIter; i++) 
-	{
-		kernelString += string("    fftKernel") + num2str(Nr) + string("(a+") + num2str(i*Nr) + string(", dir);\n");
-	}
-}
-
-static void
-insertTwiddleKernel(string &kernelString, int Nr, int numIter, int Nprev, int len, int numWorkItemsPerXForm)
-{
-	int z, k;
-	int logNPrev = log2(Nprev);
-	
-	for(z = 0; z < numIter; z++) 
-	{
-		if(z == 0)
-		{
-			if(Nprev > 1)
-			    kernelString += string("    angf = (float) (ii >> ") + num2str(logNPrev) + string(");\n");
-			else
-				kernelString += string("    angf = (float) ii;\n");
-		}	
-		else
-		{
-			if(Nprev > 1)
-			    kernelString += string("    angf = (float) ((") + num2str(z*numWorkItemsPerXForm) + string(" + ii) >>") + num2str(logNPrev) + string(");\n"); 
-			else
-				kernelString += string("    angf = (float) (") + num2str(z*numWorkItemsPerXForm) + string(" + ii);\n");
-		}	
-	
-		for(k = 1; k < Nr; k++) {
-			int ind = z*Nr + k;
-			//float fac =  (float) (2.0 * M_PI * (double) k / (double) len);
-			kernelString += string("    ang = dir * ( 2.0f * M_PI * ") + num2str(k) + string(".0f / ") + num2str(len) + string(".0f )") + string(" * angf;\n");
-			kernelString += string("    w = (float2)(native_cos(ang), native_sin(ang));\n");
-			kernelString += string("    a[") + num2str(ind) + string("] = complexMul(a[") + num2str(ind) + string("], w);\n");
-		}
-	}
-}
-
-static int
-getPadding(int numWorkItemsPerXForm, int Nprev, int numWorkItemsReq, int numXFormsPerWG, int Nr, int numBanks, int *offset, int *midPad)
-{
-	if((numWorkItemsPerXForm <= Nprev) || (Nprev >= numBanks))
-		*offset = 0;
-	else {
-		int numRowsReq = ((numWorkItemsPerXForm < numBanks) ? numWorkItemsPerXForm : numBanks) / Nprev;
-		int numColsReq = 1;
-		if(numRowsReq > Nr)
-			numColsReq = numRowsReq / Nr;
-		numColsReq = Nprev * numColsReq;
-		*offset = numColsReq;
-	}
-	
-	if(numWorkItemsPerXForm >= numBanks || numXFormsPerWG == 1)
-		*midPad = 0;
-	else {
-		int bankNum = ( (numWorkItemsReq + *offset) * Nr ) & (numBanks - 1);
-		if( bankNum >= numWorkItemsPerXForm )
-			*midPad = 0;
-		else
-			*midPad = numWorkItemsPerXForm - bankNum;
-	}
-	
-	int lMemSize = ( numWorkItemsReq + *offset) * Nr * numXFormsPerWG + *midPad * (numXFormsPerWG - 1);
-	return lMemSize;
-}
-
-
-static void 
-insertLocalStores(string &kernelString, int numIter, int Nr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, string &comp)
-{
-	int z, k;
-
-	for(z = 0; z < numIter; z++) {
-		for(k = 0; k < Nr; k++) {
-			int index = k*(numWorkItemsReq + offset) + z*numWorkItemsPerXForm;
-			kernelString += string("    lMemStore[") + num2str(index) + string("] = a[") + num2str(z*Nr + k) + string("].") + comp + string(";\n");
-		}
-	}
-	kernelString += string("    barrier(CLK_LOCAL_MEM_FENCE);\n");
-}
-
-static void 
-insertLocalLoads(string &kernelString, int n, int Nr, int Nrn, int Nprev, int Ncurr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, string &comp)
-{
-	int numWorkItemsReqN = n / Nrn;										
-	int interBlockHNum = max( Nprev / numWorkItemsPerXForm, 1 );			
-	int interBlockHStride = numWorkItemsPerXForm;							
-	int vertWidth = max(numWorkItemsPerXForm / Nprev, 1);					
-	vertWidth = min( vertWidth, Nr);									
-	int vertNum = Nr / vertWidth;										
-	int vertStride = ( n / Nr + offset ) * vertWidth;					
-	int iter = max( numWorkItemsReqN / numWorkItemsPerXForm, 1);
-	int intraBlockHStride = (numWorkItemsPerXForm / (Nprev*Nr)) > 1 ? (numWorkItemsPerXForm / (Nprev*Nr)) : 1;
-	intraBlockHStride *= Nprev;
-	
-	int stride = numWorkItemsReq / Nrn;									
-	int i;
-	for(i = 0; i < iter; i++) {
-		int ii = i / (interBlockHNum * vertNum);
-		int zz = i % (interBlockHNum * vertNum);
-		int jj = zz % interBlockHNum;
-		int kk = zz / interBlockHNum;
-		int z;
-		for(z = 0; z < Nrn; z++) {
-			int st = kk * vertStride + jj * interBlockHStride + ii * intraBlockHStride + z * stride;
-			kernelString += string("    a[") + num2str(i*Nrn + z) + string("].") + comp + string(" = lMemLoad[") + num2str(st) + string("];\n");
-		}
-	}
-	kernelString += string("    barrier(CLK_LOCAL_MEM_FENCE);\n");
-}
-
-static void
-insertLocalLoadIndexArithmatic(string &kernelString, int Nprev, int Nr, int numWorkItemsReq, int numWorkItemsPerXForm, int numXFormsPerWG, int offset, int midPad)
-{	
-	int Ncurr = Nprev * Nr;
-	int logNcurr = log2(Ncurr);
-	int logNprev = log2(Nprev);
-	int incr = (numWorkItemsReq + offset) * Nr + midPad;
-	
-	if(Ncurr < numWorkItemsPerXForm) 
-	{
-		if(Nprev == 1)
-		    kernelString += string("    j = ii & ") + num2str(Ncurr - 1) + string(";\n");
-		else
-			kernelString += string("    j = (ii & ") + num2str(Ncurr - 1) + string(") >> ") + num2str(logNprev) + string(";\n");
-		
-		if(Nprev == 1) 
-			kernelString += string("    i = ii >> ") + num2str(logNcurr) + string(";\n");
-		else 
-			kernelString += string("    i = mad24(ii >> ") + num2str(logNcurr) + string(", ") + num2str(Nprev) + string(", ii & ") + num2str(Nprev - 1) + string(");\n"); 
-	}	
-	else 
-	{
-		if(Nprev == 1)
-		    kernelString += string("    j = ii;\n");
-		else
-			kernelString += string("    j = ii >> ") + num2str(logNprev) + string(";\n");
-		if(Nprev == 1) 
-			kernelString += string("    i = 0;\n"); 
-		else 
-			kernelString += string("    i = ii & ") + num2str(Nprev - 1) + string(";\n");
-	}
-
-    if(numXFormsPerWG > 1)
-        kernelString += string("    i = mad24(jj, ") + num2str(incr) + string(", i);\n");		
-
-    kernelString += string("    lMemLoad = sMem + mad24(j, ") + num2str(numWorkItemsReq + offset) + string(", i);\n"); 
-}
-
-static void
-insertLocalStoreIndexArithmatic(string &kernelString, int numWorkItemsReq, int numXFormsPerWG, int Nr, int offset, int midPad)
-{
-	if(numXFormsPerWG == 1) {
-		kernelString += string("    lMemStore = sMem + ii;\n");		
-	}
-	else {
-		kernelString += string("    lMemStore = sMem + mad24(jj, ") + num2str((numWorkItemsReq + offset)*Nr + midPad) + string(", ii);\n");	
-	}
-}
-
-
-static void
-createLocalMemfftKernelString(cl_fft_plan *plan)
-{
-	unsigned int radixArray[10];
-	unsigned int numRadix;
-	 
-	unsigned int n = plan->n.x;
-	
-	assert(n <= plan->max_work_item_per_workgroup * plan->max_radix && "signal lenght too big for local mem fft\n");
-	
-	getRadixArray(n, radixArray, &numRadix, 0);
-	assert(numRadix > 0 && "no radix array supplied\n");
-	
-	if(n/radixArray[0] > plan->max_work_item_per_workgroup)
-	    getRadixArray(n, radixArray, &numRadix, plan->max_radix);
-
-	assert(radixArray[0] <= plan->max_radix && "max radix choosen is greater than allowed\n");
-	assert(n/radixArray[0] <= plan->max_work_item_per_workgroup && "required work items per xform greater than maximum work items allowed per work group for local mem fft\n");
-	
-	unsigned int tmpLen = 1;
-	unsigned int i;
-	for(i = 0; i < numRadix; i++)
-	{	
-		assert( radixArray[i] && !( (radixArray[i] - 1) & radixArray[i] ) );
-	    tmpLen *= radixArray[i];
-	}
-	assert(tmpLen == n && "product of radices choosen doesnt match the length of signal\n");
-	
-	int offset, midPad;
-	string localString(""), kernelName("");
-	
-	clFFT_DataFormat dataFormat = plan->format;
-	string *kernelString = plan->kernel_string;
-	
-	
-	cl_fft_kernel_info **kInfo = &plan->kernel_info;
-	int kCount = 0;
-	
-	while(*kInfo)
-	{
-		kInfo = &(*kInfo)->next;
-		kCount++;
-	}
-	
-	kernelName = string("fft") + num2str(kCount);
-	
-	*kInfo = (cl_fft_kernel_info *) malloc(sizeof(cl_fft_kernel_info));
-	(*kInfo)->kernel = 0;
-	(*kInfo)->lmem_size = 0;
-	(*kInfo)->num_workgroups = 0;
-	(*kInfo)->num_workitems_per_workgroup = 0;
-	(*kInfo)->dir = cl_fft_kernel_x;
-	(*kInfo)->in_place_possible = 1;
-	(*kInfo)->next = NULL;
-	(*kInfo)->kernel_name = (char *) malloc(sizeof(char)*(kernelName.size()+1));
-	strcpy((*kInfo)->kernel_name, kernelName.c_str());
-	
-	unsigned int numWorkItemsPerXForm = n / radixArray[0];
-	unsigned int numWorkItemsPerWG = numWorkItemsPerXForm <= 64 ? 64 : numWorkItemsPerXForm; 
-	assert(numWorkItemsPerWG <= plan->max_work_item_per_workgroup);
-	int numXFormsPerWG = numWorkItemsPerWG / numWorkItemsPerXForm;
-	(*kInfo)->num_workgroups = 1;
-    (*kInfo)->num_xforms_per_workgroup = numXFormsPerWG;
-	(*kInfo)->num_workitems_per_workgroup = numWorkItemsPerWG;
-	
-	unsigned int *N = radixArray;
-	unsigned int maxRadix = N[0];
-	unsigned int lMemSize = 0;
-		
-	insertVariables(localString, maxRadix);
-	
-	lMemSize = insertGlobalLoadsAndTranspose(localString, n, numWorkItemsPerXForm, numXFormsPerWG, maxRadix, plan->min_mem_coalesce_width, dataFormat);
-	(*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size;
-	
-	string xcomp = string("x");
-	string ycomp = string("y");
-	
-	unsigned int Nprev = 1;
-	unsigned int len = n;
-	unsigned int r;
-	for(r = 0; r < numRadix; r++) 
-	{
-		int numIter = N[0] / N[r];
-		int numWorkItemsReq = n / N[r];
-		int Ncurr = Nprev * N[r];
-		insertfftKernel(localString, N[r], numIter);
-		
-		if(r < (numRadix - 1)) {
-			insertTwiddleKernel(localString, N[r], numIter, Nprev, len, numWorkItemsPerXForm);
-			lMemSize = getPadding(numWorkItemsPerXForm, Nprev, numWorkItemsReq, numXFormsPerWG, N[r], plan->num_local_mem_banks, &offset, &midPad);
-			(*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size;
-			insertLocalStoreIndexArithmatic(localString, numWorkItemsReq, numXFormsPerWG, N[r], offset, midPad);
-			insertLocalLoadIndexArithmatic(localString, Nprev, N[r], numWorkItemsReq, numWorkItemsPerXForm, numXFormsPerWG, offset, midPad);
-			insertLocalStores(localString, numIter, N[r], numWorkItemsPerXForm, numWorkItemsReq, offset, xcomp);
-			insertLocalLoads(localString, n, N[r], N[r+1], Nprev, Ncurr, numWorkItemsPerXForm, numWorkItemsReq, offset, xcomp);
-			insertLocalStores(localString, numIter, N[r], numWorkItemsPerXForm, numWorkItemsReq, offset, ycomp);
-			insertLocalLoads(localString, n, N[r], N[r+1], Nprev, Ncurr, numWorkItemsPerXForm, numWorkItemsReq, offset, ycomp);
-			Nprev = Ncurr;
-			len = len / N[r];
-		}
-	}
-	
-	lMemSize = insertGlobalStoresAndTranspose(localString, n, maxRadix, N[numRadix - 1], numWorkItemsPerXForm, numXFormsPerWG, plan->min_mem_coalesce_width, dataFormat);
-	(*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size;
-	
-	insertHeader(*kernelString, kernelName, dataFormat);
-	*kernelString += string("{\n");
-	if((*kInfo)->lmem_size)
-        *kernelString += string("    __local float sMem[") + num2str((*kInfo)->lmem_size) + string("];\n");
-	*kernelString += localString;
-	*kernelString += string("}\n");
-}
-
-// For n larger than what can be computed using local memory fft, global transposes
-// multiple kernel launces is needed. For these sizes, n can be decomposed using
-// much larger base radices i.e. say n = 262144 = 128 x 64 x 32. Thus three kernel
-// launches will be needed, first computing 64 x 32, length 128 ffts, second computing
-// 128 x 32 length 64 ffts, and finally a kernel computing 128 x 64 length 32 ffts. 
-// Each of these base radices can futher be divided into factors so that each of these 
-// base ffts can be computed within one kernel launch using in-register ffts and local 
-// memory transposes i.e for the first kernel above which computes 64 x 32 ffts on length 
-// 128, 128 can be decomposed into 128 = 16 x 8 i.e. 8 work items can compute 8 length 
-// 16 ffts followed by transpose using local memory followed by each of these eight 
-// work items computing 2 length 8 ffts thus computing 16 length 8 ffts in total. This 
-// means only 8 work items are needed for computing one length 128 fft. If we choose
-// work group size of say 64, we can compute 64/8 = 8 length 128 ffts within one
-// work group. Since we need to compute 64 x 32 length 128 ffts in first kernel, this 
-// means we need to launch 64 x 32 / 8 = 256 work groups with 64 work items in each 
-// work group where each work group is computing 8 length 128 ffts where each length
-// 128 fft is computed by 8 work items. Same logic can be applied to other two kernels
-// in this example. Users can play with difference base radices and difference 
-// decompositions of base radices to generates different kernels and see which gives
-// best performance. Following function is just fixed to use 128 as base radix
-
-void
-getGlobalRadixInfo(int n, int *radix, int *R1, int *R2, int *numRadices)
-{
-	int baseRadix = min(n, 128);
-	
-	int numR = 0;
-	int N = n;
-	while(N > baseRadix) 
-	{
-		N /= baseRadix;
-		numR++;
-	}
-	
-	for(int i = 0; i < numR; i++)
-		radix[i] = baseRadix;
-	
-	radix[numR] = N;
-	numR++;
-	*numRadices = numR;
-		
-	for(int i = 0; i < numR; i++)
-	{
-		int B = radix[i];
-		if(B <= 8)
-		{
-			R1[i] = B;
-			R2[i] = 1;
-			continue;
-		}
-		
-		int r1 = 2; 
-		int r2 = B / r1;
-	    while(r2 > r1)
-	    {
-		   r1 *=2;
-		   r2 = B / r1;
-	    }
-		R1[i] = r1;
-		R2[i] = r2;
-	}	
-}
-
-static void
-createGlobalFFTKernelString(cl_fft_plan *plan, int n, int BS, cl_fft_kernel_dir dir, int vertBS)
-{		
-	int i, j, k, t;
-	int radixArr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-    int R1Arr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-    int R2Arr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-	int radix, R1, R2;
-	int numRadices;
-	
-	int maxThreadsPerBlock = plan->max_work_item_per_workgroup;
-	int maxArrayLen = plan->max_radix;
-	int batchSize = plan->min_mem_coalesce_width;	
-	clFFT_DataFormat dataFormat = plan->format;
-	int vertical = (dir == cl_fft_kernel_x) ? 0 : 1;	
-	
-	getGlobalRadixInfo(n, radixArr, R1Arr, R2Arr, &numRadices);
-		
-	int numPasses = numRadices;
-	
-	string localString(""), kernelName("");
-	string *kernelString = plan->kernel_string;
-	cl_fft_kernel_info **kInfo = &plan->kernel_info; 
-	int kCount = 0;
-	
-	while(*kInfo)
-	{
-		kInfo = &(*kInfo)->next;
-		kCount++;
-	}
-	
-	int N = n;
-	int m = (int)log2(n);
-	int Rinit = vertical ? BS : 1;
-	batchSize = vertical ? min(BS, batchSize) : batchSize;
-	int passNum;
-	
-	for(passNum = 0; passNum < numPasses; passNum++) 
-	{
-		
-		localString.clear();
-		kernelName.clear();
-		
-		radix = radixArr[passNum];
-		R1 = R1Arr[passNum];
-		R2 = R2Arr[passNum];
-				
-		int strideI = Rinit;
-		for(i = 0; i < numPasses; i++)
-			if(i != passNum)
-				strideI *= radixArr[i];
-		
-		int strideO = Rinit;
-		for(i = 0; i < passNum; i++)
-			strideO *= radixArr[i];
-		
-		int threadsPerXForm = R2;
-		batchSize = R2 == 1 ? plan->max_work_item_per_workgroup : batchSize;
-		batchSize = min(batchSize, strideI);
-		int threadsPerBlock = batchSize * threadsPerXForm;
-		threadsPerBlock = min(threadsPerBlock, maxThreadsPerBlock);
-		batchSize = threadsPerBlock / threadsPerXForm;
-		assert(R2 <= R1);
-		assert(R1*R2 == radix);
-		assert(R1 <= maxArrayLen);
-		assert(threadsPerBlock <= maxThreadsPerBlock);
-		
-		int numIter = R1 / R2;
-		int gInInc = threadsPerBlock / batchSize;
-		
-		
-		int lgStrideO = log2(strideO);
-		int numBlocksPerXForm = strideI / batchSize;
-		int numBlocks = numBlocksPerXForm;
-		if(!vertical)
-			numBlocks *= BS;
-		else
-			numBlocks *= vertBS;
-		
-		kernelName = string("fft") + num2str(kCount);
-		*kInfo = (cl_fft_kernel_info *) malloc(sizeof(cl_fft_kernel_info));
-		(*kInfo)->kernel = 0;
-		if(R2 == 1)
-			(*kInfo)->lmem_size = 0;
-		else
-		{
-		    if(strideO == 1)
-		        (*kInfo)->lmem_size = (radix + 1)*batchSize;
-		    else
-			    (*kInfo)->lmem_size = threadsPerBlock*R1;
-		}
-		(*kInfo)->num_workgroups = numBlocks;
-        (*kInfo)->num_xforms_per_workgroup = 1;
-		(*kInfo)->num_workitems_per_workgroup = threadsPerBlock;
-		(*kInfo)->dir = dir;
-		if( (passNum == (numPasses - 1)) && (numPasses & 1) )
-		    (*kInfo)->in_place_possible = 1;
-		else
-			(*kInfo)->in_place_possible = 0;
-		(*kInfo)->next = NULL;
-		(*kInfo)->kernel_name = (char *) malloc(sizeof(char)*(kernelName.size()+1));
-		strcpy((*kInfo)->kernel_name, kernelName.c_str());
-		
-		insertVariables(localString, R1);
-						
-		if(vertical) 
-		{
-			localString += string("xNum = groupId >> ") + num2str((int)log2(numBlocksPerXForm)) + string(";\n");
-			localString += string("groupId = groupId & ") + num2str(numBlocksPerXForm - 1) + string(";\n");
-			localString += string("indexIn = mad24(groupId, ") + num2str(batchSize) + string(", xNum << ") + num2str((int)log2(n*BS)) + string(");\n");
-			localString += string("tid = mul24(groupId, ") + num2str(batchSize) + string(");\n");
-			localString += string("i = tid >> ") + num2str(lgStrideO) + string(";\n");
-			localString += string("j = tid & ") + num2str(strideO - 1) + string(";\n");
-			int stride = radix*Rinit;
-			for(i = 0; i < passNum; i++)
-				stride *= radixArr[i];
-			localString += string("indexOut = mad24(i, ") + num2str(stride) + string(", j + ") + string("(xNum << ") + num2str((int) log2(n*BS)) + string("));\n");
-			localString += string("bNum = groupId;\n");
-		}
-		else 
-		{
-			int lgNumBlocksPerXForm = log2(numBlocksPerXForm);
-			localString += string("bNum = groupId & ") + num2str(numBlocksPerXForm - 1) + string(";\n");
-			localString += string("xNum = groupId >> ") + num2str(lgNumBlocksPerXForm) + string(";\n");
-			localString += string("indexIn = mul24(bNum, ") + num2str(batchSize) + string(");\n");
-			localString += string("tid = indexIn;\n");
-			localString += string("i = tid >> ") + num2str(lgStrideO) + string(";\n");
-			localString += string("j = tid & ") + num2str(strideO - 1) + string(";\n"); 
-			int stride = radix*Rinit;
-			for(i = 0; i < passNum; i++)
-				stride *= radixArr[i];
-			localString += string("indexOut = mad24(i, ") + num2str(stride) + string(", j);\n");			
-			localString += string("indexIn += (xNum << ") + num2str(m) + string(");\n");
-			localString += string("indexOut += (xNum << ") + num2str(m) + string(");\n");	
-		}
-		
-		// Load Data
-		int lgBatchSize = log2(batchSize);
-		localString += string("tid = lId;\n");
-		localString += string("i = tid & ") + num2str(batchSize - 1) + string(";\n");
-		localString += string("j = tid >> ") + num2str(lgBatchSize) + string(";\n"); 
-		localString += string("indexIn += mad24(j, ") + num2str(strideI) + string(", i);\n");
-
-		if(dataFormat == clFFT_SplitComplexFormat) 
-		{
-			localString += string("in_real += indexIn;\n");
-			localString += string("in_imag += indexIn;\n");			
-			for(j = 0; j < R1; j++)
-				localString += string("a[") + num2str(j) + string("].x = in_real[") + num2str(j*gInInc*strideI) + string("];\n");
-			for(j = 0; j < R1; j++) 
-				localString += string("a[") + num2str(j) + string("].y = in_imag[") + num2str(j*gInInc*strideI) + string("];\n");
-		}
-		else 
-		{
-			localString += string("in += indexIn;\n");
-			for(j = 0; j < R1; j++)
-				localString += string("a[") + num2str(j) + string("] = in[") + num2str(j*gInInc*strideI) + string("];\n");
-	    }
-		
-		localString += string("fftKernel") + num2str(R1) + string("(a, dir);\n");							  
-		
-		if(R2 > 1)
-		{
-		    // twiddle
-		    for(k = 1; k < R1; k++) 
-		    {
-			    localString += string("ang = dir*(2.0f*M_PI*") + num2str(k) + string("/") + num2str(radix) + string(")*j;\n");
-			    localString += string("w = (float2)(native_cos(ang), native_sin(ang));\n");
-			    localString += string("a[") + num2str(k) + string("] = complexMul(a[") + num2str(k) + string("], w);\n"); 
-		    }
-		
-		    // shuffle
-		    numIter = R1 / R2;	
-		    localString += string("indexIn = mad24(j, ") + num2str(threadsPerBlock*numIter) + string(", i);\n");
-		    localString += string("lMemStore = sMem + tid;\n");
-		    localString += string("lMemLoad = sMem + indexIn;\n");
-		    for(k = 0; k < R1; k++) 
-			    localString += string("lMemStore[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].x;\n");
-		    localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");	
-		    for(k = 0; k < numIter; k++)
-			    for(t = 0; t < R2; t++)
-				    localString += string("a[") + num2str(k*R2+t) + string("].x = lMemLoad[") + num2str(t*batchSize + k*threadsPerBlock) + string("];\n");
-		    localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-		    for(k = 0; k < R1; k++) 
-			    localString += string("lMemStore[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].y;\n");
-		    localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");	
-		    for(k = 0; k < numIter; k++)
-			    for(t = 0; t < R2; t++)
-				    localString += string("a[") + num2str(k*R2+t) + string("].y = lMemLoad[") + num2str(t*batchSize + k*threadsPerBlock) + string("];\n");
-		    localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-		
-		    for(j = 0; j < numIter; j++)
-			    localString += string("fftKernel") + num2str(R2) + string("(a + ") + num2str(j*R2) + string(", dir);\n");
-		}
-		
-		// twiddle
-		if(passNum < (numPasses - 1)) 
-		{
-			localString += string("l = ((bNum << ") + num2str(lgBatchSize) + string(") + i) >> ") + num2str(lgStrideO) + string(";\n");
-			localString += string("k = j << ") + num2str((int)log2(R1/R2)) + string(";\n"); 
-			localString += string("ang1 = dir*(2.0f*M_PI/") + num2str(N) + string(")*l;\n");
-			for(t = 0; t < R1; t++) 
-			{
-				localString += string("ang = ang1*(k + ") + num2str((t%R2)*R1 + (t/R2)) + string(");\n");
-				localString += string("w = (float2)(native_cos(ang), native_sin(ang));\n");
-				localString += string("a[") + num2str(t) + string("] = complexMul(a[") + num2str(t) + string("], w);\n");
-			}
-		}
-		
-		// Store Data
-		if(strideO == 1) 
-		{
-			
-			localString += string("lMemStore = sMem + mad24(i, ") + num2str(radix + 1) + string(", j << ") + num2str((int)log2(R1/R2)) + string(");\n");
-			localString += string("lMemLoad = sMem + mad24(tid >> ") + num2str((int)log2(radix)) + string(", ") + num2str(radix+1) + string(", tid & ") + num2str(radix-1) + string(");\n");
-			
-			for(int i = 0; i < R1/R2; i++)
-				for(int j = 0; j < R2; j++)
-					localString += string("lMemStore[ ") + num2str(i + j*R1) + string("] = a[") + num2str(i*R2+j) + string("].x;\n");
-			localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-			if(threadsPerBlock >= radix)
-            {
-                for(int i = 0; i < R1; i++)
-                localString += string("a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i*(radix+1)*(threadsPerBlock/radix)) + string("];\n");
-            }
-            else
-            {
-                int innerIter = radix/threadsPerBlock;
-                int outerIter = R1/innerIter;
-                for(int i = 0; i < outerIter; i++)
-                    for(int j = 0; j < innerIter; j++)
-                        localString += string("a[") + num2str(i*innerIter+j) + string("].x = lMemLoad[") + num2str(j*threadsPerBlock + i*(radix+1)) + string("];\n");
-            }
-			localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-			
-			for(int i = 0; i < R1/R2; i++)
-				for(int j = 0; j < R2; j++)
-					localString += string("lMemStore[ ") + num2str(i + j*R1) + string("] = a[") + num2str(i*R2+j) + string("].y;\n");
-			localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-			if(threadsPerBlock >= radix)
-            {
-                for(int i = 0; i < R1; i++)
-                    localString += string("a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i*(radix+1)*(threadsPerBlock/radix)) + string("];\n");
-            }
-            else
-            {
-                int innerIter = radix/threadsPerBlock;
-                int outerIter = R1/innerIter;
-                for(int i = 0; i < outerIter; i++)
-                    for(int j = 0; j < innerIter; j++)
-                        localString += string("a[") + num2str(i*innerIter+j) + string("].y = lMemLoad[") + num2str(j*threadsPerBlock + i*(radix+1)) + string("];\n");
-            }
-			localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n");
-			
-			localString += string("indexOut += tid;\n");
-			if(dataFormat == clFFT_SplitComplexFormat) {
-				localString += string("out_real += indexOut;\n");
-				localString += string("out_imag += indexOut;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out_real[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].x;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out_imag[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].y;\n");
-			}
-			else {
-				localString += string("out += indexOut;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("];\n");				
-			}
-		 
-		}
-		else 
-		{
-			localString += string("indexOut += mad24(j, ") + num2str(numIter*strideO) + string(", i);\n");
-			if(dataFormat == clFFT_SplitComplexFormat) {
-				localString += string("out_real += indexOut;\n");
-				localString += string("out_imag += indexOut;\n");			
-				for(k = 0; k < R1; k++)
-					localString += string("out_real[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("].x;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out_imag[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("].y;\n");
-			}
-			else {
-				localString += string("out += indexOut;\n");
-				for(k = 0; k < R1; k++)
-					localString += string("out[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("];\n");
-			}
-		}
-		
-		insertHeader(*kernelString, kernelName, dataFormat);
-		*kernelString += string("{\n");
-		if((*kInfo)->lmem_size)
-			*kernelString += string("    __local float sMem[") + num2str((*kInfo)->lmem_size) + string("];\n");
-		*kernelString += localString;
-		*kernelString += string("}\n");		
-		
-		N /= radix;
-		kInfo = &(*kInfo)->next;
-		kCount++;
-	}
-}
-
-void FFT1D(cl_fft_plan *plan, cl_fft_kernel_dir dir)
-{	
-    unsigned int radixArray[10];
-    unsigned int numRadix;
-    
-	switch(dir)
-	{
-		case cl_fft_kernel_x:
-		    if(plan->n.x > plan->max_localmem_fft_size)
-		    {
-		        createGlobalFFTKernelString(plan, plan->n.x, 1, cl_fft_kernel_x, 1);
-		    }
-		    else if(plan->n.x > 1)
-		    {
-		        getRadixArray(plan->n.x, radixArray, &numRadix, 0);
-		        if(plan->n.x / radixArray[0] <= plan->max_work_item_per_workgroup)
-		        {
-				    createLocalMemfftKernelString(plan);
-				}
-			    else
-			    {
-			        getRadixArray(plan->n.x, radixArray, &numRadix, plan->max_radix);
-			        if(plan->n.x / radixArray[0] <= plan->max_work_item_per_workgroup)
-			            createLocalMemfftKernelString(plan);
-			        else
-				        createGlobalFFTKernelString(plan, plan->n.x, 1, cl_fft_kernel_x, 1);
-				}
-		    }
-			break;
-			
-		case cl_fft_kernel_y:
-			if(plan->n.y > 1)
-			    createGlobalFFTKernelString(plan, plan->n.y, plan->n.x, cl_fft_kernel_y, 1);
-			break;
-			
-		case cl_fft_kernel_z:
-			if(plan->n.z > 1)
-			    createGlobalFFTKernelString(plan, plan->n.z, plan->n.x*plan->n.y, cl_fft_kernel_z, 1);
-		default:
-			return;
-	}
-}
-
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/fft_setup.cpp b/RTCP/Cobalt/OpenCL_FFT/src/fft_setup.cpp
deleted file mode 100644
index f2c0f03957b3ce0e2efb9e4b6feea6c21f9003a1..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/fft_setup.cpp
+++ /dev/null
@@ -1,403 +0,0 @@
-
-//
-// File:       fft_setup.cpp
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#include "fft_internal.h"
-#include "fft_base_kernels.h"
-#include <climits>
-#include <cstdlib>
-#include <cstring>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <iostream>
-#include <string>
-#include <sstream>
-
-using namespace std;
-
-extern void getKernelWorkDimensions(cl_fft_plan *plan, cl_fft_kernel_info *kernelInfo, cl_int *batchSize, size_t *gWorkItems, size_t *lWorkItems);
-
-static void 
-getBlockConfigAndKernelString(cl_fft_plan *plan)
-{
-	plan->temp_buffer_needed = 0;
-	*plan->kernel_string += baseKernels;
-	
-	if(plan->format == clFFT_SplitComplexFormat)
-		*plan->kernel_string += twistKernelPlannar;
-	else
-		*plan->kernel_string += twistKernelInterleaved;
-	
-	switch(plan->dim) 
-	{
-		case clFFT_1D:
-			FFT1D(plan, cl_fft_kernel_x);
-			break;
-			
-		case clFFT_2D:
-			FFT1D(plan, cl_fft_kernel_x); 
-			FFT1D(plan, cl_fft_kernel_y);  
-			break;
-			
-		case clFFT_3D:
-			FFT1D(plan, cl_fft_kernel_x); 
-			FFT1D(plan, cl_fft_kernel_y); 
-			FFT1D(plan, cl_fft_kernel_z); 
-			break;
-			
-		default:
-			return;
-	}
-	
-	plan->temp_buffer_needed = 0;
-	cl_fft_kernel_info *kInfo = plan->kernel_info;
-	while(kInfo)
-	{
-		plan->temp_buffer_needed |= !kInfo->in_place_possible;
-		kInfo = kInfo->next;
-	}
-}
-
- 
-static void
-deleteKernelInfo(cl_fft_kernel_info *kInfo)
-{
-	if(kInfo)
-	{
-	    if(kInfo->kernel_name)
-		    free(kInfo->kernel_name);
-	    if(kInfo->kernel)
-		    clReleaseKernel(kInfo->kernel);
-		free(kInfo);
-	}	
-}
-
-static void
-destroy_plan(cl_fft_plan *Plan)
-{
-    cl_fft_kernel_info *kernel_info = Plan->kernel_info;
-
-	while(kernel_info)
-	{
-		cl_fft_kernel_info *tmp = kernel_info->next;
-		deleteKernelInfo(kernel_info);
-		kernel_info = tmp;
-	}
-	
-	Plan->kernel_info = NULL;
-		
-	if(Plan->kernel_string)
-	{
-		delete Plan->kernel_string;
-		Plan->kernel_string = NULL;
-	}			
-	if(Plan->twist_kernel)
-	{
-		clReleaseKernel(Plan->twist_kernel);
-		Plan->twist_kernel = NULL;
-	}
-	if(Plan->program)
-	{
-		clReleaseProgram(Plan->program);
-		Plan->program = NULL;
-	}
-	if(Plan->tempmemobj) 
-	{
-		clReleaseMemObject(Plan->tempmemobj);
-		Plan->tempmemobj = NULL;
-	}
-	if(Plan->tempmemobj_real)
-	{
-		clReleaseMemObject(Plan->tempmemobj_real);
-		Plan->tempmemobj_real = NULL;
-	}
-	if(Plan->tempmemobj_imag)
-	{
-		clReleaseMemObject(Plan->tempmemobj_imag);
-		Plan->tempmemobj_imag = NULL;
-	}
-}
-
-static int
-createKernelList(cl_fft_plan *plan) 
-{
-	cl_program program = plan->program;
-	cl_fft_kernel_info *kernel_info = plan->kernel_info;
-	
-	cl_int err;
-	while(kernel_info)
-	{
-		kernel_info->kernel = clCreateKernel(program, kernel_info->kernel_name, &err);
-		if(!kernel_info->kernel || err != CL_SUCCESS)
-			return err;
-		kernel_info = kernel_info->next;		
-	}
-	
-	if(plan->format == clFFT_SplitComplexFormat)
-		plan->twist_kernel = clCreateKernel(program, "clFFT_1DTwistSplit", &err);
-	else
-		plan->twist_kernel = clCreateKernel(program, "clFFT_1DTwistInterleaved", &err);
-	
-	if(!plan->twist_kernel || err)
-		return err;
-
-	return CL_SUCCESS;
-}
-
-int getMaxKernelWorkGroupSize(cl_fft_plan *plan, unsigned int *max_wg_size, unsigned int num_devices, cl_device_id *devices)
-{	
-    int reg_needed = 0;
-    *max_wg_size = INT_MAX;
-    int err;
-    size_t wg_size;
-    
-    unsigned int i;
-    for(i = 0; i < num_devices; i++)
-    {
-	    cl_fft_kernel_info *kInfo = plan->kernel_info;
-	    while(kInfo)
-	    {
-		    err = clGetKernelWorkGroupInfo(kInfo->kernel, devices[i], CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &wg_size, NULL);
-		    if(err != CL_SUCCESS)
-		        return -1;
-		        
-		    if(wg_size < kInfo->num_workitems_per_workgroup)
-		        reg_needed |= 1;
-		    
-		    if(*max_wg_size > wg_size)
-		        *max_wg_size = wg_size;
-		        
-		    kInfo = kInfo->next;
-	    }
-	}
-	
-	return reg_needed;
-}	
-
-#define ERR_MACRO(err) { \
-                         if( err != CL_SUCCESS) \
-                         { \
-                           if(error_code) \
-                               *error_code = err; \
-                           clFFT_DestroyPlan((clFFT_Plan) plan); \
-						   return (clFFT_Plan) NULL; \
-                         } \
-					   }
-
-clFFT_Plan
-clFFT_CreatePlan(cl_context context, clFFT_Dim3 n, clFFT_Dimension dim, clFFT_DataFormat dataFormat, cl_int *error_code )
-{
-	int i;
-	cl_int err;
-	int isPow2 = 1;
-	cl_fft_plan *plan = NULL;
-	ostringstream kString;
-	int num_devices;
-	int gpu_found = 0;
-	cl_device_id devices[16];
-	size_t ret_size;
-	cl_device_type device_type;
-	
-    if(!context)
-		ERR_MACRO(CL_INVALID_VALUE);
-	
-	isPow2 |= n.x && !( (n.x - 1) & n.x );
-	isPow2 |= n.y && !( (n.y - 1) & n.y );
-	isPow2 |= n.z && !( (n.z - 1) & n.z );
-	
-	if(!isPow2)
-		ERR_MACRO(CL_INVALID_VALUE);
-	
-	if( (dim == clFFT_1D && (n.y != 1 || n.z != 1)) || (dim == clFFT_2D && n.z != 1) )
-		ERR_MACRO(CL_INVALID_VALUE);
-
-	plan = (cl_fft_plan *) malloc(sizeof(cl_fft_plan));
-	if(!plan)
-		ERR_MACRO(CL_OUT_OF_RESOURCES);
-	
-	plan->context = context;
-	clRetainContext(context);
-	plan->n = n;
-	plan->dim = dim;
-	plan->format = dataFormat;
-	plan->kernel_info = 0;
-	plan->num_kernels = 0;
-	plan->twist_kernel = 0;
-	plan->program = 0;
-	plan->temp_buffer_needed = 0;
-	plan->last_batch_size = 0;
-	plan->tempmemobj = 0;
-	plan->tempmemobj_real = 0;
-	plan->tempmemobj_imag = 0;
-	plan->max_localmem_fft_size = 2048;
-	plan->max_work_item_per_workgroup = 256;
-	plan->max_radix = 16;
-	plan->min_mem_coalesce_width = 16;
-	plan->num_local_mem_banks = 16;	
-	
-patch_kernel_source:
-
-	plan->kernel_string = new string("");
-	if(!plan->kernel_string)
-        ERR_MACRO(CL_OUT_OF_RESOURCES);
-
-	getBlockConfigAndKernelString(plan);
-	
-	const char *source_str = plan->kernel_string->c_str();
-	plan->program = clCreateProgramWithSource(context, 1, (const char**) &source_str, NULL, &err);
-    ERR_MACRO(err);
-
-	err = clGetContextInfo(context, CL_CONTEXT_DEVICES, sizeof(devices), devices, &ret_size);
-	ERR_MACRO(err);
-	
-	num_devices = ret_size / sizeof(cl_device_id);
-	cl_int build_err = clBuildProgram(plan->program, num_devices, devices, "-cl-mad-enable", NULL, NULL);
-	
-	for(i = 0; i < num_devices; i++)
-	{
-		err = clGetDeviceInfo(devices[i], CL_DEVICE_TYPE, sizeof(device_type), &device_type, NULL);
-		ERR_MACRO(err);
-		
-		if(device_type == CL_DEVICE_TYPE_CPU || device_type == CL_DEVICE_TYPE_GPU || CL_DEVICE_TYPE_ACCELERATOR)
-		{	
-			gpu_found = 1;
-	        //err = clBuildProgram(plan->program, 1, &devices[i], "-cl-mad-enable", NULL, NULL);
-	        if (build_err != CL_SUCCESS)
-	        {
-		        char *build_log;				
-				char devicename[200];
-		        size_t log_size;
-				
-		        err = clGetProgramBuildInfo(plan->program, devices[i], CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size);
-				ERR_MACRO(err);
-				
-		        build_log = (char *) malloc(log_size + 1);
-				
-			    err = clGetProgramBuildInfo(plan->program, devices[i], CL_PROGRAM_BUILD_LOG, log_size, build_log, NULL);
-				ERR_MACRO(err);
-				
-				err = clGetDeviceInfo(devices[i], CL_DEVICE_NAME, sizeof(devicename), devicename, NULL);
-				ERR_MACRO(err);
-				
-				fprintf(stdout, "FFT program build log on device %s\n", devicename);
-		        fprintf(stdout, "%s\n", build_log);
-		        free(build_log);
-				
-				ERR_MACRO(err);
-			}	
-		}	
-	}
-	
-	if(!gpu_found)
-		ERR_MACRO(CL_INVALID_CONTEXT);
-	
-	err = createKernelList(plan); 
-    ERR_MACRO(err);
-    
-    // we created program and kernels based on "some max work group size (default 256)" ... this work group size
-    // may be larger than what kernel may execute with ... if thats the case we need to regenerate the kernel source 
-    // setting this as limit i.e max group size and rebuild. 
-	unsigned int max_kernel_wg_size; 
-	int patching_req = getMaxKernelWorkGroupSize(plan, &max_kernel_wg_size, num_devices, devices);
-	if(patching_req == -1)
-	{
-	    ERR_MACRO(err);
-	}
-	
-	if(patching_req)
-	{
-	    destroy_plan(plan);
-	    plan->max_work_item_per_workgroup = max_kernel_wg_size;
-	    goto patch_kernel_source;
-	}
-	
-	cl_fft_kernel_info *kInfo = plan->kernel_info;
-	while(kInfo)
-	{
-		plan->num_kernels++;
-		kInfo = kInfo->next;
-	}
-	
-	if(error_code)
-		*error_code = CL_SUCCESS;
-			
-	return (clFFT_Plan) plan;
-}
-
-void		 
-clFFT_DestroyPlan(clFFT_Plan plan)
-{
-    cl_fft_plan *Plan = (cl_fft_plan *) plan;
-	if(Plan) 
-	{	
-		destroy_plan(Plan);	
-		clReleaseContext(Plan->context);
-		free(Plan);
-	}		
-}
-
-void clFFT_DumpPlan( clFFT_Plan Plan, FILE *file)
-{
-	size_t gDim, lDim;
-	FILE *out;
-	if(!file)
-		out = stdout;
-	else 
-		out = file;
-	
-	cl_fft_plan *plan = (cl_fft_plan *) Plan;
-	cl_fft_kernel_info *kInfo = plan->kernel_info;
-	
-	while(kInfo)
-	{
-		cl_int s = 1;
-		getKernelWorkDimensions(plan, kInfo, &s, &gDim, &lDim);
-		fprintf(out, "Run kernel %s with global dim = {%zd*BatchSize}, local dim={%zd}\n", kInfo->kernel_name, gDim, lDim);
-		kInfo = kInfo->next;
-	}
-	fprintf(out, "%s\n", plan->kernel_string->c_str());
-}
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/libOpenCL_FFT.a.not b/RTCP/Cobalt/OpenCL_FFT/src/libOpenCL_FFT.a.not
deleted file mode 100644
index 595b15d060a75485d1668d9fd6271c350eec7afb..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/OpenCL_FFT/src/libOpenCL_FFT.a.not and /dev/null differ
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/main.cpp b/RTCP/Cobalt/OpenCL_FFT/src/main.cpp
deleted file mode 100755
index bc6b956137faedcb2a58c25e1d81d3aedd8a4568..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/main.cpp
+++ /dev/null
@@ -1,882 +0,0 @@
-
-//
-// File:       main.cpp
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#include <string.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <CL/cl.h>
-#include "clFFT.h"
-//#include <mach/mach_time.h>
-#include <Accelerate/Accelerate.h>
-#include "procs.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdint.h>
-#include <float.h>
-
-#define eps_avg 10.0
-
-#define MAX( _a, _b)	((_a)>(_b)?(_a) : (_b))
-
-typedef enum {
-	clFFT_OUT_OF_PLACE,
-	clFFT_IN_PLACE,
-}clFFT_TestType;
-
-typedef struct
-{
-	double real;
-	double imag;
-}clFFT_ComplexDouble;
-
-typedef struct
-{
-	double *real;
-	double *imag;
-}clFFT_SplitComplexDouble;
-
-cl_device_id     device_id;
-cl_context       context;
-cl_command_queue queue;
-
-typedef unsigned long long ulong;
-
-double subtractTimes( uint64_t endTime, uint64_t startTime )
-{
-    uint64_t difference = endTime - startTime;
-    static double conversion = 0.0;
-    
-    if( conversion == 0.0 )
-    {
-        mach_timebase_info_data_t info;
-        kern_return_t err = mach_timebase_info( &info );
-        
-		//Convert the timebase into seconds
-        if( err == 0  )
-			conversion = 1e-9 * (double) info.numer / (double) info.denom;
-    }
-    
-    return conversion * (double) difference;
-}
-
-void computeReferenceF(clFFT_SplitComplex *out, clFFT_Dim3 n, 
-					  unsigned int batchSize, clFFT_Dimension dim, clFFT_Direction dir)
-{
-	FFTSetup plan_vdsp;
-	DSPSplitComplex out_vdsp;
-	FFTDirection dir_vdsp = dir == clFFT_Forward ? FFT_FORWARD : FFT_INVERSE;
-	
-	unsigned int i, j, k;
-	unsigned int stride;
-	unsigned int log2Nx = (unsigned int) log2(n.x);
-	unsigned int log2Ny = (unsigned int) log2(n.y);
-	unsigned int log2Nz = (unsigned int) log2(n.z);
-	unsigned int log2N;
-	
-	log2N = log2Nx;
-	log2N = log2N > log2Ny ? log2N : log2Ny;
-	log2N = log2N > log2Nz ? log2N : log2Nz;
-	
-	plan_vdsp = vDSP_create_fftsetup(log2N, 2);
-	
-	switch(dim)
-	{
-		case clFFT_1D:
-			
-			for(i = 0; i < batchSize; i++)
-			{
-				stride = i * n.x;
-				out_vdsp.realp  = out->real  + stride;
-				out_vdsp.imagp  = out->imag  + stride;
-				
-			    vDSP_fft_zip(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp);
-			}
-			break;
-			
-		case clFFT_2D:
-			
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.y; j++)
-				{
-					stride = j * n.x + i * n.x * n.y;
-					out_vdsp.realp = out->real + stride;
-					out_vdsp.imagp = out->imag + stride;
-					
-					vDSP_fft_zip(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp);
-				}
-			}
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.x; j++)
-				{
-					stride = j + i * n.x  * n.y;
-					out_vdsp.realp = out->real + stride;
-					out_vdsp.imagp = out->imag + stride;
-					
-					vDSP_fft_zip(plan_vdsp, &out_vdsp, n.x, log2Ny, dir_vdsp);
-				}
-			}
-			break;
-			
-		case clFFT_3D:
-			
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.z; j++)
-				{
-					for(k = 0; k < n.y; k++)
-					{
-						stride = k * n.x + j * n.x * n.y + i * n.x * n.y * n.z;
-						out_vdsp.realp = out->real + stride;
-						out_vdsp.imagp = out->imag + stride;
-						
-						vDSP_fft_zip(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp);
-					}
-				}
-			}
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.z; j++)
-				{
-					for(k = 0; k < n.x; k++)
-					{
-						stride = k + j * n.x * n.y + i * n.x * n.y * n.z;
-						out_vdsp.realp = out->real + stride;
-						out_vdsp.imagp = out->imag + stride;
-						
-						vDSP_fft_zip(plan_vdsp, &out_vdsp, n.x, log2Ny, dir_vdsp);
-					}
-				}
-			}
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.y; j++)
-				{
-					for(k = 0; k < n.x; k++)
-					{
-						stride = k + j * n.x + i * n.x * n.y * n.z;
-						out_vdsp.realp = out->real + stride;
-						out_vdsp.imagp = out->imag + stride;
-						
-						vDSP_fft_zip(plan_vdsp, &out_vdsp, n.x*n.y, log2Nz, dir_vdsp);
-					}
-				}
-			}
-			break;
-	}
-	
-	vDSP_destroy_fftsetup(plan_vdsp);
-}
-
-void computeReferenceD(clFFT_SplitComplexDouble *out, clFFT_Dim3 n, 
-					  unsigned int batchSize, clFFT_Dimension dim, clFFT_Direction dir)
-{
-	FFTSetupD plan_vdsp;
-	DSPDoubleSplitComplex out_vdsp;
-	FFTDirection dir_vdsp = dir == clFFT_Forward ? FFT_FORWARD : FFT_INVERSE;
-	
-	unsigned int i, j, k;
-	unsigned int stride;
-	unsigned int log2Nx = (int) log2(n.x);
-	unsigned int log2Ny = (int) log2(n.y);
-	unsigned int log2Nz = (int) log2(n.z);
-	unsigned int log2N;
-	
-	log2N = log2Nx;
-	log2N = log2N > log2Ny ? log2N : log2Ny;
-	log2N = log2N > log2Nz ? log2N : log2Nz;
-	
-	plan_vdsp = vDSP_create_fftsetupD(log2N, 2);
-	
-	switch(dim)
-	{
-		case clFFT_1D:
-			
-			for(i = 0; i < batchSize; i++)
-			{
-				stride = i * n.x;
-				out_vdsp.realp  = out->real  + stride;
-				out_vdsp.imagp  = out->imag  + stride;
-				
-			    vDSP_fft_zipD(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp);
-			}
-			break;
-			
-		case clFFT_2D:
-			
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.y; j++)
-				{
-					stride = j * n.x + i * n.x * n.y;
-					out_vdsp.realp = out->real + stride;
-					out_vdsp.imagp = out->imag + stride;
-					
-					vDSP_fft_zipD(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp);
-				}
-			}
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.x; j++)
-				{
-					stride = j + i * n.x  * n.y;
-					out_vdsp.realp = out->real + stride;
-					out_vdsp.imagp = out->imag + stride;
-					
-					vDSP_fft_zipD(plan_vdsp, &out_vdsp, n.x, log2Ny, dir_vdsp);
-				}
-			}
-			break;
-			
-		case clFFT_3D:
-			
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.z; j++)
-				{
-					for(k = 0; k < n.y; k++)
-					{
-						stride = k * n.x + j * n.x * n.y + i * n.x * n.y * n.z;
-						out_vdsp.realp = out->real + stride;
-						out_vdsp.imagp = out->imag + stride;
-						
-						vDSP_fft_zipD(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp);
-					}
-				}
-			}
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.z; j++)
-				{
-					for(k = 0; k < n.x; k++)
-					{
-						stride = k + j * n.x * n.y + i * n.x * n.y * n.z;
-						out_vdsp.realp = out->real + stride;
-						out_vdsp.imagp = out->imag + stride;
-						
-						vDSP_fft_zipD(plan_vdsp, &out_vdsp, n.x, log2Ny, dir_vdsp);
-					}
-				}
-			}
-			for(i = 0; i < batchSize; i++)
-			{
-				for(j = 0; j < n.y; j++)
-				{
-					for(k = 0; k < n.x; k++)
-					{
-						stride = k + j * n.x + i * n.x * n.y * n.z;
-						out_vdsp.realp = out->real + stride;
-						out_vdsp.imagp = out->imag + stride;
-						
-						vDSP_fft_zipD(plan_vdsp, &out_vdsp, n.x*n.y, log2Nz, dir_vdsp);
-					}
-				}
-			}
-			break;
-	}
-	
-	vDSP_destroy_fftsetupD(plan_vdsp);
-}
-
-double complexNormSq(clFFT_ComplexDouble a)
-{
-	return (a.real * a.real + a.imag * a.imag);
-}
-
-double computeL2Error(clFFT_SplitComplex *data, clFFT_SplitComplexDouble *data_ref, int n, int batchSize, double *max_diff, double *min_diff)
-{
-	int i, j;
-	double avg_norm = 0.0;
-	*max_diff = 0.0;
-	*min_diff = 0x1.0p1000;
-	
-	for(j = 0; j < batchSize; j++)
-	{
-		double norm_ref = 0.0;
-		double norm = 0.0;
-	    for(i = 0; i < n; i++) 
-		{
-			int index = j * n + i;
-		    clFFT_ComplexDouble diff = (clFFT_ComplexDouble) { data_ref->real[index] - data->real[index], data_ref->imag[index] - data->imag[index] };
-		    double norm_tmp = complexNormSq(diff);
-		    norm += norm_tmp;
-		    norm_ref += (data_ref->real[index] * data_ref->real[index] + data_ref->imag[index] * data_ref->imag[index]);
-	    }
-	    double curr_norm = sqrt( norm / norm_ref ) / FLT_EPSILON;
-		avg_norm += curr_norm;
-		*max_diff = *max_diff < curr_norm ? curr_norm : *max_diff;
-		*min_diff = *min_diff > curr_norm ? curr_norm : *min_diff;
-	}
-	
-	return avg_norm / batchSize;
-}
-
-void convertInterleavedToSplit(clFFT_SplitComplex *result_split, clFFT_Complex *data_cl, int length)
-{
-	int i;
-	for(i = 0; i < length; i++) {
-		result_split->real[i] = data_cl[i].real;
-		result_split->imag[i] = data_cl[i].imag;
-	}
-}
-
-int runTest(clFFT_Dim3 n, int batchSize, clFFT_Direction dir, clFFT_Dimension dim, 
-			clFFT_DataFormat dataFormat, int numIter, clFFT_TestType testType)
-{	
-	cl_int err = CL_SUCCESS;
-	int iter;
-	double t;
-	
-	uint64_t t0, t1;
-	int mx = log2(n.x);
-	int my = log2(n.y);
-	int mz = log2(n.z);
-
-	int length = n.x * n.y * n.z * batchSize;
-		
-	double gflops = 5e-9 * ((double)mx + (double)my + (double)mz) * (double)n.x * (double)n.y * (double)n.z * (double)batchSize * (double)numIter;
-	
-	clFFT_SplitComplex data_i_split = (clFFT_SplitComplex) { NULL, NULL };
-	clFFT_SplitComplex data_cl_split = (clFFT_SplitComplex) { NULL, NULL };
-	clFFT_Complex *data_i = NULL;
-	clFFT_Complex *data_cl = NULL;
-	clFFT_SplitComplexDouble data_iref = (clFFT_SplitComplexDouble) { NULL, NULL }; 
-	clFFT_SplitComplexDouble data_oref = (clFFT_SplitComplexDouble) { NULL, NULL };
-	
-	clFFT_Plan plan = NULL;
-	cl_mem data_in = NULL;
-	cl_mem data_out = NULL;
-	cl_mem data_in_real = NULL;
-	cl_mem data_in_imag = NULL;
-	cl_mem data_out_real = NULL;
-	cl_mem data_out_imag = NULL;
-	
-	if(dataFormat == clFFT_SplitComplexFormat) {
-		data_i_split.real     = (float *) malloc(sizeof(float) * length);
-		data_i_split.imag     = (float *) malloc(sizeof(float) * length);
-		data_cl_split.real    = (float *) malloc(sizeof(float) * length);
-		data_cl_split.imag    = (float *) malloc(sizeof(float) * length);
-		if(!data_i_split.real || !data_i_split.imag || !data_cl_split.real || !data_cl_split.imag)
-		{
-			err = -1;
-			log_error("Out-of-Resources\n");
-			goto cleanup;
-		}
-	}
-	else {
-		data_i  = (clFFT_Complex *) malloc(sizeof(clFFT_Complex)*length);
-		data_cl = (clFFT_Complex *) malloc(sizeof(clFFT_Complex)*length);
-		if(!data_i || !data_cl)
-		{
-			err = -2;
-			log_error("Out-of-Resouces\n");
-			goto cleanup;
-		}
-	}
-	
-	data_iref.real   = (double *) malloc(sizeof(double) * length);
-	data_iref.imag   = (double *) malloc(sizeof(double) * length);
-	data_oref.real   = (double *) malloc(sizeof(double) * length);
-	data_oref.imag   = (double *) malloc(sizeof(double) * length);	
-	if(!data_iref.real || !data_iref.imag || !data_oref.real || !data_oref.imag)
-	{
-		err = -3;
-		log_error("Out-of-Resources\n");
-		goto cleanup;
-	}
-
-	int i;
-	if(dataFormat == clFFT_SplitComplexFormat) {
-		for(i = 0; i < length; i++)
-		{
-			data_i_split.real[i] = 2.0f * (float) rand() / (float) RAND_MAX - 1.0f;
-			data_i_split.imag[i] = 2.0f * (float) rand() / (float) RAND_MAX - 1.0f;
-			data_cl_split.real[i] = 0.0f;
-			data_cl_split.imag[i] = 0.0f;			
-			data_iref.real[i] = data_i_split.real[i];
-			data_iref.imag[i] = data_i_split.imag[i];
-			data_oref.real[i] = data_iref.real[i];
-			data_oref.imag[i] = data_iref.imag[i];	
-		}
-	}
-	else {
-		for(i = 0; i < length; i++)
-		{
-			data_i[i].real = 2.0f * (float) rand() / (float) RAND_MAX - 1.0f;
-			data_i[i].imag = 2.0f * (float) rand() / (float) RAND_MAX - 1.0f;
-			data_cl[i].real = 0.0f;
-			data_cl[i].imag = 0.0f;			
-			data_iref.real[i] = data_i[i].real;
-			data_iref.imag[i] = data_i[i].imag;
-			data_oref.real[i] = data_iref.real[i];
-			data_oref.imag[i] = data_iref.imag[i];	
-		}		
-	}
-	
-	plan = clFFT_CreatePlan( context, n, dim, dataFormat, &err );
-	if(!plan || err) 
-	{
-		log_error("clFFT_CreatePlan failed\n");
-		goto cleanup;
-	}
-	
-	//clFFT_DumpPlan(plan, stdout);
-	
-	if(dataFormat == clFFT_SplitComplexFormat)
-	{
-		data_in_real = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, length*sizeof(float), data_i_split.real, &err);
-	    if(!data_in_real || err) 
-	    {
-			log_error("clCreateBuffer failed\n");
-			goto cleanup;
-	    }
-		
-		data_in_imag = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, length*sizeof(float), data_i_split.imag, &err);
-	    if(!data_in_imag || err) 
-	    {
-			log_error("clCreateBuffer failed\n");
-			goto cleanup;
-	    }
-		
-		if(testType == clFFT_OUT_OF_PLACE)
-		{
-			data_out_real = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, length*sizeof(float), data_cl_split.real, &err);
-			if(!data_out_real || err) 
-			{
-				log_error("clCreateBuffer failed\n");
-				goto cleanup;
-			}
-			
-			data_out_imag = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, length*sizeof(float), data_cl_split.imag, &err);
-			if(!data_out_imag || err) 
-			{
-				log_error("clCreateBuffer failed\n");
-				goto cleanup;
-			}			
-		}
-		else
-		{
-			data_out_real = data_in_real;
-			data_out_imag = data_in_imag;
-		}
-	}
-	else
-	{
-	    data_in = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, length*sizeof(float)*2, data_i, &err);
-	    if(!data_in) 
-	    {
-			log_error("clCreateBuffer failed\n");
-			goto cleanup;
-	    }
-		if(testType == clFFT_OUT_OF_PLACE)
-		{
-			data_out = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, length*sizeof(float)*2, data_cl, &err);
-			if(!data_out) 
-			{
-				log_error("clCreateBuffer failed\n");
-				goto cleanup;
-			}			
-		}
-		else
-			data_out = data_in;
-	}
-		
-			
-	err = CL_SUCCESS;
-	
-	t0 = mach_absolute_time();
-	if(dataFormat == clFFT_SplitComplexFormat)
-	{
-		for(iter = 0; iter < numIter; iter++)
-		    err |= clFFT_ExecutePlannar(queue, plan, batchSize, dir, data_in_real, data_in_imag, data_out_real, data_out_imag, 0, NULL, NULL);
-	}
-	else
-	{
-	    for(iter = 0; iter < numIter; iter++) 
-			err |= clFFT_ExecuteInterleaved(queue, plan, batchSize, dir, data_in, data_out, 0, NULL, NULL);
-	}
-	
-	err |= clFinish(queue);
-	
-	if(err) 
-	{
-		log_error("clFFT_Execute\n");
-		goto cleanup;	
-	}
-	
-	t1 = mach_absolute_time(); 
-	t = subtractTimes(t1, t0);
-	char temp[100];
-	sprintf(temp, "GFlops achieved for n = (%d, %d, %d), batchsize = %d", n.x, n.y, n.z, batchSize);
-	log_perf(gflops / (float) t, 1, "GFlops/s", "%s", temp);
-
-	if(dataFormat == clFFT_SplitComplexFormat)
-	{	
-		err |= clEnqueueReadBuffer(queue, data_out_real, CL_TRUE, 0, length*sizeof(float), data_cl_split.real, 0, NULL, NULL);
-		err |= clEnqueueReadBuffer(queue, data_out_imag, CL_TRUE, 0, length*sizeof(float), data_cl_split.imag, 0, NULL, NULL);
-	}
-	else
-	{
-		err |= clEnqueueReadBuffer(queue, data_out, CL_TRUE, 0, length*sizeof(float)*2, data_cl, 0, NULL, NULL);
-	}
-	
-	if(err) 
-	{
-		log_error("clEnqueueReadBuffer failed\n");
-        goto cleanup;
-	}	
-
-	computeReferenceD(&data_oref, n, batchSize, dim, dir);
-	
-	double diff_avg, diff_max, diff_min;
-	if(dataFormat == clFFT_SplitComplexFormat) {
-		diff_avg = computeL2Error(&data_cl_split, &data_oref, n.x*n.y*n.z, batchSize, &diff_max, &diff_min);
-		if(diff_avg > eps_avg)
-			log_error("Test failed (n=(%d, %d, %d), batchsize=%d): %s Test: rel. L2-error = %f eps (max=%f eps, min=%f eps)\n", n.x, n.y, n.z, batchSize, (testType == clFFT_OUT_OF_PLACE) ? "out-of-place" : "in-place", diff_avg, diff_max, diff_min);
-		else
-			log_info("Test passed (n=(%d, %d, %d), batchsize=%d): %s Test: rel. L2-error = %f eps (max=%f eps, min=%f eps)\n", n.x, n.y, n.z, batchSize, (testType == clFFT_OUT_OF_PLACE) ? "out-of-place" : "in-place", diff_avg, diff_max, diff_min);			
-	}
-	else {
-		clFFT_SplitComplex result_split;
-		result_split.real = (float *) malloc(length*sizeof(float));
-		result_split.imag = (float *) malloc(length*sizeof(float));
-		convertInterleavedToSplit(&result_split, data_cl, length);
-		diff_avg = computeL2Error(&result_split, &data_oref, n.x*n.y*n.z, batchSize, &diff_max, &diff_min);
-		
-		if(diff_avg > eps_avg)
-			log_error("Test failed (n=(%d, %d, %d), batchsize=%d): %s Test: rel. L2-error = %f eps (max=%f eps, min=%f eps)\n", n.x, n.y, n.z, batchSize, (testType == clFFT_OUT_OF_PLACE) ? "out-of-place" : "in-place", diff_avg, diff_max, diff_min);
-		else
-			log_info("Test passed (n=(%d, %d, %d), batchsize=%d): %s Test: rel. L2-error = %f eps (max=%f eps, min=%f eps)\n", n.x, n.y, n.z, batchSize, (testType == clFFT_OUT_OF_PLACE) ? "out-of-place" : "in-place", diff_avg, diff_max, diff_min);	
-		free(result_split.real);
-		free(result_split.imag);
-	}
-	
-cleanup:
-	clFFT_DestroyPlan(plan);	
-	if(dataFormat == clFFT_SplitComplexFormat) 
-	{
-		if(data_i_split.real)
-			free(data_i_split.real);
-		if(data_i_split.imag)
-			free(data_i_split.imag);
-		if(data_cl_split.real)
-			free(data_cl_split.real);
-		if(data_cl_split.imag)
-			free(data_cl_split.imag);
-		
-		if(data_in_real)
-			clReleaseMemObject(data_in_real);
-		if(data_in_imag)
-			clReleaseMemObject(data_in_imag);
-		if(data_out_real && testType == clFFT_OUT_OF_PLACE)
-			clReleaseMemObject(data_out_real);
-		if(data_out_imag && clFFT_OUT_OF_PLACE)
-			clReleaseMemObject(data_out_imag);
-	}
-	else 
-	{
-		if(data_i)
-			free(data_i);
-		if(data_cl)
-			free(data_cl);
-		
-		if(data_in)
-			clReleaseMemObject(data_in);
-		if(data_out && testType == clFFT_OUT_OF_PLACE)
-			clReleaseMemObject(data_out);
-	}
-	
-	if(data_iref.real)
-		free(data_iref.real);
-	if(data_iref.imag)
-		free(data_iref.imag);		
-	if(data_oref.real)
-		free(data_oref.real);
-	if(data_oref.imag)
-		free(data_oref.imag);
-	
-	return err;
-}
-
-bool ifLineCommented(const char *line) {
-	const char *Line = line;
-	while(*Line != '\0')
-		if((*Line == '/') && (*(Line + 1) == '/'))
-			return true;
-		else
-			Line++;
-	return false;
-}
-
-cl_device_type getGlobalDeviceType()
-{
-	char *force_cpu = getenv( "CL_DEVICE_TYPE" );
-	if( force_cpu != NULL )
-	{
-		if( strcmp( force_cpu, "gpu" ) == 0 || strcmp( force_cpu, "CL_DEVICE_TYPE_GPU" ) == 0 )
-			return CL_DEVICE_TYPE_GPU;
-		else if( strcmp( force_cpu, "cpu" ) == 0 || strcmp( force_cpu, "CL_DEVICE_TYPE_CPU" ) == 0 )
-			return CL_DEVICE_TYPE_CPU;
-		else if( strcmp( force_cpu, "accelerator" ) == 0 || strcmp( force_cpu, "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 )
-			return CL_DEVICE_TYPE_ACCELERATOR;
-		else if( strcmp( force_cpu, "CL_DEVICE_TYPE_DEFAULT" ) == 0 )
-			return CL_DEVICE_TYPE_DEFAULT;
-	}
-	// default
-	return CL_DEVICE_TYPE_GPU;
-}
-
-void 
-notify_callback(const char *errinfo, const void *private_info, size_t cb, void *user_data)
-{
-    log_error( "%s\n", errinfo );
-}
-
-int
-checkMemRequirements(clFFT_Dim3 n, int batchSize, clFFT_TestType testType, cl_ulong gMemSize)
-{
-	cl_ulong memReq = (testType == clFFT_OUT_OF_PLACE) ? 3 : 2;
-	memReq *= n.x*n.y*n.z*sizeof(clFFT_Complex)*batchSize;
-	memReq = memReq/1024/1024;
-	if(memReq >= gMemSize)
-		return -1;
-	return 0;
-}
-
-int main (int argc, char * const argv[]) {
-	
-	test_start();
-	
-	cl_ulong gMemSize;
-	clFFT_Direction dir = clFFT_Forward;
-	int numIter = 1;
-	clFFT_Dim3 n = { 1024, 1, 1 };
-	int batchSize = 1;
-	clFFT_DataFormat dataFormat = clFFT_SplitComplexFormat;
-	clFFT_Dimension dim = clFFT_1D;
-	clFFT_TestType testType = clFFT_OUT_OF_PLACE;
-	cl_device_id device_ids[16];
-	
-	FILE *paramFile;
-			
-	cl_int err;
-	unsigned int num_devices;
-	
-	cl_device_type device_type = getGlobalDeviceType();	
-	if(device_type != CL_DEVICE_TYPE_GPU) 
-	{
-		log_info("Test only supported on DEVICE_TYPE_GPU\n");
-		test_finish();
-		exit(0);
-	}
-	
-	err = clGetDeviceIDs(NULL, device_type, sizeof(device_ids), device_ids, &num_devices);
-	if(err) 
-	{		
-		log_error("clGetComputeDevice failed\n");
-		test_finish();
-		return -1;
-	}
-	
-	device_id = NULL;
-	
-	unsigned int i;
-	for(i = 0; i < num_devices; i++)
-	{
-	    cl_bool available;
-	    err = clGetDeviceInfo(device_ids[i], CL_DEVICE_AVAILABLE, sizeof(cl_bool), &available, NULL);
-	    if(err)
-	    {
-	         log_error("Cannot check device availability of device # %d\n", i);
-	    }
-	    
-	    if(available)
-	    {
-	        device_id = device_ids[i];
-	        break;
-	    }
-	    else
-	    {
-	        char name[200];
-	        err = clGetDeviceInfo(device_ids[i], CL_DEVICE_NAME, sizeof(name), name, NULL);
-	        if(err == CL_SUCCESS)
-	        {
-	             log_info("Device %s not available for compute\n", name);
-	        }
-	        else
-	        {
-	             log_info("Device # %d not available for compute\n", i);
-	        }
-	    }
-	}
-	
-	if(!device_id)
-	{
-	    log_error("None of the devices available for compute ... aborting test\n");
-	    test_finish();
-	    return -1;
-	}
-	
-	context = clCreateContext(0, 1, &device_id, NULL, NULL, &err);
-	if(!context || err) 
-	{
-		log_error("clCreateContext failed\n");
-		test_finish();
-		return -1;
-	}
-	
-    queue = clCreateCommandQueue(context, device_id, 0, &err);
-    if(!queue || err)
-	{
-        log_error("clCreateCommandQueue() failed.\n");
-		clReleaseContext(context);
-        test_finish();
-        return -1;
-    }  
-	
-	err = clGetDeviceInfo(device_id, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &gMemSize, NULL);
-	if(err)
-	{
-		log_error("Failed to get global mem size\n");
-		clReleaseContext(context);
-		clReleaseCommandQueue(queue);
-		test_finish();
-		return -2;
-	}
-	
-	gMemSize /= (1024*1024);
-			
-	char delim[] = " \n";
-	char tmpStr[100];
-	char line[200];
-	char *param, *val;	
-	int total_errors = 0;
-	if(argc == 1) {
-		log_error("Need file name with list of parameters to run the test\n");
-		test_finish();
-		return -1;
-	}
-	
-	if(argc == 2) {	// arguments are supplied in a file with arguments for a single run are all on the same line
-		paramFile = fopen(argv[1], "r");
-		if(!paramFile) {
-			log_error("Cannot open the parameter file\n");
-			clReleaseContext(context);
-			clReleaseCommandQueue(queue);			
-			test_finish();
-			return -3;
-		}
-		while(fgets(line, 199, paramFile)) {
-			if(!strcmp(line, "") || !strcmp(line, "\n") || ifLineCommented(line))
-				continue;
-			param = strtok(line, delim);
-			while(param) {
-				val = strtok(NULL, delim);
-				if(!strcmp(param, "-n")) {
-					sscanf(val, "%d", &n.x);
-					val = strtok(NULL, delim);
-					sscanf(val, "%d", &n.y);
-					val = strtok(NULL, delim);
-					sscanf(val, "%d", &n.z);					
-				}
-				else if(!strcmp(param, "-batchsize")) 
-					sscanf(val, "%d", &batchSize);
-				else if(!strcmp(param, "-dir")) {
-					sscanf(val, "%s", tmpStr);
-					if(!strcmp(tmpStr, "forward"))
-						dir = clFFT_Forward;
-					else if(!strcmp(tmpStr, "inverse"))
-						dir = clFFT_Inverse;
-				}
-				else if(!strcmp(param, "-dim")) {
-					sscanf(val, "%s", tmpStr);
-					if(!strcmp(tmpStr, "1D"))
-						dim = clFFT_1D;
-					else if(!strcmp(tmpStr, "2D"))
-						dim = clFFT_2D; 
-					else if(!strcmp(tmpStr, "3D"))
-						dim = clFFT_3D;					
-				}
-				else if(!strcmp(param, "-format")) {
-					sscanf(val, "%s", tmpStr);
-					if(!strcmp(tmpStr, "plannar"))
-						dataFormat = clFFT_SplitComplexFormat;
-					else if(!strcmp(tmpStr, "interleaved"))
-						dataFormat = clFFT_InterleavedComplexFormat;					
-				}
-				else if(!strcmp(param, "-numiter"))
-					sscanf(val, "%d", &numIter);
-				else if(!strcmp(param, "-testtype")) {
-					sscanf(val, "%s", tmpStr);
-					if(!strcmp(tmpStr, "out-of-place"))
-						testType = clFFT_OUT_OF_PLACE;
-					else if(!strcmp(tmpStr, "in-place"))
-						testType = clFFT_IN_PLACE;										
-				}
-				param = strtok(NULL, delim);
-			}
-			
-			if(checkMemRequirements(n, batchSize, testType, gMemSize)) {
-				log_info("This test cannot run because memory requirements canot be met by the available device\n");
-				continue;
-			}
-				
-			err = runTest(n, batchSize, dir, dim, dataFormat, numIter, testType);
-			if (err)
-				total_errors++;
-		}
-	}
-	
-	clReleaseContext(context);
-	clReleaseCommandQueue(queue);
-	
-	test_finish();
-	return total_errors;		
-}
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/param.txt b/RTCP/Cobalt/OpenCL_FFT/src/param.txt
deleted file mode 100644
index 595402aa437b07baa8936280909927a09eb6f6dd..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/param.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-
-//
-// File:       param.txt
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
--n 64 1 1 -batchsize 8192 -dir forward -dim 1D -format plannar -numiter 1000 -testtype out-of-place
--n 1024 1 1 -batchsize 8192 -dir forward -dim 1D -format plannar -numiter 1000 -testtype out-of-place
--n 1048576 1 1 -batchsize 4 -dir inverse -dim 1D -format interleaved -numiter 1000 -testtype out-of-place
--n 1024 512 1 -batchsize 8 -dir forward -dim 2D -format interleaved -numiter 1000 -testtype out-of-place
--n 128 128 128 -batchsize 1 -dir inverse -dim 3D -format interleaved -numiter 1000 -testtype out-of-place
--n 16384 1 1 -batchsize 4 -dir forward -dim 1D -format interleaved -numiter 1 -testtype in-place
--n 32 2048 1 -batchsize 8 -dir forward -dim 2D -format interleaved -numiter 1 -testtype in-place
--n 4096 64 1 -batchsize 4 -dir inverse -dim 2D -format plannar -numiter 1 -testtype in-place
--n 64 32 16 -batchsize 1 -dir inverse -dim 3D -format interleaved -numiter 1 -testtype out-of-place
diff --git a/RTCP/Cobalt/OpenCL_FFT/src/procs.h b/RTCP/Cobalt/OpenCL_FFT/src/procs.h
deleted file mode 100644
index f6028c9e5218900accc97fa3dddc19fed885e7df..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/OpenCL_FFT/src/procs.h
+++ /dev/null
@@ -1,53 +0,0 @@
-
-//
-// File:       procs.h
-//
-// Version:    <1.0>
-//
-// Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc. ("Apple")
-//             in consideration of your agreement to the following terms, and your use,
-//             installation, modification or redistribution of this Apple software
-//             constitutes acceptance of these terms.  If you do not agree with these
-//             terms, please do not use, install, modify or redistribute this Apple
-//             software.
-//
-//             In consideration of your agreement to abide by the following terms, and
-//             subject to these terms, Apple grants you a personal, non - exclusive
-//             license, under Apple's copyrights in this original Apple software ( the
-//             "Apple Software" ), to use, reproduce, modify and redistribute the Apple
-//             Software, with or without modifications, in source and / or binary forms;
-//             provided that if you redistribute the Apple Software in its entirety and
-//             without modifications, you must retain this notice and the following text
-//             and disclaimers in all such redistributions of the Apple Software. Neither
-//             the name, trademarks, service marks or logos of Apple Inc. may be used to
-//             endorse or promote products derived from the Apple Software without specific
-//             prior written permission from Apple.  Except as expressly stated in this
-//             notice, no other rights or licenses, express or implied, are granted by
-//             Apple herein, including but not limited to any patent rights that may be
-//             infringed by your derivative works or by other works in which the Apple
-//             Software may be incorporated.
-//
-//             The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-//             WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-//             WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
-//             PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION
-//             ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-//
-//             IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-//             CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-//             SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-//             INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION
-//             AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
-//             UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR
-//             OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Copyright ( C ) 2008 Apple Inc. All Rights Reserved.
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#define test_start()
-#define log_perf(_number, _higherBetter, _numType, _format, ...) printf("Performance Number " _format " (in %s, %s): %g\n",##__VA_ARGS__, _numType, _higherBetter?"higher is better":"lower is better" , _number)
-#define log_info printf
-#define log_error printf
-#define test_finish()
diff --git a/RTCP/Cobalt/OutputProc/scripts/common.c b/RTCP/Cobalt/OutputProc/scripts/common.c
index ee313a0eaabd2ea666d2652fb5859a8dc228ef29..0fbcb2dc3532771ac59bd47065c53d6b3ee1a0c1 100644
--- a/RTCP/Cobalt/OutputProc/scripts/common.c
+++ b/RTCP/Cobalt/OutputProc/scripts/common.c
@@ -294,19 +294,31 @@ int create_raw_eth_socket(const char *desc)
     }
 
     if (has_src_mac) {
-      * -- prog = (struct sock_filter) BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htonl(* (int *) (src_mac + 2)), 0 , jump_offset);
+      int high;
+      short low;
+
+      memcpy(&high, src_mac + 2, sizeof high);
+      memcpy(&low,  src_mac + 0, sizeof low);
+
+      * -- prog = (struct sock_filter) BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htonl(high), 0 , jump_offset);
       * -- prog = (struct sock_filter) BPF_STMT(BPF_LD + BPF_W + BPF_ABS , 8);
       jump_offset += 2;
-      * -- prog = (struct sock_filter) BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htons(* (short *) src_mac), 0 , jump_offset);
+      * -- prog = (struct sock_filter) BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htons(low), 0 , jump_offset);
       * -- prog = (struct sock_filter) BPF_STMT(BPF_LD + BPF_H + BPF_ABS , 6);
       jump_offset += 2;
     }
 
     if (has_dst_mac) {
-      * -- prog = (struct sock_filter) BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htons(* (short *) (dst_mac + 4)), 0 , jump_offset);
+      short high;
+      int low;
+
+      memcpy(&high, dst_mac + 4, sizeof high);
+      memcpy(&low,  dst_mac + 0, sizeof low);
+
+      * -- prog = (struct sock_filter) BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htons(high), 0 , jump_offset);
       * -- prog = (struct sock_filter) BPF_STMT(BPF_LD + BPF_H + BPF_ABS , 4);
       jump_offset += 2;
-      * -- prog = (struct sock_filter) BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htonl(* (int *) dst_mac), 0 , jump_offset);
+      * -- prog = (struct sock_filter) BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, htonl(low), 0 , jump_offset);
       * -- prog = (struct sock_filter) BPF_STMT(BPF_LD + BPF_W + BPF_ABS , 0);
       jump_offset += 2;
     }
diff --git a/RTCP/Cobalt/OutputProc/src/CMakeLists.txt b/RTCP/Cobalt/OutputProc/src/CMakeLists.txt
index 8f49b558927d3597d65e298e30f8c49a14400f95..c1e227fcdf34571244e715dc49655a7bb0fa1455 100644
--- a/RTCP/Cobalt/OutputProc/src/CMakeLists.txt
+++ b/RTCP/Cobalt/OutputProc/src/CMakeLists.txt
@@ -24,24 +24,24 @@ lofar_add_library(outputproc
   OutputThread.cc
   SubbandWriter.cc
   RSPRawWriter.cc
-  TBB_Dipole.cc
-  TBB_Frame.cc
-  TBB_StaticMapping.cc
-  TBB_Station.cc
-  TBB_StreamWriter.cc
-  TBB_Writer.cc
+  #TBB_Dipole.cc
+  #TBB_Frame.cc
+  #TBB_StaticMapping.cc
+  #TBB_Station.cc
+  #TBB_StreamWriter.cc
+  #TBB_Writer.cc
 )
 
 lofar_add_sbin_scripts(gnuplotMS.sh)
 
 install(FILES
   outputProc.log_prop
-  TBB_Writer.log_prop
+  #TBB_Writer.log_prop
   DESTINATION etc)
 
 lofar_add_bin_program(outputProc outputProc.cc)
 lofar_add_bin_program(versionoutputproc versionoutputproc.cc)
-lofar_add_bin_program(TBB_Writer TBB_Writer_main.cc)
+#lofar_add_bin_program(TBB_Writer TBB_Writer_main.cc)
 
 lofar_add_sbin_program(createHeaders createHeaders.cc)
 lofar_add_sbin_program(plotMS plotMS.cc)
diff --git a/RTCP/Cobalt/OutputProc/src/GPUProcIO.cc b/RTCP/Cobalt/OutputProc/src/GPUProcIO.cc
index cac2493dd1888d1b091ca2e18fb81f25b7cab9c0..c1275ece96a0f10f30e65765860090764511160a 100644
--- a/RTCP/Cobalt/OutputProc/src/GPUProcIO.cc
+++ b/RTCP/Cobalt/OutputProc/src/GPUProcIO.cc
@@ -38,6 +38,7 @@
 #include <Common/Exceptions.h>
 #include <Common/IOPriority.h>
 #include <MessageBus/ToBus.h>
+#include <MessageBus/Util.h>
 #include <MessageBus/Protocols/TaskFeedbackDataproducts.h>
 #include <Stream/PortBroker.h>
 #include <Stream/NetFuncs.h>
@@ -94,7 +95,7 @@ bool process(Stream &controlStream)
 
   string myHostName = myHostname(false);
   // Get all my hostnames to see which output files are my responsibility.
-  set<string> myHostNames = myInterfaceHostnames(); // includes IPv4, IPv6 loopback name(s)
+  set<string> myHostNames = myInterfaces(true, false, -1); // includes IPv4, IPv6 loopback name(s)
   myHostNames.insert(myHostname(true)); // might be different (e.g. on cbt nodes)
   set<string> myShortHostNames; // to avoid changing myHostNames while iterating
   string hostNameConcat;
@@ -371,7 +372,7 @@ bool process(Stream &controlStream)
 
     LOG_DEBUG_STR("Forwarding LTA feedback");
 
-    ToBus bus("lofar.task.feedback.dataproducts");
+    ToBus bus("otdb.task.feedback.dataproducts", broker_feedback());
 
     const std::string myName = str(boost::format("Cobalt/OutputProc on %s") % myHostName);
 
diff --git a/RTCP/Cobalt/OutputProc/src/InputThread.cc b/RTCP/Cobalt/OutputProc/src/InputThread.cc
index a34218e8269108a4361899cbe32b2f26825d26fd..cbc606c6e8d07db97aadbd608aeabdf78d16fce8 100644
--- a/RTCP/Cobalt/OutputProc/src/InputThread.cc
+++ b/RTCP/Cobalt/OutputProc/src/InputThread.cc
@@ -84,7 +84,7 @@ namespace LOFAR
         LOG_WARN_STR(itsLogPrefix << "Did not send " << didNotSendPerc << "% of the data");
 
       // Append end-of-stream marker
-      itsOutputPool.filled.append(NULL);
+      itsOutputPool.filled.append(NULL, false);
     }
   } // namespace Cobalt
 } // namespace LOFAR
diff --git a/RTCP/Cobalt/OutputProc/src/MSWriterDAL.cc b/RTCP/Cobalt/OutputProc/src/MSWriterDAL.cc
index 6bf21ba685d6aa00dc89ed3d6395045429b19c5e..73b72f7d8d8cb13e4cd69be54c542eaba055bf66 100644
--- a/RTCP/Cobalt/OutputProc/src/MSWriterDAL.cc
+++ b/RTCP/Cobalt/OutputProc/src/MSWriterDAL.cc
@@ -190,7 +190,7 @@ namespace LOFAR
       // BF_File specific root group parameters
       file.createOfflineOnline().value = itsParset.settings.realTime ? "Online" : "Offline";
       file.BFFormat().value = "TAB";
-      file.BFVersion().value = str(format("Cobalt/OutputProc %s r%s using DAL %s and HDF5 %s") % OutputProcVersion::getVersion() % OutputProcVersion::getRevision() % dal::version().to_string() % dal::version_hdf5().to_string());
+      file.BFVersion().value = str(format("Cobalt2/OutputProc %s r%s using DAL %s and HDF5 %s") % OutputProcVersion::getVersion() % OutputProcVersion::getRevision() % dal::version().to_string() % dal::version_hdf5().to_string());
 
       file.totalIntegrationTime().value = itsNrExpectedBlocks * itsParset.settings.blockDuration();
       file.totalIntegrationTimeUnit().value = "s";
diff --git a/RTCP/Cobalt/OutputProc/src/MSWriterNull.cc b/RTCP/Cobalt/OutputProc/src/MSWriterNull.cc
index f1043edc4e5546cf536b0bc38a25173f42130c06..0295fe9a45cfdaada431ad54fda64bb0b80decf0 100644
--- a/RTCP/Cobalt/OutputProc/src/MSWriterNull.cc
+++ b/RTCP/Cobalt/OutputProc/src/MSWriterNull.cc
@@ -51,13 +51,7 @@ namespace LOFAR
 
     void MSWriterNull::write(StreamableData *data)
     {
-      // We do not know why the creation of the proper writer failed.
-      // Assume nothing and only report that we did not write anything
-      itsConfiguration.replace("percentageWritten", str(format("%u") % 0));
-      itsConfiguration.replace("size", str(format("%u") % getDataSize()));
-      itsConfiguration.replace("duration", 
-          str(format("%f") % ((data->sequenceNumber() + 1) *
-            itsParset.settings.correlator.integrationTime())));
+      (void)data;
     }
 
   } // namespace Cobalt
diff --git a/RTCP/Cobalt/OutputProc/src/MeasurementSetFormat.cc b/RTCP/Cobalt/OutputProc/src/MeasurementSetFormat.cc
index 3bdf9534242767d126ffdd1c6eb008ab8c85359d..8b226b2e9c348ef3b61d9db157751fd49fbb81f6 100644
--- a/RTCP/Cobalt/OutputProc/src/MeasurementSetFormat.cc
+++ b/RTCP/Cobalt/OutputProc/src/MeasurementSetFormat.cc
@@ -572,7 +572,7 @@ namespace LOFAR
       time.put        (rownr, Time().modifiedJulianDay() * 24. * 3600.);
       obsId.put       (rownr, 0);
       message.put     (rownr, "parameters");
-      application.put (rownr, "OLAP");
+      application.put (rownr, "COBALT2");
       priority.put    (rownr, "NORMAL");
       origin.put      (rownr, Version::getInfo<OutputProcVersion>("OutputProc", "full"));
       parms.put       (rownr, appvec);
@@ -586,7 +586,7 @@ namespace LOFAR
       // Fill the columns
       msproc.addRow();
       msprocCol.type().put (0, "CORRELATOR");
-      msprocCol.subType().put (0, "LOFAR-COBALT");
+      msprocCol.subType().put (0, "LOFAR-COBALT2");
       msprocCol.typeId().put (0, -1);
       msprocCol.modeId().put (0, -1);
       msprocCol.flagRow().put (0, False);
diff --git a/RTCP/Cobalt/OutputProc/src/OutputThread.cc b/RTCP/Cobalt/OutputProc/src/OutputThread.cc
index 72e6d5edbc34e44c7d5b095e7b09adb51c85b6bc..6f9438c3763dda8e5857a75473cee871d4d301f2 100644
--- a/RTCP/Cobalt/OutputProc/src/OutputThread.cc
+++ b/RTCP/Cobalt/OutputProc/src/OutputThread.cc
@@ -133,7 +133,8 @@ namespace LOFAR
           try {
             BudgetTimer::StartStop ss(writeTimer);
 
-            itsWriter->write(data);
+            if (itsParset.settings.writeToDisk)
+              itsWriter->write(data);
           } catch (SystemCallException &ex) {
             LOG_WARN_STR(itsLogPrefix << "OutputThread caught non-fatal exception: " << ex.what());
             itsBlocksDroppedByMe++;
@@ -324,7 +325,7 @@ namespace LOFAR
 
           logInitialStreamMetadataEvents("Correlated", fileName, directoryName);
         } catch (Exception &ex) {
-          LOG_ERROR_STR(itsLogPrefix << "Cannot open " << path << ": " << ex);
+          LOG_ERROR_STR(itsLogPrefix << "Cannot open " << path << ": " << ex.what());
           itsWriter = new MSWriterNull(itsParset);
 
 #if defined HAVE_AIPSPP
@@ -386,7 +387,7 @@ namespace LOFAR
           logInitialStreamMetadataEvents("Beamformed", fileName, directoryName);
 
         } catch (Exception &ex) {
-          LOG_ERROR_STR(itsLogPrefix << "Cannot open " << path << ": " << ex);
+          LOG_ERROR_STR(itsLogPrefix << "Cannot open " << path << ": " << ex.what());
           itsWriter = new MSWriterNull(itsParset);
 
 #if defined HAVE_AIPSPP
@@ -450,7 +451,7 @@ namespace LOFAR
           // The rest of the system doesn't know about RSP raw data output, but if monitoring did, enable this:
           //logInitialStreamMetadataEvents("RSPRaw", fileName, directoryName);
         } catch (Exception& ex) {
-          LOG_ERROR_STR(itsLogPrefix << "Cannot open " << path << ": " << ex);
+          LOG_ERROR_STR(itsLogPrefix << "Cannot open " << path << ": " << ex.what());
           itsWriter = new MSWriterNull(itsParset);
         }
       } else { // don't handle exception in non-RT: it is fatal: avoid rethrow for a clean stracktrace
@@ -520,7 +521,7 @@ namespace LOFAR
         }
 
         rspPortsValue.push_back(']');
-        rspRawParset.replace("PIC.Core." + antFieldName + ".RSP.ports", rspPortsValue);
+        rspRawParset.replace("PIC.Core." + antFieldName + ".RSP.sources", rspPortsValue);
         rspRawParset.replace("PIC.Core." + antFieldName + ".RSP.receiver", "localhost");
 
         dataslotListValue.push_back(']');
diff --git a/RTCP/Cobalt/OutputProc/src/RSPRawWriter.cc b/RTCP/Cobalt/OutputProc/src/RSPRawWriter.cc
index 4d6d467bf13168e5ef481e9e0e80e771fb47f615..09b8246ea7bc90814065ab9e9c2573dd92a37d45 100644
--- a/RTCP/Cobalt/OutputProc/src/RSPRawWriter.cc
+++ b/RTCP/Cobalt/OutputProc/src/RSPRawWriter.cc
@@ -41,17 +41,9 @@ namespace LOFAR
       itsInputThread(parset, RSP_RAW_DATA, streamNr, itsOutputPool, logPrefix),
       itsOutputThread(parset, streamNr, itsOutputPool, mdLogger, mdKeyPrefix, logPrefix)
     {
-      NSTimer timer(str(format("preallocator %u") % itsStreamNr), true, true);
-
       for (unsigned i = 0; i < preAllocateReceiveQueue; i++) {
-        timer.start();
-
-        LOG_DEBUG_STR(str(format("[stream %u] Allocating element %u") % itsStreamNr % i));
         RSPRawData *data = new RSPRawData();
-        LOG_DEBUG_STR(str(format("[stream %u] Appending element %u") % itsStreamNr % i));
         itsOutputPool.free.append(data);
-
-        timer.stop();
       }
     }
 
diff --git a/RTCP/Cobalt/OutputProc/src/SubbandWriter.cc b/RTCP/Cobalt/OutputProc/src/SubbandWriter.cc
index 10e2041003301595cf30e973c84b5cc0431d9728..7f679c482a9ee43d73584b87b8e0735b546c8409 100644
--- a/RTCP/Cobalt/OutputProc/src/SubbandWriter.cc
+++ b/RTCP/Cobalt/OutputProc/src/SubbandWriter.cc
@@ -57,17 +57,9 @@ namespace LOFAR
 
       itsAllocator = new SparseSetAllocator(*itsArena);
 
-      NSTimer timer(str(format("preallocator %u") % itsStreamNr), true, true);
-
       for (unsigned i = 0; i < preAllocateReceiveQueue; i++) {
-        timer.start();
-
-        LOG_DEBUG_STR(str(format("[stream %u] Allocating element %u") % itsStreamNr % i));
         CorrelatedData *data = new CorrelatedData(itsNrStations, itsNrChannels, itsNrSamples, *itsAllocator, itsAlignment);
-        LOG_DEBUG_STR(str(format("[stream %u] Appending element %u") % itsStreamNr % i));
         itsOutputPool.free.append(data);
-
-        timer.stop();
       }
     }
 
@@ -79,17 +71,10 @@ namespace LOFAR
 #       pragma omp section
         {
           OMPThread::ScopedName sn(str(format("allocator %u") % itsStreamNr));
-          NSTimer timer(str(format("allocator %u") % itsStreamNr), true, true);
 
           for (unsigned i = preAllocateReceiveQueue; i < maxReceiveQueueSize; i++) {
-            timer.start();
-
-            LOG_DEBUG_STR(str(format("[stream %u] Allocating element %u") % itsStreamNr % i));
             CorrelatedData *data = new CorrelatedData(itsNrStations, itsNrChannels, itsNrSamples, *itsAllocator, itsAlignment);
-            LOG_DEBUG_STR(str(format("[stream %u] Appending element %u") % itsStreamNr % i));
             itsOutputPool.free.append(data);
-
-            timer.stop();
           }
         }
 
diff --git a/RTCP/Cobalt/OutputProc/src/TBB_StreamWriter.cc b/RTCP/Cobalt/OutputProc/src/TBB_StreamWriter.cc
index be39e988fd7724d0cd7d24b8f3943387991a497d..d8660c2f05cf75ebae940a7956608306d8375609 100644
--- a/RTCP/Cobalt/OutputProc/src/TBB_StreamWriter.cc
+++ b/RTCP/Cobalt/OutputProc/src/TBB_StreamWriter.cc
@@ -81,7 +81,7 @@ namespace LOFAR
       try {
         itsInputThread.reset(new Thread(this, &TBB_StreamWriter::mainInputLoop, "TBB-in-thr", logPrefix + "InputThread: "));
       } catch (exception& ) {
-        itsReceiveQueue.append(NULL); // tell output thread to stop
+        itsReceiveQueue.append(NULL, false); // tell output thread to stop
         throw;
       }
       // Don't change any member vars here, as threads have already started
@@ -232,7 +232,7 @@ namespace LOFAR
 
         ~NotifyOutputThread() {
           try {
-            queue.append(NULL);
+            queue.append(NULL, false);
           } catch (exception& exc) {
             LOG_WARN_STR("TBB: may have failed to notify output thread to terminate: " << exc.what());
           }
diff --git a/RTCP/Cobalt/OutputProc/src/TBB_StreamWriter.h b/RTCP/Cobalt/OutputProc/src/TBB_StreamWriter.h
index 8b153290d76f1958aae69aeb3616c73509cc6fb2..ce39c8823f1b15e1901fcc8dbac8a0d940021707 100644
--- a/RTCP/Cobalt/OutputProc/src/TBB_StreamWriter.h
+++ b/RTCP/Cobalt/OutputProc/src/TBB_StreamWriter.h
@@ -31,7 +31,7 @@
 #include <boost/crc.hpp>
 
 #include <Common/Thread/Thread.h>
-#include <Common/Thread/Queue.h>
+#include <CoInterface/Queue.h>
 #include <Stream/FileStream.h>
 
 namespace LOFAR
diff --git a/RTCP/Cobalt/OutputProc/test/CMakeLists.txt b/RTCP/Cobalt/OutputProc/test/CMakeLists.txt
index b0def8dba9afa4c3e7b9ca9e6df74f3b0d7775b0..c20a6aa792abc37da9950d3617250b3a6e04fb58 100644
--- a/RTCP/Cobalt/OutputProc/test/CMakeLists.txt
+++ b/RTCP/Cobalt/OutputProc/test/CMakeLists.txt
@@ -18,7 +18,7 @@ configure_file(
 lofar_add_test(tMSWriterCorrelated tMSWriterCorrelated.cc)
 lofar_add_test(tDAL tDAL.cc)
 lofar_add_test(tFastFileStream tFastFileStream.cc)
-lofar_add_test(tTBB_StaticMapping tTBB_StaticMapping.cc)
-lofar_add_test(tTBB_Writer-transient)
-lofar_add_test(tTBB_Writer-spectral)
+#lofar_add_test(tTBB_StaticMapping tTBB_StaticMapping.cc)
+#lofar_add_test(tTBB_Writer-transient)
+#lofar_add_test(tTBB_Writer-spectral)
 
diff --git a/RTCP/Cobalt/OutputProc/test/tMeasurementSetFormat.parset-j2000 b/RTCP/Cobalt/OutputProc/test/tMeasurementSetFormat.parset-j2000
index 64c15dd3b2cca2dc8b307e6fda85f60196d66b67..c0a6e8c25506be10bfd27ab2e80f1fb4e0bdb379 100644
--- a/RTCP/Cobalt/OutputProc/test/tMeasurementSetFormat.parset-j2000
+++ b/RTCP/Cobalt/OutputProc/test/tMeasurementSetFormat.parset-j2000
@@ -669,18 +669,18 @@ PIC.Core.S6.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
 PIC.Core.S61.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
 PIC.Core.S62.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
 PIC.Core.S9.phaseCenter = [3826967.64713,460904.072585,5064612.8258]
-PIC.Core.CS002HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS002HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS003HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS003HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS004HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS004HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS005HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS005HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS006HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS006HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS007HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS007HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS002HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS002HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS003HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS003HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS004HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS004HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS005HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS005HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS006HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS006HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS007HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS007HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
 PIC.Core.T1.phaseCenter = [3826615.56096,460986.585898,5064718.84237]
 PIC.Core.T10.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
 PIC.Core.T129.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
diff --git a/RTCP/Cobalt/OutputProc/test/tMeasurementSetFormat.parset-sun b/RTCP/Cobalt/OutputProc/test/tMeasurementSetFormat.parset-sun
index 5c48c6a505176ab5fe9e2e6c52f45e73feed2a29..2b1bf2cd59178d95634d04ac59dc0ae0ac54bce7 100644
--- a/RTCP/Cobalt/OutputProc/test/tMeasurementSetFormat.parset-sun
+++ b/RTCP/Cobalt/OutputProc/test/tMeasurementSetFormat.parset-sun
@@ -669,18 +669,18 @@ PIC.Core.S6.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
 PIC.Core.S61.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
 PIC.Core.S62.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
 PIC.Core.S9.phaseCenter = [3826967.64713,460904.072585,5064612.8258]
-PIC.Core.CS002HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS002HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS003HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS003HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS004HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS004HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS005HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS005HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS006HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS006HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
-PIC.Core.CS007HBA0.RSP.ports = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
-PIC.Core.CS007HBA1.RSP.ports = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS002HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS002HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS003HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS003HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS004HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS004HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS005HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS005HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS006HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS006HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
+PIC.Core.CS007HBA0.RSP.sources = [0.0.0.0:4346,0.0.0.0:4347,0.0.0.0:4348,0.0.0.0:4349]
+PIC.Core.CS007HBA1.RSP.sources = [0.0.0.0:4352,0.0.0.0:4353,0.0.0.0:4354,0.0.0.0:4355]
 PIC.Core.T1.phaseCenter = [3826615.56096,460986.585898,5064718.84237]
 PIC.Core.T10.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
 PIC.Core.T129.phaseCenter = [3826815.56096,460986.585898,5064718.84237]
diff --git a/RTCP/Cobalt/OutputProc/test/tTBB_Writer-spectral.parset b/RTCP/Cobalt/OutputProc/test/tTBB_Writer-spectral.parset
index 7498337b6c584c43abe121d28e562b29f0dbcc47..f06576783bfb7f704404d7a136eafc53ec84f6bf 100644
--- a/RTCP/Cobalt/OutputProc/test/tTBB_Writer-spectral.parset
+++ b/RTCP/Cobalt/OutputProc/test/tTBB_Writer-spectral.parset
@@ -119,14 +119,14 @@ PIC.Core.CS011HBA0.HBA_DUAL_INNER.HBA_110_190.delay.X=7.487901e-06
 PIC.Core.CS011HBA0.HBA_DUAL_INNER.HBA_110_190.delay.Y=7.488469e-06
 PIC.Core.CS011HBA0.HBA_DUAL_INNER.HBA_110_190.phase0.X=0.000000e+00
 PIC.Core.CS011HBA0.HBA_DUAL_INNER.HBA_110_190.phase0.Y=0.000000e+00
-PIC.Core.CS011HBA0.RSP.ports=[udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA0.RSP.sources=[udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA0.RSP.receiver=cbt003_0
 PIC.Core.CS011HBA0.phaseCenter=[3826637.421, 461227.345, 5064829.134]
 PIC.Core.CS011HBA1.HBA_DUAL_INNER.HBA_110_190.delay.X=7.487994e-06
 PIC.Core.CS011HBA1.HBA_DUAL_INNER.HBA_110_190.delay.Y=7.488150e-06
 PIC.Core.CS011HBA1.HBA_DUAL_INNER.HBA_110_190.phase0.X=0.000000e+00
 PIC.Core.CS011HBA1.HBA_DUAL_INNER.HBA_110_190.phase0.Y=0.000000e+00
-PIC.Core.CS011HBA1.RSP.ports=[udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
+PIC.Core.CS011HBA1.RSP.sources=[udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
 PIC.Core.CS011HBA1.RSP.receiver=cbt003_0
 PIC.Core.CS011HBA1.phaseCenter=[3826648.961, 461354.241, 5064809.003]
 
@@ -139,14 +139,14 @@ PIC.Core.CS013HBA0.HBA_DUAL_INNER.HBA_110_190.delay.X=8.708572e-06
 PIC.Core.CS013HBA0.HBA_DUAL_INNER.HBA_110_190.delay.Y=8.708498e-06
 PIC.Core.CS013HBA0.HBA_DUAL_INNER.HBA_110_190.phase0.X=0.000000e+00
 PIC.Core.CS013HBA0.HBA_DUAL_INNER.HBA_110_190.phase0.Y=0.000000e+00
-PIC.Core.CS013HBA0.RSP.ports=[udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA0.RSP.sources=[udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA0.RSP.receiver=cbt005_0
 PIC.Core.CS013HBA0.phaseCenter=[3826318.954, 460856.125, 5065101.850]
 PIC.Core.CS013HBA1.HBA_DUAL_INNER.HBA_110_190.delay.X=8.708397e-06
 PIC.Core.CS013HBA1.HBA_DUAL_INNER.HBA_110_190.delay.Y=8.708523e-06
 PIC.Core.CS013HBA1.HBA_DUAL_INNER.HBA_110_190.phase0.X=0.000000e+00
 PIC.Core.CS013HBA1.HBA_DUAL_INNER.HBA_110_190.phase0.Y=0.000000e+00
-PIC.Core.CS013HBA1.RSP.ports=[udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
+PIC.Core.CS013HBA1.RSP.sources=[udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
 PIC.Core.CS013HBA1.RSP.receiver=cbt005_0
 PIC.Core.CS013HBA1.phaseCenter=[3826402.103, 460774.267, 5065046.836]
 
diff --git a/RTCP/Cobalt/OutputProc/test/tTBB_Writer-transient.parset b/RTCP/Cobalt/OutputProc/test/tTBB_Writer-transient.parset
index 360778dcce53884b5f8467cdd206d7f3b7934e17..dc366133f338f07e26a24c5e507402357395c4dd 100644
--- a/RTCP/Cobalt/OutputProc/test/tTBB_Writer-transient.parset
+++ b/RTCP/Cobalt/OutputProc/test/tTBB_Writer-transient.parset
@@ -119,14 +119,14 @@ PIC.Core.CS011HBA0.HBA_DUAL_INNER.HBA_110_190.delay.X=7.487901e-06
 PIC.Core.CS011HBA0.HBA_DUAL_INNER.HBA_110_190.delay.Y=7.488469e-06
 PIC.Core.CS011HBA0.HBA_DUAL_INNER.HBA_110_190.phase0.X=0.000000e+00
 PIC.Core.CS011HBA0.HBA_DUAL_INNER.HBA_110_190.phase0.Y=0.000000e+00
-PIC.Core.CS011HBA0.RSP.ports=[udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
+PIC.Core.CS011HBA0.RSP.sources=[udp:cbt003-10GB02:10110, udp:cbt003-10GB02:10111, udp:cbt003-10GB02:10112, udp:cbt003-10GB02:10113]
 PIC.Core.CS011HBA0.RSP.receiver=cbt003_0
 PIC.Core.CS011HBA0.phaseCenter=[3826637.421, 461227.345, 5064829.134]
 PIC.Core.CS011HBA1.HBA_DUAL_INNER.HBA_110_190.delay.X=7.487994e-06
 PIC.Core.CS011HBA1.HBA_DUAL_INNER.HBA_110_190.delay.Y=7.488150e-06
 PIC.Core.CS011HBA1.HBA_DUAL_INNER.HBA_110_190.phase0.X=0.000000e+00
 PIC.Core.CS011HBA1.HBA_DUAL_INNER.HBA_110_190.phase0.Y=0.000000e+00
-PIC.Core.CS011HBA1.RSP.ports=[udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
+PIC.Core.CS011HBA1.RSP.sources=[udp:cbt003-10GB02:10116, udp:cbt003-10GB02:10117, udp:cbt003-10GB02:10118, udp:cbt003-10GB02:10119]
 PIC.Core.CS011HBA1.RSP.receiver=cbt003_0
 PIC.Core.CS011HBA1.phaseCenter=[3826648.961, 461354.241, 5064809.003]
 
@@ -139,14 +139,14 @@ PIC.Core.CS013HBA0.HBA_DUAL_INNER.HBA_110_190.delay.X=8.708572e-06
 PIC.Core.CS013HBA0.HBA_DUAL_INNER.HBA_110_190.delay.Y=8.708498e-06
 PIC.Core.CS013HBA0.HBA_DUAL_INNER.HBA_110_190.phase0.X=0.000000e+00
 PIC.Core.CS013HBA0.HBA_DUAL_INNER.HBA_110_190.phase0.Y=0.000000e+00
-PIC.Core.CS013HBA0.RSP.ports=[udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
+PIC.Core.CS013HBA0.RSP.sources=[udp:cbt005-10GB02:10130, udp:cbt005-10GB02:10131, udp:cbt005-10GB02:10132, udp:cbt005-10GB02:10133]
 PIC.Core.CS013HBA0.RSP.receiver=cbt005_0
 PIC.Core.CS013HBA0.phaseCenter=[3826318.954, 460856.125, 5065101.850]
 PIC.Core.CS013HBA1.HBA_DUAL_INNER.HBA_110_190.delay.X=8.708397e-06
 PIC.Core.CS013HBA1.HBA_DUAL_INNER.HBA_110_190.delay.Y=8.708523e-06
 PIC.Core.CS013HBA1.HBA_DUAL_INNER.HBA_110_190.phase0.X=0.000000e+00
 PIC.Core.CS013HBA1.HBA_DUAL_INNER.HBA_110_190.phase0.Y=0.000000e+00
-PIC.Core.CS013HBA1.RSP.ports=[udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
+PIC.Core.CS013HBA1.RSP.sources=[udp:cbt005-10GB02:10136, udp:cbt005-10GB02:10137, udp:cbt005-10GB02:10138, udp:cbt005-10GB02:10139]
 PIC.Core.CS013HBA1.RSP.receiver=cbt005_0
 PIC.Core.CS013HBA1.phaseCenter=[3826402.103, 460774.267, 5065046.836]
 
diff --git a/RTCP/Cobalt/clAmdFft/appmlEnv.sh b/RTCP/Cobalt/clAmdFft/appmlEnv.sh
deleted file mode 100755
index 1752540a870c8cc213a24d0610241bec79af922d..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/appmlEnv.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /bin/bash
-# Short script meant to automate the task of setting up a terminal window to 
-# use the APPML library
-
-# Verify that this script has been sourced, not directly executed
-if [[ "${BASH_SOURCE[0]}" == "${0}" ]]
-then
-	echo "This script is meant to be sourced '.', as it modifies environmental variables"
-	echo "Try running as: '. $(basename ${0})'"
-	exit
-fi
-
-# This is a sequence of bash commands to get the directory of this script
-scriptDir=$(dirname $(readlink -f ${BASH_SOURCE[0]}))
-# echo Script dir is: ${scriptDir}
-
-# Bash regexp to determine if the terminal is set up to point to APPML
-if [[ ${LD_LIBRARY_PATH} = *${scriptDir}/lib64:${scriptDir}/lib32* ]]
-then
-	echo "APPML math libraries is set in LD_LIBRARY_PATH"
-else
-	echo "Patching LD_LIBRARY_PATH to include APPML math libraries"
-	export LD_LIBRARY_PATH=${scriptDir}/lib64:${scriptDir}/lib32:${LD_LIBRARY_PATH}
-fi
diff --git a/RTCP/Cobalt/clAmdFft/bin32/clAmdFft.Client b/RTCP/Cobalt/clAmdFft/bin32/clAmdFft.Client
deleted file mode 120000
index 4c429f2ba6b154932f86938a7f85885fd7c7d73a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/bin32/clAmdFft.Client
+++ /dev/null
@@ -1 +0,0 @@
-clAmdFft.Client-1.8.291
\ No newline at end of file
diff --git a/RTCP/Cobalt/clAmdFft/bin32/clAmdFft.Client-1.8.291 b/RTCP/Cobalt/clAmdFft/bin32/clAmdFft.Client-1.8.291
deleted file mode 100755
index 7f34771aed6d08c2fc6704228a854c21f9a9aa74..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/clAmdFft/bin32/clAmdFft.Client-1.8.291 and /dev/null differ
diff --git a/RTCP/Cobalt/clAmdFft/bin64/clAmdFft.Client b/RTCP/Cobalt/clAmdFft/bin64/clAmdFft.Client
deleted file mode 120000
index 4c429f2ba6b154932f86938a7f85885fd7c7d73a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/bin64/clAmdFft.Client
+++ /dev/null
@@ -1 +0,0 @@
-clAmdFft.Client-1.8.291
\ No newline at end of file
diff --git a/RTCP/Cobalt/clAmdFft/bin64/clAmdFft.Client-1.8.291 b/RTCP/Cobalt/clAmdFft/bin64/clAmdFft.Client-1.8.291
deleted file mode 100755
index 8dbf34568a62e89262fe165bfe7edf5a621406d8..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/clAmdFft/bin64/clAmdFft.Client-1.8.291 and /dev/null differ
diff --git a/RTCP/Cobalt/clAmdFft/clAmdFft-1.8.291-Linux.tar.gz b/RTCP/Cobalt/clAmdFft/clAmdFft-1.8.291-Linux.tar.gz
deleted file mode 100644
index 8f495d1388576ab1abf15db4727c2a7c1a0d2f35..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/clAmdFft/clAmdFft-1.8.291-Linux.tar.gz and /dev/null differ
diff --git a/RTCP/Cobalt/clAmdFft/clAmdFft-EULA.txt b/RTCP/Cobalt/clAmdFft/clAmdFft-EULA.txt
deleted file mode 100644
index 8cf752a15d2d961d9c640ad0bd67efd695c150a3..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/clAmdFft-EULA.txt
+++ /dev/null
@@ -1,402 +0,0 @@
-LICENSE AGREEMENT
-
-IMPORTANT-READ CAREFULLY:  Do not install, copy or use the enclosed Materials 
-(defined below) until carefully reading and agreeing to the following terms 
-and conditions.  This is a legal agreement ("Agreement") between you (either 
-an individual or an entity) ("You") and Advanced Micro Devices, Inc.  
-("AMD").  If You do not agree to the terms of this Agreement, do not install, 
-copy or use the Materials or any portion thereof.  By installing, copying or 
-using the Materials provided herewith or that is made available by AMD to 
-download from any media, You agree to all of the terms of this Agreement.  
-Note that these Materials are AMD Confidential Information and may not be 
-shared with any third party except as expressly provided below.
-
-1.	DEFINITIONS.
-
-In addition to those definitions set forth elsewhere in this Agreement, the 
-following terms have the meanings specified below:
-a)	"Distributed Software" means software developed or modified by You either 
-statically linked to Libraries or dynamically linked to Runtimes, and/or 
-derivative works of the Sample Source or modifiable Documentation.
-b)	"Documentation" means associated install scripts and online or electronic 
-documentation included as part of the deliverables in the Materials, or other 
-related materials or any portion thereof.
-c)	"Free Software License" means any software license that requires as a 
-condition of use, modification, adaptation or distribution of such licensed 
-software that other software derived from, distributed with or incorporated 
-into at the source code level be disclosed or distributed in Source Code 
-form.  By way of example, Free Software License includes, but is in no way 
-limited to any of the following licenses or distribution models, or licenses 
-or distribution models similar to any of the following: (i) GNU's General 
-Public License (GPL) or Lesser/Library GPL (LGPL), (ii) The Artistic License 
-(e.g., PERL), (iii) the Mozilla Public License, (iv) the Netscape Public 
-License, (v) the Sun Community Source License (SCSL), and (vi) the Sun 
-Industry Standards Source License (SISSL).
-d)	"Intellectual Property Rights" means any rights under any patents, 
-trademarks, copyrights, mask works, trade secret information, intellectual 
-property, license or similar materials.
-e)	"Libraries" means libraries in Object Code included as part of the 
-deliverables in the Materials that may be statically linked into Your 
-software for the Licensed Purpose.
-f)	"Licensed Purpose" means: (i) test and evaluate the Materials internally; 
-(ii) use of the Materials to create Distributed Software; and (iii) 
-distributing and sublicensing to end users the Distributed Software and 
-Runtimes.
-g)	"Materials" means AMD Advanced Parallel Processing Math Library (APPML), 
-including but not limited to Documentation, Libraries, Runtimes, Object Code, 
-Sample Source and Tools.
-h)	"Object Code" means machine readable computer programming code files, 
-which is not in a human readable form and which does not include debug 
-symbols similar in detail to Source Code.  
-i)	"Runtimes" means programs or dynamically linked libraries in Object Code 
-which are included as part of the deliverables in the Materials.
-j)	"Sample Source" means header files and sample code in Source Code form 
-which are included as part of the deliverables in the Materials.
-k)	"Tools" means any tools or utilities in the Materials.
-l)	"Source Code" means human readable form computer programming code and 
-related system level documentation, including all comments, symbols and any 
-procedural code such as job control language.
-
-2.	LICENSE.  Subject to the terms and conditions of this Agreement, AMD 
-hereby grants You a non-exclusive, royalty-free, revocable, non-transferable, 
-non-assignable limited copyright license to: 
-a)	install, use and reproduce the Materials internally at Your site(s) 
-solely for the purpose of internal testing and evaluation;
-b)	modify the Sample Source or Documentation to create Distributed Software;
-c)	statically link the Libraries or dynamically link Runtimes to Your 
-Software; and 
-d)	distribute and sublicense to end users in Object Code form only the 
-Distributed Software and Runtimes for the Licensed Purpose.  Your right to 
-distribute the Distributed Software and Runtimes to end users includes the 
-right to distribute through distributors including multiple layers of 
-distributors.
-
-3.	REQUIREMENTS.  You will sublicense the end users to use Distributed 
-Software, Libraries and Runtimes in accordance with terms and conditions that 
-are substantially similar to the terms and conditions contained in Schedule A 
-hereof.  You may include these terms in Your standard form agreement.  You 
-must reproduce all AMD trademark and/or copyright notices on any copy of the 
-Distributed Software and Runtimes that You distribute.
-
-4.	RESTRICTIONS.  Restrictions regarding Your use of the Materials are as 
-follows.  You may not: 
-a)	distribute, publish or sublicense the Documentation, the Sample Source, 
-the Libraries (except when built into the Distributed Software), the Tools or 
-any Source Code in the Materials to anyone;
-b)	reproduce copies of the Materials other than what is reasonably required 
-for the Licensed Purpose;
-c)	decompile, reverse engineer, disassemble or otherwise reduce the Object 
-Code contained in the Materials to a human-perceivable form;
-d)	alter any copyright, trademark or patent notice(s) in the Materials;
-e)	use AMD's trademarks in Your software or product names or in a way that 
-suggests the Distributed Software comes from AMD or is endorsed by AMD;
-f)	use AMD's trademarks in Your software or product names or in a way that 
-that suggests that any of the Materials are endorsed by AMD;
-g)	include contents in malicious, deceptive or unlawful programs;
-h)	modify and/or distribute any of the Materials so that any part of thereof 
-becomes subject to a Free Software License;
-i)	use the Materials to enable, support or otherwise aid You or a third 
-party to develop technology competitive with the AMD technology embodied in 
-Materials or relating to the AMD products; or
-j)	rent, lease or lend the Materials or transfer the Materials to any third 
-party except as expressly provided herein.
-
-You also agree that the Materials are licensed, not sold by AMD.
-
-Except as expressly provided in Section 2, AMD does not grant, by 
-implication, estoppel or otherwise any other Intellectual Property Rights.  
-You agree that all licenses granted herein are conditioned upon the use of 
-the Materials for the Licensed Purpose.  You agree that the Materials and all 
-partial versions thereto, including without limitation all modifications, 
-enhancements, updates, bug fixes, inventions, know-how, as well as all 
-Intellectual Property Rights and all other information relating thereto are 
-and will remain the sole and exclusive property of AMD.  You shall have no 
-right, title or interest therein except for the limited licenses set forth in 
-Section 2 of this Agreement.  AMD agrees that the foregoing shall not grant 
-AMD any right, title or interest in Your Distributed Software that is not 
-provided as part of the Materials, and Intellectual Property Rights therein 
-are and will remain Your sole and exclusive property.  Nothing in this 
-Agreement shall be construed to limit AMD's right to independently develop or 
-acquire software or products similar to those of Your software or products 
-including any Intellectual Property Rights therein.
-
-The Materials may include third party technologies (e.g.  third party 
-libraries) for which You must obtain licenses from parties other than AMD.  
-You agree that AMD has not obtained or conveyed to You--and that You shall be 
-responsible for obtaining--Intellectual Property Rights to use and/or 
-distribute the applicable, underlying Intellectual Property Rights related to 
-the third party technologies.  These third party technologies are not 
-licensed as part of the Materials and are not licensed under this Agreement.  
-
-Without limiting Section 10, You agree that AMD has no duty to defend You for 
-any infringement claims related to the standards and third party 
-technologies.  You agree to indemnify and hold AMD harmless for any costs or 
-damages that result from such claims.
-
-5.	NO SUPPORT.  AMD is under no obligation to provide any kind of technical, 
-development or end-user support for the Materials.
-
-6.	UPDATES.  AMD may provide updates from time to time.  If AMD provides 
-updates, these updates are licensed under the terms of this Agreement.
-
-7.	FEEDBACK.  You have no obligation to give AMD any suggestions, comments 
-or other feedback ("Feedback") relating to the Materials.  However, AMD may 
-use and include any Feedback that You provide to improve the Materials or 
-other related AMD products and technologies.  You grant AMD and its 
-affiliates and subsidiaries a worldwide, non-exclusive, irrevocable, 
-royalty-free, perpetual license to, directly or indirectly, use, reproduce, 
-license, sublicense, distribute, make, have made, sell and otherwise 
-commercialize the Feedback in the Materials or other AMD technologies.  You 
-further agree not to provide any Feedback that (a) You know is subject to any 
-patent, copyright or other intellectual property claim or right of any third 
-party; (b) is subject to a Free Software License; or (c) is subject to 
-license terms which seek to require any products incorporating or derived 
-from such Feedback, or other AMD intellectual property, to be licensed to or 
-otherwise shared with any third party.
-
-8.	CONFIDENTIALITY.  You shall refrain from disclosing any Confidential 
-Information to third parties and will take reasonable security precautions, 
-at least as great as the precautions it takes to protect its own confidential 
-information, but no less than reasonable care, to keep confidential the 
-Confidential Information.  For the purposes hereof, "Confidential 
-Information" means all information disclosed between the parties in 
-connection with this Agreement, including the Materials and any other 
-business or technical information provided to You by AMD.  You will only 
-disclose the Confidential Information to Your employees or on-site 
-subcontractors (a) who have a need to know in furtherance of the Licensed 
-Purpose; and (b) who have signed a confidentiality agreement with You at 
-least as restrictive as this Agreement.  If at any future time AMD, directly 
-or indirectly, discloses any other related technology or information to You, 
-including without limitation any updated versions of the Materials, such 
-disclosure will also be deemed to be confidential, part of the Materials and 
-will be subject to the provisions of this Agreement.  You may disclose 
-Confidential Information in accordance with a judicial or other governmental 
-order, provided that You give AMD reasonable notice prior to such disclosure 
-to allow AMD a reasonable opportunity to seek a protective order or equivalent.
-
-9.	DISCLAIMER OF WARRANTY.  YOU EXPRESSLY ACKNOWLEDGES AND AGREES THAT USE 
-OF THE MATERIALS ARE AT YOUR SOLE RISK.  THE MATERIALS ARE PROVIDED "AS IS" 
-AND WITHOUT WARRANTY OF ANY KIND AND AMD EXPRESSLY DISCLAIMS ALL WARRANTIES, 
-EXPRESS AND IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, 
-OR THOSE ARISING FROM CUSTOM OF TRADE OR COURSE OF USAGE.  AMD DOES NOT 
-WARRANT THAT THE MATERIALS WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION 
-OF THE MATERIALS WILL BE UNINTERRUPTED OR ERROR-FREE.  THE ENTIRE RISK 
-ASSOCIATED WITH THE USE OF THE MATERIALS IS ASSUMED BY YOU.  FURTHERMORE, AMD 
-DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS 
-OF THE USE OF THE MATERIALS IN TERMS OF THEIR CORRECTNESS, ACCURACY, 
-RELIABILITY, CURRENTNESS, OR OTHERWISE.  SHOULD THE CONTENTS OF THE MATERIALS 
-PROVE DEFECTIVE, YOU ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, 
-REPAIR OR CORRECTION.  SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF 
-IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU.  
-
-10.	LIMITATION OF LIABILITY AND INDEMNIFICATION.  IN NO EVENT SHALL, SHALL 
-AMD, OR ITS DIRECTORS, OFFICERS, EMPLOYEES OR AGENTS ("AUTHORIZED 
-REPRESENTATIVES"), ITS SUPPLIERS OR ITS LICENSORS, BE LIABLE TO YOU FOR ANY 
-PUNITIVE, DIRECT, INCIDENTAL, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES 
-(INCLUDING DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS 
-OF BUSINESS INFORMATION, AND THE LIKE) ARISING OUT OF THE USE, MISUSE OR 
-INABILITY TO USE THE MATERIALS, BREACH OR DEFAULT, INCLUDING THOSE ARISING 
-FROM INFRINGEMENT OR ALLEGED INFRINGEMENT OF ANY PATENT, TRADEMARK, COPYRIGHT 
-OR OTHER INTELLECTUAL PROPERTY RIGHT, BY AMD, EVEN IF AMD AND/OR ITS 
-AUTHORIZED REPRESENTATIVES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH 
-DAMAGES.  AMD WILL NOT BE LIABLE FOR LOSS OF, OR DAMAGE TO, YOUR EQUIPMENT, 
-RECORDS OR DATA OR ANY DAMAGES CLAIMED BY YOU BASED ON ANY THIRD PARTY 
-CLAIM.  IN NO EVENT SHALL AMD'S TOTAL LIABILITY TO YOU FOR ALL DAMAGES, 
-LOSSES, AND CAUSES OF ACTION WHETHER IN CONTRACT, TORT (INCLUDING NEGLIGENCE) 
-EXCEED THE AMOUNT OF $10 USD.  BY USING THE MATERIALS WITHOUT CHARGE, YOU 
-ACCEPT THIS ALLOCATION OF RISK.  YOU AGREE TO DEFEND, INDEMNIFY AND HOLD 
-HARMLESS AMD AND ANY OF ITS AUTHORIZED REPRESENTATIVES FROM AND AGAINST ANY 
-AND ALL LOSS, DAMAGE, LIABILITY AND OTHER EXPENSES (INCLUDING REASONABLE 
-ATTORNEYS' FEES), ARISING OUT OF OR IN CONNECTION WITH ANY BREACH OF YOUR 
-OBLIGATIONS UNDER THIS AGREEMENT.
-
-11.	TERMINATION.  This Agreement is effective until terminated.  You can 
-terminate this Agreement at any time by destroying the Materials, and all 
-copies You have made.  This Agreement will terminate immediately without 
-notice from AMD if You fail to comply with any provision of this Agreement.  
-Upon termination You must destroy the Materials and all copies You have 
-made.  The termination of this Agreement shall: (i) immediately result in the 
-termination of all sublicenses previously granted by You to third party 
-distributors and contract manufacturers under Section 3; and (ii) have no 
-effect on any sublicenses previously granted by You to end users under 
-Subsection 3, which sublicenses shall survive in accordance with their terms.
-
-12.	GOVERNMENT END USERS.  If You are acquiring the Materials on behalf of 
-any unit or agency of the United States Government, the following provisions 
-apply.  The Government agrees the Materials were developed at private expense 
-and are provided with "RESTRICTED RIGHTS".  Use, duplication, or disclosure 
-by the Government is subject to restrictions as set forth in DFARS 
-227.7202-1(a) and 227.7202-3(a) (1995), DFARS 252.227-7013(c) (1) (ii) (Oct 
-1988), FAR 12.212(a) (1995), FAR 52.227-19, (June 1987) or FAR 52.227-14(ALT 
-III) (June 1987), as amended from time to time.  In the event that this 
-Agreement, or any part thereof, is deemed inconsistent with the minimum 
-rights identified in the Restricted Rights provisions, the minimum rights 
-shall prevail.
-
-13.	EXPORT RESTRICTIONS.  You shall adhere to all U.S.  and other applicable 
-export laws, including but not limited to the U.S.  Export Administration 
-Regulations ("EAR"), currently found at 15 C.F.R.  Sections 730 through 744.  
-Further, pursuant to 15 C.F.R Section 740.6, You hereby certifies that, 
-except pursuant to a license granted by the United States Department of 
-Commerce Bureau of Industry and Security or as otherwise permitted pursuant 
-to a License Exception under the EAR, You will not (1) export, re-export or 
-release to a national of a country in Country Groups D:1 or E:2 any 
-restricted technology, software, or source code it receives from AMD, or (2) 
-export to Country Groups D:1 or E:2 the direct product of such technology or 
-software, if such foreign produced direct product is subject to national 
-security controls as identified on the Commerce Control List (currently found 
-in Supplement 1 to Part 774 of EAR).  For the most current Country Group 
-listings, or for additional information about the EAR or Your obligations 
-under those regulations, please refer to the U.S.  Bureau of Industry and 
-Security's website at http://www.bis.doc.gov/.  These export requirements 
-shall survive any expiration or termination of this Agreement.
-
-14.	CONTROLLING LAW AND SEVERABILITY.  This Agreement will be governed by and 
-construed under the laws of the State of California without reference to its 
-conflicts of law principles.  The rights and obligations under this Agreement 
-shall not be governed by the United Nations Convention on Contracts or the 
-International Sale of Goods, the application of which is expressly excluded.  
-Each party hereto submits to the jurisdiction of the state and federal courts 
-of Santa Clara County and the Northern District of California for the purpose 
-of all legal proceedings arising out of or relating to this Agreement or the 
-subject matter hereof.  Each party waives any objection which it may have to 
-contest such forum.
-
-15.	SURVIVING OBLIGATIONS.  Sections 1, 3-16, inclusive, shall survive any 
-termination of this Agreement and shall bind the parties and their legal 
-representatives, successors, heirs and assigns.
-
-16.	COMPLETE AGREEMENT.  This Agreement constitutes the entire agreement 
-between the parties and supersedes any prior or contemporaneous oral or 
-written agreements with respect to the subject matter of this Agreement.  No 
-waiver, amendment or modification of any provision of this Agreement will be 
-effective unless in writing and signed by the party against whom enforcement 
-is sought.
-
-If You agree to abide by the terms and conditions of this Agreement, please 
-press "Accept."  If You do not agree to abide by the terms and conditions of 
-this Agreement and press "Decline," You may not use the Materials.
-SCHEDULE A
-END USER LICENSE AGREEMENT
-PLEASE READ THIS LICENSE CAREFULLY BEFORE USING THE SOFTWARE.  BY USING THE 
-SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS LICENSE. IF YOU 
-DO NOT AGREE TO THESE TERMS AND CONDITIONS, DO NOT USE THE SOFTWARE.
-1.  License. The software accompanying this License (hereinafter "Software"), 
-regardless of the media on which it is distributed, are licensed to you by 
-Advanced Micro Devices, Inc. ("AMD").  You own the medium on which the 
-Software is recorded, but AMD and AMD's Licensors (referred to collectively 
-as "AMD") retain title to the Software and related documentation.  You may:
-a) use the Software.; and
-b) make a reasonable number of copies necessary for the purposes of this 
-License.  You must reproduce on such copy AMD's copyright notice and any 
-other proprietary legends that were on the original copy of the Software
-2.  Restrictions. The Software contains copyrighted and patented material, 
-trade secrets and other proprietary material.  In order to protect them, and 
-except as permitted by applicable legislation, you may not:
-a) decompile, reverse engineer, disassemble or otherwise reduce the Software 
-to a human-perceivable form;
-b) modify, network, rent, lend, loan, distribute or create derivative works 
-based upon the Software in whole or in part; or
-c)  electronically transmit the Software from one computer to another or over 
-a network or otherwise transfer the Software except as permitted by this 
-License.
-3.  Termination. This License is effective until terminated.  You may 
-terminate this License at any time by destroying the Software, related 
-documentation and all copies thereof.  This License will terminate 
-immediately without notice from AMD if you fail to comply with any provision 
-of this License.  Upon termination you must destroy the Software, related 
-documentation and all copies thereof.
-4.  Government End Users. If you are acquiring the Software on behalf of any 
-unit or agency of the United States Government, the following provisions 
-apply.  The Government agrees the Software and documentation were developed 
-at private expense and are provided with "RESTRICTED RIGHTS".  Use, 
-duplication, or disclosure by the Government is subject to restrictions as 
-set forth in DFARS 227.7202-1(a) and 227.7202-3(a) (1995), DFARS 
-252.227-7013(c)(1)(ii) (Oct 1988), FAR 12.212(a)(1995), FAR 52.227-19, (June 
-1987) or FAR 52.227-14(ALT III) (June 1987), as amended from time to time.  
-In the event that this License, or any part thereof, is deemed inconsistent 
-with the minimum rights identified in the Restricted Rights provisions, the 
-minimum rights shall prevail.
-5.  No Other License.  No rights or licenses are granted by AMD under this 
-License, expressly or by implication, with respect to any proprietary 
-information or patent, copyright, trade secret or other intellectual property 
-right owned or controlled by AMD, except as expressly provided in this License.
-6.  Additional Licenses. DISTRIBUTION OR USE OF THE SOFTWARE WITH AN 
-OPERATING SYSTEM MAY REQUIRE ADDITIONAL LICENSES FROM THE OPERATING SYSTEM 
-VENDOR.  Additional third party licenses may also be required and you agree 
-that you shall be solely responsible for obtaining such license rights.  
-7.  Disclaimer of Warranty on Software. You expressly acknowledge and agree 
-that use of the Software is at your sole risk.  The Software and related 
-documentation are provided "AS IS" and without warranty of any kind and AMD 
-EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESS AND IMPLIED, INCLUDING, BUT NOT 
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, ACCURACY, CONDITION, 
-OWNERSHIP, FITNESS FOR A PARTICULAR PURPOSE, AND/OR OF NON-INFRINGEMENT OF 
-THIRD PARTY INTELLECTUAL PROPERTY RIGHTS, AND THOSE ARISING FROM CUSTOM OR 
-TRADE OR COURSE OF USAGE.  AMD DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED 
-IN THE SOFTWARE WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION OF THE 
-SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE SOFTWARE 
-WILL BE CORRECTED.  THE ENTIRE RISK AS TO THE RESULTS AND PERFORMANCE OF THE 
-SOFTWARE IS ASSUMED BY YOU.  FURTHERMORE, AMD DOES NOT WARRANT OR MAKE ANY 
-REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE USE OF THE SOFTWARE 
-OR RELATED DOCUMENTATION IN TERMS OF THEIR CORRECTNESS, ACCURACY, 
-RELIABILITY, CURRENTNESS, OR OTHERWISE. NO ORAL OR WRITTEN INFORMATION OR 
-ADVICE GIVEN BY AMD OR AMD'S AUTHORIZED REPRESENTATIVE SHALL CREATE A 
-WARRANTY OR IN ANY WAY INCREASE THE SCOPE OF THIS WARRANTY.  SHOULD THE 
-SOFTWARE PROVE DEFECTIVE, YOU (AND NOT AMD OR AMD'S AUTHORIZED 
-REPRESENTATIVE) ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR 
-CORRECTION.  THE SOFTWARE IS NOT INTENDED FOR USE IN MEDICAL, LIFE SAVING OR 
-LIFE SUSTAINING APPLICATIONS.  SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION 
-OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU.  
-8.  Limitation of Liability. UNDER NO CIRCUMSTANCES INCLUDING NEGLIGENCE, 
-SHALL AMD, OR ITS DIRECTORS, OFFICERS, EMPLOYEES OR AGENTS ("AUTHORIZED 
-REPRESENTATIVES"), BE LIABLE TO YOU FOR ANY PUNITIVE, EXEMPLARY, DIRECT, 
-INCIDENTAL, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES (INCLUDING DAMAGES FOR 
-LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS 
-INFORMATION, AND THE LIKE) ARISING OUT OF THE USE, MISUSE OR INABILITY TO USE 
-THE SOFTWARE OR RELATED DOCUMENTATION, BREACH OR DEFAULT, INCLUDING THOSE 
-ARISING FROM INFRINGEMENT OR ALLEGED INFRINGEMENT OF ANY PATENT, TRADEMARK, 
-COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT, BY AMD, EVEN IF AMD OR AMD'S 
-AUTHORIZED REPRESENTATIVE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
-DAMAGES.  SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OR EXCLUSION OF 
-LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION OR 
-EXCLUSION MAY NOT APPLY TO YOU.  AMD will not be liable for: 1) loss of, or 
-damage to, your records or data; or 2) any damages claimed by you based on 
-any third party claim.   In no event shall AMD's total liability to you for 
-all damages, losses, and causes of action (whether in contract, tort 
-(including negligence) or otherwise) exceed the amount paid by you for the 
-Software.
-9.  Export Restrictions. You shall adhere to all U.S. and other applicable 
-export laws, including but not limited to the U.S. Export Administration 
-Regulations (EAR), currently found at 15 C.F.R. Sections 730 through 744. 
-Further, pursuant to 15 C.F.R Section 740.6, You hereby certifies that, 
-except pursuant to a license granted by the United States Department of 
-Commerce Bureau of Industry and Security or as otherwise permitted pursuant 
-to a License Exception under the U.S. Export Administration Regulations 
-("EAR"), You will not (1) export, re-export or release to a national of a 
-country in Country Groups D:1 or E:2 any restricted technology, software, or 
-source code it receives from AMD, or (2) export to Country Groups D:1 or E:2 
-the direct product of such technology or software, if such foreign produced 
-direct product is subject to national security controls as identified on the 
-Commerce Control List (currently found in Supplement 1 to Part 774 of EAR).� 
-For the most current Country Group listings, or for additional information 
-about the EAR or Recipient's obligations under those regulations, please 
-refer to the U.S. Bureau of Industry and Security's website at 
-http://www.bis.doc.gov/.� These export requirements shall survive any 
-expiration or termination of this Agreement.
-10.  Controlling Law and Severability. This Agreement will be governed by and 
-construed under the laws of the State of California without reference to its 
-conflicts of law principles. The rights and obligations under this Agreement 
-shall not be governed by the United Nations Convention on Contracts or the 
-International Sale of Goods, the application of which is expressly excluded.  
-Each party hereto submits to the jurisdiction of the state and federal courts 
-of Santa Clara County and the Northern District of California for the purpose 
-of all legal proceedings arising out of or relating to this Agreement or the 
-subject matter hereof.  Each party waives any objection which it may have to 
-contest such forum. 
-11.  Complete Agreement.  This License constitutes the entire agreement 
-between the parties with respect to the use of the Software and the related 
-documentation, and supersedes all prior or contemporaneous understandings or 
-agreements, written or oral, regarding such subject matter.  No amendment to 
-or modification of this License will be binding unless in writing and signed 
-by a duly authorized representative of AMD.
\ No newline at end of file
diff --git a/RTCP/Cobalt/clAmdFft/clAmdFft-README.txt b/RTCP/Cobalt/clAmdFft/clAmdFft-README.txt
deleted file mode 100644
index 87b218b6dc872afeb3bded9e58f473d868bd2892..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/clAmdFft-README.txt
+++ /dev/null
@@ -1,193 +0,0 @@
-clAmdFft Readme
-
-Version:       1.8
-Release Date:  September 2012
-
-ChangeLog:
-
-____________
-Current version:
-Fixed:
-  * Failures in real transforms seen on 7xxx series GPUs with certain
-      problem sizes involving powers of 3 and 5 
-
-Known Issues:
-  * Library may return invalid results on CPU devices.
-	  
-____________
-Version 1.8.276 (beta):
-Fixed:
-  * Memory leaks affecting use cases where 'clAmdFftEnqueueTransform' is used in a loop
-	  
-____________
-Version 1.8.269 (beta):
-New:
-  * clAmdFft now supports real-to-complex and complex-to-real transforms;
-      refer to documentation for details
-  * This release tested using the 12.4 Catalyst software suite
-	  
-Known Issues:
-  * Some degradation in performance of real transforms due to known
-      runtime/driver issues
-  * Failures in real transforms have been seen on 7xxx series GPUs with certain
-      problem sizes involving powers of 3 and 5  
-  
-____________
-Version 1.6.244:
-Fixed:
-  * Failures observed in v1.6.236 in backward transforms of certain power of 2
-      (involving radix 4 and radix 8) problem sizes.
-	  
-____________
-Version 1.6.236:
-New:
-  * Performance of the FFT library has been improved for Radix-2 1D and 2D transforms
-  * Support for R4XXX GPUs is deprecated and no longer tested
-  * Preview: Support for AMD Radeon� HD7000 series GPUs
-  * This release tested using the 8.92 runtime driver and the 2.6 APP SDK
-____________
-Version 1.4:
-New:
-  * clAmdFft now supports transform lengths whose factors consist exclusively 
-      of powers of 2, 3, and 5
-  * clAmdFft supports double precision data types
-  * clAmdFft executes on OpenCL 1.0 compliant devices
-  * This release tested using the 8.872 runtime driver and the 2.5 APP SDK
-  * A helper bash script appmlEnv.sh has been added to the root installation
-      directory to assist in properly setting up a terminal environment to 
-      execute clAmdFft samples
-
-Fixed:
-  * If the library is required to allocate a temporary buffer, and the user does
-      not specify a temporary buffer on the Enqueue call, the library will 
-      allocate a temporary buffer internally and the lifetime of that temporary 
-      buffer is managed by the lifetime of the FFT plan; deleting the plan will 
-      release the buffer.
-  * Test failures on CPU device for 32-bit systems  (Windows/Linux) 
-
-Known Issues:
-  * Failures have been seen on graphics cards using R4550 (RV710) GPUs.
-  
-____________
-Version 1.2:
-New:
-  * Reduced the number of internal LDS bank conflicts for our 1D FFT transforms,
-      increasing performance.
-  * Padded reads/writes to global memory, decreasing bank conflicts and 
-      increasing performance on 2D transforms.
-  * This release tested using the 8.841 runtime driver and the 2.4 APP SDK
-
-Fixed:
-  * Failures have been seen attempting to queue work on the second GPU device on
-      a multi GPU 5970 card on Linux.
-
-Known Issues:
-  * It is recommended that users query for and explicitely create an 
-      intermediate buffer if clAmdFft requires one.  If the library creates the 
-      intermediate buffer internally, a race condition may occur on freeing the 
-      buffer on lower end hardware.
-  * Failures have been seen on graphics cards using R4550 (RV710) GPUs.
-  * Test failures on CPU device for 32-bit systems  (Windows/Linux) 
-  * It is recommended that windows users uninstall previous version of clAmdFft 
-      before installing newer versions.  Otherwise, Add/Remove programs only 
-      removes the latest version.  Linux users can delete the install directory.
-
-____________
-Version 1.0:
-  * Initial release, available on all platforms
-
-Known Issues:
-  * Failures have been seen attempting to queue work on the second GPU device on
-      a multi GPU 5970 card on Linux.
-_____________________
-Building the Samples:
-
-To install the Linux versions of clAmdFft, uncompress the initial download and 
-  then execute the install script.
-
-For example:
-  tar -xf clAmdFft-${version}.tar.gz
-      - This installs three files into the local directory, one being an 
-        executable bash script.
-
-  sudo mkdir /opt/clAmdFft-${version}
-      - This pre-creates the install directory with proper permissions in /opt 
-        if it is to be installed there (This is the default).
-
-  ./install-clAmdFft-${version}.sh
-      - This prints an EULA and uncompresses files into the chosen install 
-        directory.
-
-  cd ${installDir}/bin64
-    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OpenCLLibDir}:${clAmdFftLibDir}
-      - Export library dependencies to resolve all external linkages to the 
-        client program. The user can create a bash script to help automate this 
-        procedure.
-
-  ./clAmdFft.Client -h
-      - Understand the command line options that are available to the user 
-        through the sample client.
-
-  ./clAmdFft.Client -iv
-      - Watch for the version strings to print out; watch for 
-        'Client Test *****PASS*****' to print out.
-
-The sample program does not ship with native build files. Instead, a CMake
-file is shipped, and users generate a native build file for their system.
-
-For example:
-  cd ${installDir}
-  mkdir samplesBin/
-      - This creates a sister directory to the samples directory that will house
-        the native makefiles and the generated files from the build.
-
-  cd samplesBin/
-  ccmake ../samples/
-      - ccmake is a curses-based cmake program. It takes a parameter that 
-        specifies the location of the source code to compile.
-      - Hit 'c' to configure for the platform; ensure that the dependencies to 
-        external libraries are satisfied, including paths to 'ATI Stream SDK' 
-        and 'Boost'.
-      - After dependencies are satisfied, hit 'c' again to finalize configure 
-        step, then hit 'g' to generate makefile and exit ccmake.
-
-  make help
-      - Look at the available options for make.
-
-  make
-      - Build the sample client program.
-
-  ./clAmdFft.Sample -iv
-      - Watch for the version strings to print out; watch for 
-        'Client Test *****PASS*****' to print out.
-_______________________________________________________________________________
-(C) 2010,2011 Advanced Micro Devices, Inc. All rights reserved. AMD, the AMD 
-Arrow logo, ATI, the ATI logo, Radeon, FireStream, FireGL, Catalyst, and 
-combinations thereof are trademarks of Advanced Micro Devices, Inc. Microsoft 
-(R), Windows, and Windows Vista (R) are registered trademarks of Microsoft 
-Corporation in the U.S. and/or other jurisdictions. OpenCL and the OpenCL logo 
-are trademarks of Apple Inc. used by permission by Khronos. Other names are for 
-informational purposes only and may be trademarks of their respective owners.
-
-The contents of this document are provided in connection with Advanced Micro 
-Devices, Inc. ("AMD") products. AMD makes no representations or warranties with 
-respect to the accuracy or completeness of the contents of this publication and 
-reserves the right to make changes to specifications and product descriptions 
-at any time without notice. The information contained herein may be of a 
-preliminary or advance nature and is subject to change without notice. No 
-license, whether express, implied, arising by estoppel or otherwise, to any 
-intellectual property rights is granted by this publication. Except as set forth
-in AMD's Standard Terms and Conditions of Sale, AMD assumes no liability 
-whatsoever, and disclaims any express or implied warranty, relating to its 
-products including, but not limited to, the implied warranty of 
-merchantability, fitness for a particular purpose, or infringement of any 
-intellectual property right.
-
-AMD's products are not designed, intended, authorized or warranted for use as 
-components in systems intended for surgical implant into the body, or in other 
-applications intended to support or sustain life, or in any other application 
-in which the failure of AMD's product could create a situation where personal 
-injury, death, or severe property or environmental damage may occur. AMD 
-reserves the right to discontinue or make changes to its products at any time 
-without notice.
-_______________________________________________________________________________
diff --git a/RTCP/Cobalt/clAmdFft/clAmdFft1.8.291.tar.gz b/RTCP/Cobalt/clAmdFft/clAmdFft1.8.291.tar.gz
deleted file mode 100644
index c5597c390b4227b9b394459bb6a4a53c1ef7181a..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/clAmdFft/clAmdFft1.8.291.tar.gz and /dev/null differ
diff --git a/RTCP/Cobalt/clAmdFft/doc/clAmdFft.refman.pdf b/RTCP/Cobalt/clAmdFft/doc/clAmdFft.refman.pdf
deleted file mode 100644
index d36e16e22290cbece432bc0ffbce8293f6760205..0000000000000000000000000000000000000000
Binary files a/RTCP/Cobalt/clAmdFft/doc/clAmdFft.refman.pdf and /dev/null differ
diff --git a/RTCP/Cobalt/clAmdFft/include/clAmdFft.h b/RTCP/Cobalt/clAmdFft/include/clAmdFft.h
deleted file mode 100644
index 73e65d0d349eeb24d7d27997d78abe43661a244a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/include/clAmdFft.h
+++ /dev/null
@@ -1,573 +0,0 @@
-/***********************************************************************
-**	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-***********************************************************************/
-
-/*! @file clAmdFft.h
- * clAmdFft.h defines all of the public interfaces and types that are meant to be used by clFFT clients
- * This is the one public header file that should be consumed by clFFT clients.  It is written to adhere to native "C"
- * interfaces to make clAmdFft library as portable as possible; it should be callable from C, C++, .NET and Fortran,
- * either with the proper linking or using wrapper classes.
- *
- */
-
-#pragma once
-#if !defined( CLAMDFFT_DOTH )
-#define CLAMDFFT_DOTH
-
-#if defined(__APPLE__) || defined(__MACOSX)
-	#include <OpenCL/cl.h>
-#else
-	#include <CL/cl.h>
-#endif
-
-#include "clAmdFft.version.h"
-
-/*! This preprocessor definition is the standard way of making exporting APIs
- *  from a DLL simpler. All files within this DLL are compiled with the CLAMDFFT_EXPORTS
- *  symbol defined on the command line. This symbol should not be defined on any project
- *  that uses this DLL. This way any other project whose source files include this file see 
- *  clAmdFft functions as being imported from a DLL, whereas this DLL sees symbols
- *  defined with this macro as being exported.
- */
-#if defined( _WIN32 )
-	#if !defined( __cplusplus )
-		#define inline __inline
-	#endif
-
-	#if defined( CLAMDFFT_EXPORTS )
-		#define CLAMDFFTAPI __declspec( dllexport )
-	#else
-		#define CLAMDFFTAPI __declspec( dllimport )
-	#endif
-#else
-	#define CLAMDFFTAPI
-#endif
-
-/*	In general, you can not use namespaces for strict C compliance, so we prefix our public accessible names
- *	with the string clAmdFft
- */
-
-/*	All functions will return pre-defined error codes, and will NOT throw exceptions to the caller
- */
-
-/*!  @brief clAmdFft error codes definition, incorporating OpenCL error definitions 
- *
- *   This enumeration is a superset of the OpenCL error codes.  For example, CL_OUT_OF_HOST_MEMORY,
- *   which is defined in cl.h is aliased as CLFFT_OUT_OF_HOST_MEMORY.  The set of basic OpenCL
- *   error codes is extended to add extra values specific to the clAmdFft package.
- */
-enum clAmdFftStatus_
-{
-	CLFFT_INVALID_GLOBAL_WORK_SIZE			= CL_INVALID_GLOBAL_WORK_SIZE,
-	CLFFT_INVALID_MIP_LEVEL					= CL_INVALID_MIP_LEVEL,
-	CLFFT_INVALID_BUFFER_SIZE				= CL_INVALID_BUFFER_SIZE,
-	CLFFT_INVALID_GL_OBJECT					= CL_INVALID_GL_OBJECT,
-	CLFFT_INVALID_OPERATION					= CL_INVALID_OPERATION,
-	CLFFT_INVALID_EVENT						= CL_INVALID_EVENT,
-	CLFFT_INVALID_EVENT_WAIT_LIST			= CL_INVALID_EVENT_WAIT_LIST,
-	CLFFT_INVALID_GLOBAL_OFFSET				= CL_INVALID_GLOBAL_OFFSET,
-	CLFFT_INVALID_WORK_ITEM_SIZE			= CL_INVALID_WORK_ITEM_SIZE,
-	CLFFT_INVALID_WORK_GROUP_SIZE			= CL_INVALID_WORK_GROUP_SIZE,
-	CLFFT_INVALID_WORK_DIMENSION			= CL_INVALID_WORK_DIMENSION,
-	CLFFT_INVALID_KERNEL_ARGS				= CL_INVALID_KERNEL_ARGS,
-	CLFFT_INVALID_ARG_SIZE					= CL_INVALID_ARG_SIZE,
-	CLFFT_INVALID_ARG_VALUE					= CL_INVALID_ARG_VALUE,
-	CLFFT_INVALID_ARG_INDEX					= CL_INVALID_ARG_INDEX,
-	CLFFT_INVALID_KERNEL					= CL_INVALID_KERNEL,
-	CLFFT_INVALID_KERNEL_DEFINITION			= CL_INVALID_KERNEL_DEFINITION,
-	CLFFT_INVALID_KERNEL_NAME				= CL_INVALID_KERNEL_NAME,
-	CLFFT_INVALID_PROGRAM_EXECUTABLE		= CL_INVALID_PROGRAM_EXECUTABLE,
-	CLFFT_INVALID_PROGRAM					= CL_INVALID_PROGRAM,
-	CLFFT_INVALID_BUILD_OPTIONS				= CL_INVALID_BUILD_OPTIONS,
-	CLFFT_INVALID_BINARY					= CL_INVALID_BINARY,
-	CLFFT_INVALID_SAMPLER					= CL_INVALID_SAMPLER,
-	CLFFT_INVALID_IMAGE_SIZE				= CL_INVALID_IMAGE_SIZE,
-	CLFFT_INVALID_IMAGE_FORMAT_DESCRIPTOR	= CL_INVALID_IMAGE_FORMAT_DESCRIPTOR,
-	CLFFT_INVALID_MEM_OBJECT				= CL_INVALID_MEM_OBJECT,
-	CLFFT_INVALID_HOST_PTR					= CL_INVALID_HOST_PTR,
-	CLFFT_INVALID_COMMAND_QUEUE				= CL_INVALID_COMMAND_QUEUE,
-	CLFFT_INVALID_QUEUE_PROPERTIES			= CL_INVALID_QUEUE_PROPERTIES,
-	CLFFT_INVALID_CONTEXT					= CL_INVALID_CONTEXT,
-	CLFFT_INVALID_DEVICE					= CL_INVALID_DEVICE,
-	CLFFT_INVALID_PLATFORM					= CL_INVALID_PLATFORM,
-	CLFFT_INVALID_DEVICE_TYPE				= CL_INVALID_DEVICE_TYPE,
-	CLFFT_INVALID_VALUE						= CL_INVALID_VALUE,
-	CLFFT_MAP_FAILURE						= CL_MAP_FAILURE,
-	CLFFT_BUILD_PROGRAM_FAILURE				= CL_BUILD_PROGRAM_FAILURE,
-	CLFFT_IMAGE_FORMAT_NOT_SUPPORTED		= CL_IMAGE_FORMAT_NOT_SUPPORTED,
-	CLFFT_IMAGE_FORMAT_MISMATCH				= CL_IMAGE_FORMAT_MISMATCH,
-	CLFFT_MEM_COPY_OVERLAP					= CL_MEM_COPY_OVERLAP,
-	CLFFT_PROFILING_INFO_NOT_AVAILABLE		= CL_PROFILING_INFO_NOT_AVAILABLE,
-	CLFFT_OUT_OF_HOST_MEMORY				= CL_OUT_OF_HOST_MEMORY,
-	CLFFT_OUT_OF_RESOURCES					= CL_OUT_OF_RESOURCES,
-	CLFFT_MEM_OBJECT_ALLOCATION_FAILURE		= CL_MEM_OBJECT_ALLOCATION_FAILURE,
-	CLFFT_COMPILER_NOT_AVAILABLE			= CL_COMPILER_NOT_AVAILABLE,
-	CLFFT_DEVICE_NOT_AVAILABLE				= CL_DEVICE_NOT_AVAILABLE,
-	CLFFT_DEVICE_NOT_FOUND					= CL_DEVICE_NOT_FOUND,
-	CLFFT_SUCCESS							= CL_SUCCESS,
-	//-------------------------- Extended status codes for clAmdFft ----------------------------------------
-	CLFFT_BUGCHECK =  4*1024,	/*!< Bugcheck. */
-	CLFFT_NOTIMPLEMENTED,		/*!< Functionality is not implemented yet. */
-	CLFFT_TRANSPOSED_NOTIMPLEMENTED, /*!< Transposed functionality is not implemented for this transformation. */
-	CLFFT_FILE_NOT_FOUND,		/*!< Tried to open an existing file on the host system, but failed. */
-	CLFFT_FILE_CREATE_FAILURE,	/*!< Tried to create a file on the host system, but failed. */
-	CLFFT_VERSION_MISMATCH,		/*!< Version conflict between client and library. */
-	CLFFT_INVALID_PLAN,			/*!< Requested plan could not be found. */
-	CLFFT_DEVICE_NO_DOUBLE,		/*!< Double precision not supported on this device. */
-	CLFFT_ENDSTATUS				/* This value will always be last, and marks the length of clAmdFftStatus. */
-};
-typedef enum clAmdFftStatus_ clAmdFftStatus;
-
-/*!  @brief The dimension of the input and output buffers that will be fed into all FFT transforms */
-typedef enum clAmdFftDim_
-{
-	CLFFT_1D		= 1,		/*!< 1 Dimensional FFT transform (default). */
-	CLFFT_2D,					/*!< 2 Dimensional FFT transform. */
-	CLFFT_3D,					/*!< 3 Dimensional FFT transform. */
-	ENDDIMENSION			/*!< This value will always be last, and marks the length of clAmdFftDim. */
-} clAmdFftDim;
-
-/*!  @brief What are the expected layout's of the complex numbers <p>
- *   <b> For Release 1.0,</b> only the CLFFT_COMPLEX_INTERLEAVED and CLFFT_COMPLEX_PLANAR formats are supported.
- *   The real and hermitian formats should be supported in a future release.
- */
-typedef enum clAmdFftLayout_
-{
-	CLFFT_COMPLEX_INTERLEAVED	= 1,	/*!< An array of complex numbers, with real and imaginary components together (default). */
-	CLFFT_COMPLEX_PLANAR,				/*!< Arrays of real componets and arrays of imaginary components that have been seperated out. */
-	CLFFT_HERMITIAN_INTERLEAVED,		/*!< Compressed form of complex numbers; complex-conjugates not stored, real and imaginary components in same array. TODO: Document layout */
-	CLFFT_HERMITIAN_PLANAR,				/*!< Compressed form of complex numbers; complex-conjugates not stored, real and imaginary components in separate arrays. TODO: Document layout */
-	CLFFT_REAL,							/*!< An array of real numbers, with no corresponding imaginary components. */
-	ENDLAYOUT			/*!< This value will always be last, and marks the length of clAmdFftLayout. */
-} clAmdFftLayout;
-
-/*!  @brief What is the expected precision of each FFT.
- *   @ref DistanceStridesandPitches
- */
-typedef enum clAmdFftPrecision_
-{
-	CLFFT_SINGLE	= 1,	/*!< An array of complex numbers, with real and imaginary components as floats (default). */
-	CLFFT_DOUBLE,			/*!< An array of complex numbers, with real and imaginary components as doubles. */
-	CLFFT_SINGLE_FAST,		/*!< Faster implementation preferred. */
-	CLFFT_DOUBLE_FAST,		/*!< Faster implementation preferred. */
-	ENDPRECISION	/*!< This value will always be last, and marks the length of clAmdFftPrecision. */
-} clAmdFftPrecision;
-
-/*!  @brief What is the expected direction of each FFT, time or the frequency domains */
-typedef enum clAmdFftDirection_
-{
-	CLFFT_FORWARD	= -1,		/*!< FFT transform from the time to the frequency domain. */
-	CLFFT_BACKWARD	= 1,		/*!< FFT transform from the frequency to the time domain. */
-	CLFFT_MINUS		= -1,		/*!< Alias for the forward transform. */
-	CLFFT_PLUS		= 1,		/*!< Alias for the backward transform. */
-	ENDDIRECTION			/*!< This value will always be last, and marks the length of clAmdFftDirection. */
-} clAmdFftDirection;
-
-/*!  @brief Are the input buffers overwritten with the results */
-typedef enum clAmdFftResultLocation_
-{
-	CLFFT_INPLACE		= 1,		/*!< The input and output buffers are the same (default). */
-	CLFFT_OUTOFPLACE,				/*!< Seperate input and output buffers. */
-	ENDPLACE				/*!< This value will always be last, and marks the length of clAmdFftPlaceness. */
-} clAmdFftResultLocation;
-
-/*! @brief whether the result will be returned in original order; only valid for dimensions greater than 1 */
-typedef enum clAmdFftResultTransposed_ {
-	CLFFT_NOTRANSPOSE = 1,		/*!< The results are returned in the original preserved order (default) */
-	CLFFT_TRANSPOSED,			/*!< The result is transposed where transpose kernel is supported (possibly faster) */
-	ENDTRANSPOSED			/*!< This value will always be last, and marks the length of clAmdFftResultTransposed */
-} clAmdFftResultTransposed;
-
-/*! 	BitMasks to be used with clAmdFftSetupData.debugFlags */
-#define CLFFT_DUMP_PROGRAMS 0x1
-
-/*! @brief Data structure that can be passed to clAmdFftSetup() to control the behavior of the FFT runtime
- *  @details This structure contains values that can be initialized before instantiation of the FFT runtime 
- *  with ::clAmdFftSetup().  To initialize this structure, pass a pointer to a user struct to ::clAmdFftInitSetupData( ),
- *  which will clear the structure and set the version member variables to the current values.
- */
-struct clAmdFftSetupData_
-{
-	cl_uint major;		/*!< Major version number of the project; signifies major API changes. */
-	cl_uint minor;		/*!< Minor version number of the project; minor API changes that could break backwards compatibility. */
-	cl_uint patch;		/*!< Patch version number of the project; Always incrementing number, signifies change over time. */
-
-	/*! 	Bitwise flags that control the behavior of library debug logic. */
-	cl_ulong debugFlags;  /*! This should be set to zero, except when debugging the clAmdFft library.
-	                       *  <p> debugFlags can be set to CLFFT_DUMP_PROGRAMS, in which case the dynamically generated OpenCL kernels will
-	                       *  be written to text files in the current working directory.  These files will have a *.cl suffix.
-	                       */
-};
-typedef struct clAmdFftSetupData_ clAmdFftSetupData;
-
-/*!  @brief An abstract handle to the object that represents the state of the FFT(s) */
-typedef size_t clAmdFftPlanHandle;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-	/*! @brief Initialize an clAmdFftSetupData struct for the client
-	 *  @details clAmdFftSetupData is passed to clAmdFftSetup to control behavior of the FFT runtime
-	 *  @param[out] setupData Data structure is cleared, initialized with version information and default values
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	inline clAmdFftStatus clAmdFftInitSetupData( clAmdFftSetupData* setupData )
-	{
-		setupData->major	= clAmdFftVersionMajor;
-		setupData->minor	= clAmdFftVersionMinor;
-		setupData->patch	= clAmdFftVersionPatch;
-		setupData->debugFlags	= 0;
-
-		return	CLFFT_SUCCESS;
-	}
-
-	/*! @brief Initialize internal FFT resources.
-	 *  @details AMD's FFT implementation caches kernels, programs and buffers for its internal use.
-	 *  @param[in] setupData Data structure that can be passed into the setup routine to control FFT generation behavior 
-	 * 	and debug functionality
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetup( const clAmdFftSetupData* setupData );
-
-	/*! @brief Release all internal resources.
-	 *  @details Call when client is done with this FFT library, allowing the library to destroy all resources it has cached
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftTeardown( );
-
-	/*! @brief Query the FFT library for version information
-	 *  @details Return the major, minor and patch version numbers associated with this FFT library
-	 *  @param[out] major Major functionality change
-	 *  @param[out] minor Minor functionality change
-	 *  @param[out] patch Bug fixes, documentation changes, no new features introduced
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetVersion( cl_uint* major, cl_uint* minor, cl_uint* patch );
-
-	/*! @brief Create a plan object initialized entirely with default values.
-	 *  @details A plan is a repository of state for calculating FFT's.  Allows the runtime to pre-calculate kernels, programs
-	 * 	and buffers and associate them with buffers of specified dimensions.
-	 *  @param[out] plHandle Handle to the newly created plan
-	 *  @param[in] context Client is responsible for providing an OpenCL context for the plan
-	 *  @param[in] dim The dimensionality of the FFT transform; describes how many elements are in the array
-	 *  @param[in] clLengths An array of lengths, of size 'dim'.  Each value describes the length of additional dimensions
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftCreateDefaultPlan( clAmdFftPlanHandle* plHandle, cl_context context, const clAmdFftDim dim, 
-								const size_t* clLengths );
-
-	/*! @brief Create a copy of an existing plan.
-	 *  @details This API allows a client to create a new plan based upon an existing plan.  This is a convenience function 
-	 *  provided for quickly creating plans that are similar, but may differ slightly.
-	 *  @param[out] out_plHandle Handle to the newly created plan that is based on in_plHandle
-	 *  @param[in] new_context Client is responsible for providing a new context for the new plan
-	 *  @param[in] in_plHandle Handle to a plan to be copied, previously created
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftCopyPlan( clAmdFftPlanHandle* out_plHandle, cl_context new_context, clAmdFftPlanHandle in_plHandle );
-
-	/*! @brief Prepare the plan for execution.
-	 *  @details After all plan parameters are set, the client has the option of 'baking' the plan, which tells the runtime that
-	 *  no more changes to the plan's parameters are expected, and the OpenCL kernels should be compiled.  This optional function
-	 *  allows the client application to perform this function when the application is being initialized instead of on the first
-	 *  execution. 
-	 *  At this point, the clAmdFft runtime will apply all implimented optimizations, possibly including
-	 *  running kernel experiments on the devices in the plan context.
-	 *  <p>  Users should assume that this function will take a long time to execute.  If a plan is not baked before being executed, 
-	 *  users should assume that the first call to clAmdFftEnqueueTransform will take a long time to execute.
-	 *  <p>  If any significant parameter of a plan is changed after the plan is baked (by a subsequent call to one of 
-	 *  the clAmdFftSetPlan____ functions), that will not be considered an error.  Instead, the plan will revert back to
-	 *  the unbaked state, discarding the benefits of the baking operation.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] numQueues Number of command queues in commQueueFFT; 0 is a valid value, in which case client does not want 
-	 * 	the runtime to run load experiments and only pre-calculate state information
-	 *  @param[in] commQueueFFT An array of cl_command_queues created by the client; the command queues must be a proper subset of 
-	 * 	the devices included in the plan context
-	 *  @param[in] pfn_notify A function pointer to a notification routine. The notification routine is a callback function that 
-	 *  an application can register and which will be called when the program executable has been built (successfully or unsuccessfully)
-	 *  <b> For Release 1.0,</b> this parameter MUST be NULL or nullptr.
-	 *  @param[in] user_data Passed as an argument when pfn_notify is called. 
-	 *  <b> For Release 1.0,</b> this parameter MUST be NULL or nullptr.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftBakePlan( clAmdFftPlanHandle plHandle, cl_uint numQueues, cl_command_queue* commQueueFFT,
-							void (CL_CALLBACK *pfn_notify)(clAmdFftPlanHandle plHandle, void *user_data), void* user_data );
-
-	/*! @brief Release the resources of a plan.
-	 *  @details A plan may include kernels, programs and buffers associated with it that consume memory.  When a plan 
-	 *  is not needed anymore, the client should release the plan.
-	 *  @param[in,out] plHandle Handle to a plan previously created
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftDestroyPlan( clAmdFftPlanHandle* plHandle );
-	
-	/*! @brief Retrieve the OpenCL context of a previously created plan.
-	 *  @details User should pass a reference to an cl_context variable, which will be changed to point to a 
-	 *  context set in the specified plan.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] context Reference to user allocated cl_context, which will point to context set in plan
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanContext( const clAmdFftPlanHandle plHandle, cl_context* context );
-
-	/*! @brief Retrieve the floating point precision of the FFT data
-	 *  @details User should pass a reference to an clAmdFftPrecision variable, which will be set to the 
-	 *  precision of the FFT complex data in the plan.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] precision Reference to user clAmdFftPrecision enum
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanPrecision( const clAmdFftPlanHandle plHandle, clAmdFftPrecision* precision );
-
-	/*! @brief Set the floating point precision of the FFT data
-	 *  @details Set the plan property which will be the precision of the FFT complex data in the plan.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] precision Reference to user clAmdFftPrecision enum <p>
-	 *  <b> For Release 1.0,</b> only CLFFT_SINGLE and CLFFT_SINGLE_FAST are supported.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanPrecision( clAmdFftPlanHandle plHandle, clAmdFftPrecision precision );
-
-	/*! @brief Retrieve the scaling factor that should be applied to the FFT data
-	 *  @details User should pass a reference to an cl_float variable, which will be set to the 
-	 *  floating point scaling factor that will be multiplied across the FFT data.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dir Which direction does the scaling factor apply to
-	 *  @param[out] scale Reference to user cl_float variable
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanScale( const clAmdFftPlanHandle plHandle, clAmdFftDirection dir, cl_float* scale );
-
-	/*! @brief Set the scaling factor that should be applied to the FFT data
-	 *  @details Set the plan property which will be the floating point scaling factor that will be 
-	 *  multiplied across the FFT data.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dir Which direction does the scaling factor apply to
-	 *  @param[in] scale Reference to user cl_float variable
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanScale( clAmdFftPlanHandle plHandle, clAmdFftDirection dir, cl_float scale );
-
-	/*! @brief Retrieve the number of discrete arrays that this plan can handle concurrently
-	 *  @details User should pass a reference to an cl_uint variable, which will be set to the 
-	 *  number of discrete arrays (1D or 2D) that will be batched together for this plan
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] batchSize How many discrete number of FFT's are to be performed
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanBatchSize( const clAmdFftPlanHandle plHandle, size_t* batchSize );
-
-	/*! @brief Set the number of discrete arrays that this plan can handle concurrently
-	 *  @details Set the plan property which will be set to the number of discrete arrays (1D or 2D) 
-	 *  that will be batched together for this plan
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] batchSize How many discrete number of FFT's are to be performed
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanBatchSize( clAmdFftPlanHandle plHandle, size_t batchSize );
-
-	/*! @brief Retrieve the dimensionality of FFT's to be transformed in the plan
-	 *  @details Queries a plan object and retrieves the dimensionality that the plan is set for.  A size is returned to
-	 *  help the client allocate the proper storage to hold the dimensions in a further call to clAmdFftGetPlanLength
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] dim The dimensionality of the FFT's to be transformed
-	 *  @param[out] size Value used to allocate an array to hold the FFT dimensions.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanDim( const clAmdFftPlanHandle plHandle, clAmdFftDim* dim, cl_uint* size );
-
-	/*! @brief Set the dimensionality of FFT's to be transformed by the plan
-	 *  @details Set the dimensionality of FFT's to be transformed by the plan
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimensionality of the FFT's to be transformed
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanDim( clAmdFftPlanHandle plHandle, const clAmdFftDim dim );
-
-	/*! @brief Retrieve the length of each dimension of the FFT
-	 *  @details User should pass a reference to a size_t array, which will be set to the 
-	 *  length of each discrete dimension of the FFT
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the length parameters; describes how many elements are in the array
-	 *  @param[out] clLengths An array of lengths, of size 'dim'.  Each array value describes the length of each dimension
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanLength( const clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clLengths );
-
-	/*! @brief Set the length of each dimension of the FFT
-	 *  @details Set the plan property which will be the length of each discrete dimension of the FFT
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the length parameters; describes how many elements are in the array
-	 *  @param[in] clLengths An array of lengths, of size 'dim'.  Each value describes the length of additional dimensions
-	 *  <p><b> For Release 1.0, </b> All lengths must be powers of 2.  Non-power-of-two dimensions should be supported in a future release.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanLength( clAmdFftPlanHandle plHandle, const clAmdFftDim dim, const size_t* clLengths );
-
-	/*! @brief Retrieve the distance between consecutive elements for input buffers in a dimension.
-	 *  @details Depending on how the dimension is set in the plan (for 2D or 3D FFT's), strideY or strideZ can be safely
-	 *  ignored
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the stride parameters; describes how many elements are in the array
-	 *  @param[out] clStrides An array of strides, of size 'dim'.  Usually strideX=1 so that successive elements in the first dimension are stored contiguously.
-	 * 	Typically strideY=LenX, strideZ=LenX*LenY such that successive elements in the second and third dimensions are stored contiguously.
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanInStride( const clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clStrides );
-
-	/*! @brief Set the distance between consecutive elements for input buffers in a dimension.
-	 *  @details Set the plan properties which will be the distance between elements in a given dimension
-	 *  (units are in terms of clAmdFftPrecision)
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the stride parameters; describes how many elements are in the array
-	 *  @param[in] clStrides An array of strides, of size 'dim'. 
-	 *  See  @ref DistanceStridesandPitches for details.
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanInStride( clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clStrides );
-
-	/*! @brief Retrieve the distance between consecutive elements for output buffers in a dimension.
-	 *  @details Depending on how the dimension is set in the plan (for 2D or 3D FFT's), strideY or strideZ can be safely
-	 *  ignored
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the stride parameters; describes how many elements are in the array
-	 *  @param[out] clStrides An array of strides, of size 'dim'.  Usually strideX=1 so that successive elements in the first dimension are stored contiguously.
-	 *  Typically strideY=LenX, strideZ=LenX*LenYsuch that successive elements in the second and third dimensions are stored contiguously.
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanOutStride( const clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clStrides );
-
-	/*! @brief Set the distance between consecutive elements for output buffers in a dimension.
-	 *  @details Set the plan properties which will be the distance between elements in a given dimension
-	 *  (units are in terms of clAmdFftPrecision)
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the stride parameters; describes how many elements are in the array
-	 *  @param[in] clStrides An array of strides, of size 'dim'.  Usually strideX=1 so that successive elements in the first dimension are stored contiguously.
-	 * 	Typically strideY=LenX, strideZ=LenX*LenY such that successive elements in the second and third dimensions are stored contiguously.
-	 *  @sa clAmdFftSetPlanInStride
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanOutStride( clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clStrides );
-
-	/*! @brief Retrieve the distance between Array objects
-	 *  @details Pitch is the distance between each discrete array object in an FFT array. This is only used 
-	 *  for 'array' dimensions in clAmdFftDim; see clAmdFftSetPlanDimension (units are in terms of clAmdFftPrecision)
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] iDist The distance between the beginning elements of the discrete array objects in memory on input.
-	 *  For contiguous arrays in memory, iDist=(strideX*strideY*strideZ)
-	 *  @param[out] oDist The distance between the beginning elements of the discrete array objects in memory on output.
-	 *  For contiguous arrays in memory, oDist=(strideX*strideY*strideZ)
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanDistance( const clAmdFftPlanHandle plHandle, size_t* iDist, size_t* oDist );
-
-	/*! @brief Set the distance between Array objects
-	 *  @details Pitch is the distance between each discrete array object in an FFT array. This is only used 
-	 *  for 'array' dimensions in clAmdFftDim; see clAmdFftSetPlanDimension (units are in terms of clAmdFftPrecision)
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] iDist The distance between the beginning elements of the discrete array objects in memory on input.
-	 *  For contiguous arrays in memory, iDist=(strideX*strideY*strideZ)
-	 *  @param[out] oDist The distance between the beginning elements of the discrete array objects in memory on output.
-	 *  For contiguous arrays in memory, oDist=(strideX*strideY*strideZ)
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanDistance( clAmdFftPlanHandle plHandle, size_t iDist, size_t oDist );
-
-	/*! @brief Retrieve the expected layout of the input and output buffers
-	 *  @details Output buffers can be filled with either hermitian or complex numbers.  Complex numbers can be stored 
-	 *  in various layouts; this informs the FFT engine what layout to produce on output
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] iLayout Indicates how the input buffers are laid out in memory
-	 *  @param[out] oLayout Indicates how the output buffers are laid out in memory
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetLayout( const clAmdFftPlanHandle plHandle, clAmdFftLayout* iLayout, clAmdFftLayout* oLayout );
-
-	/*! @brief Set the expected layout of the input and output buffers
-	 *  @details Output buffers can be filled with either hermitian or complex numbers.  Complex numbers can be stored 
-	 *  in various layouts; this informs the FFT engine what layout to produce on output
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] iLayout Indicates how the input buffers are laid out in memory
-	 *  @param[in] oLayout Indicates how the output buffers are laid out in memory
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetLayout( clAmdFftPlanHandle plHandle, clAmdFftLayout iLayout, clAmdFftLayout oLayout );
-
-	/*! @brief Retrieve whether the input buffers are going to be overwritten with results
-	 *  @details If the setting is to do an in-place transform, the input buffers are overwritten with the results of the
-	 *  transform.  If the setting is for out-of-place transforms, the engine knows to look for separate output buffers
-	 *  on the Enqueue call.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] placeness Tells the FFT engine to clobber the input buffers or to expect output buffers for results
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetResultLocation( const clAmdFftPlanHandle plHandle, clAmdFftResultLocation* placeness );
-
-	/*! @brief Set whether the input buffers are going to be overwritten with results
-	 *  @details If the setting is to do an in-place transform, the input buffers are overwritten with the results of the
-	 *  transform.  If the setting is for out-of-place transforms, the engine knows to look for separate output buffers
-	 *  on the Enqueue call.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] placeness Tells the FFT engine to clobber the input buffers or to expect output buffers for results
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetResultLocation( clAmdFftPlanHandle plHandle, clAmdFftResultLocation placeness );
-	
-	/*! @brief Retrieve the final transpose setting of a muti-dimensional FFT 
-	 *  @details A multi-dimensional FFT typically transposes the data several times during calculation.  If the client 
-	 *  does not care about the final transpose to put data back in proper dimension, the final transpose can be skipped 
-	 *  for possible speed improvements 
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] transposed Parameter specifies whether the final transpose can be skipped
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanTransposeResult( const clAmdFftPlanHandle plHandle, clAmdFftResultTransposed * transposed );
-
-	/*! @brief Set the final transpose setting of a muti-dimensional FFT 
-	 *  @details A multi-dimensional FFT typically transposes the data several times during calculation.  If the client 
-	 *  does not care about the final transpose to put data back in proper dimension, the final transpose can be skipped 
-	 *  for possible speed improvements 
-	 *  @param[in] plHandle Handle to a plan previously created 
-	 *  @param[in] transposed Parameter specifies whether the final transpose can be skipped
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanTransposeResult( clAmdFftPlanHandle plHandle, clAmdFftResultTransposed transposed );
-
-
-	/*! @brief Get buffer size (in bytes), which may be needed internally for an intermediate buffer
-	 *  @details Very large FFT transforms may need multiple passes, and the operation would need a temporary buffer to hold
-	 *  intermediate results. This function is only valid after the plan is baked, otherwise an invalid operation error
-	 *  is returned. If buffersize returns as 0, the runtime needs no temporary buffer.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] buffersize Size in bytes for intermediate buffer
-	 */
-	CLAMDFFTAPI clAmdFftStatus clAmdFftGetTmpBufSize( const clAmdFftPlanHandle plHandle, size_t* buffersize );
-
-	/*! @brief Enqueue an FFT transform operation, and return immediately (non-blocking)
-	 *  @details This transform API is specific to the interleaved complex format, taking an input buffer with real and imaginary
-	 *  components paired together, and outputting the results into an output buffer in the same format
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dir Forwards or backwards transform
-	 *  @param[in] numQueuesAndEvents Number of command queues in commQueues; number of expected events to be returned in outEvents
-	 *  @param[in] commQueues An array of cl_command_queues created by the client; the command queues must be a proper subset of 
-	 * 	the devices included in the plan context
-	 *  @param[in] numWaitEvents Specify the number of elements in the eventWaitList array
-	 *  @param[in] waitEvents Events that this transform should wait to complete before executing on the device
-	 *  @param[out] outEvents The runtime fills this array with events corresponding 1 to 1 with the input command queues passed
-	 *	in commQueues.  This parameter can be NULL or nullptr, in which case client is not interested in receiving notifications
-	 *	when transforms are finished, otherwise if not NULL the client is responsible for allocating this array, with at least 
-	 *	as many elements as specified in numQueuesAndEvents.
-	 *  @param[in] inputBuffers An array of cl_mem objects that contain data for processing by the FFT runtime.  If the transform
-	 *  is in place, the FFT results will overwrite the input buffers
-	 *  @param[out] outputBuffers An array of cl_mem objects that will store the results of out of place transforms.  If the transform
-	 *  is in place, this parameter may be NULL or nullptr.  It is completely ignored
-	 *  @param[in] tmpBuffer A cl_mem object that is reserved as a temporary buffer for FFT processing. If clTmpBuffers is NULL or nullptr,
-	 *  and the runtime needs temporary storage, an internal temporary buffer will be created on the fly managed by the runtime.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftEnqueueTransform(
-												clAmdFftPlanHandle plHandle,
-												clAmdFftDirection dir,
-												cl_uint numQueuesAndEvents,
-												cl_command_queue* commQueues,
-												cl_uint numWaitEvents,
-												const cl_event* waitEvents,
-												cl_event* outEvents,
-												cl_mem* inputBuffers,
-												cl_mem* outputBuffers,
-												cl_mem tmpBuffer
-												);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/RTCP/Cobalt/clAmdFft/include/clAmdFft.version.h b/RTCP/Cobalt/clAmdFft/include/clAmdFft.version.h
deleted file mode 100644
index 4c3e04a0ea3baa5ad95af902099cec43b4385b34..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/include/clAmdFft.version.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/***********************************************************************
-**	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-***********************************************************************/
-
-/* the configured version and settings for clAmdFft
- */
-#define clAmdFftVersionMajor 1
-#define clAmdFftVersionMinor 8
-#define clAmdFftVersionPatch 291
diff --git a/RTCP/Cobalt/clAmdFft/install-clAmdFft-1.8.291.sh b/RTCP/Cobalt/clAmdFft/install-clAmdFft-1.8.291.sh
deleted file mode 100755
index 5f251c66390923e0423d607a11f4e1040ead20f8..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/install-clAmdFft-1.8.291.sh
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/bash
-#
-# Installation script
-
-# Grab the name of the bash script, which must have a certain format: install-${AppName}-${AppVersion}.sh
-ScriptName=(${0//-/ })
-AppName="${ScriptName[1]}"
-
-# Parse this version number from the name of this script
-AppVersionArray=(${ScriptName[2]//./ })
-AppVersion="${AppVersionArray[0]}.${AppVersionArray[1]}.${AppVersionArray[2]}"
-
-# Check for any switch arguments
-doneswitches=0
-badswitch=0
-acceptlicense=0
-installdir=""
-while test "${doneswitches}" = "0"
-do
-  case "${1-}" in
-    -accept*)
-       acceptlicense=1
-       shift;;
-    -installdir=*)
-       installdir=`echo ${1} | sed -e 's%.*=%%'`
-       shift;;
-    -*)
-       echo "${ScriptName}: unrecognised switch: ${1}"
-       badswitch=1
-       exit
-       shift;;
-     *)
-       doneswitches=1;;
-  esac
-done
-
-showLicense()
-{
-if [ "${acceptlicense}" = "1" ]; then
-  echo "Warning: by installing this software you have accepted"
-  echo "the license agreement in ${AppName}-EULA.txt"
-  reply="accept"
-else
-  more ${AppName}-EULA.txt
-
-  reply=""
-  while [ "${reply}" != "accept" -a "${reply}" != "decline" ]; do
-    echo -e "[accept/decline]? : \c"
-    read reply
-    reply=`echo ${reply} | tr [:upper:] [:lower:]`
-  done
-fi
-}
-
-get_yes_no()
-{
-reply=""
-while [ "$reply" != "y" -a "$reply" != "n" ]; do
-  echo -e "$1 ? [y/n] : \c"
-  read reply
-  reply=`echo ${reply} | tr [:upper:] [:lower:]`
-done
-}
-
-echo -e "                   ${AppName}-${AppVersion} Installation  "
-echo -e "                   =====================================  "
-echo -e ""
-echo -e "This script will install ${AppName} version ${AppVersion}"
-
-showLicense
-
-if [ "${reply}" != "accept" ]; then
-  echo "Installation declined. ${AppName}-${AppVersion} not installed."
-  exit
-fi
-
-echo -e ""
-echo -e "Where do you want to install ${AppName}-${AppVersion}?  Press return to use"
-echo -e "the default location (/opt/${AppName}-${AppVersion}), or enter an alternative path."
-echo -e "The directory will be created if it does not already exist."
-if [ "${installdir}" != "" ]; then
-  INSTALLDIR=${installdir}
-else
-  INSTALLDIR=""
-  while [ "${INSTALLDIR}" = "" ]; do
-    echo -e "> \c"
-    read ans
-    if [ $ans ]
-    then
-        case $ans in
-        *) INSTALLDIR=$ans ;;
-        esac
-    else
-        INSTALLDIR=/opt/${AppName}-${AppVersion}
-    fi
-  done
-fi
-
-# Replace any ~ by ${HOME} otherwise you end up with a
-# subdirectory named ~ (dangerous if you then try to remove it!)
-INSTALLDIR=`echo ${INSTALLDIR} | sed -e "s%~%${HOME}%g"`
-
-echo -e ""
-echo -e "Installing to : ${INSTALLDIR}"
-echo -e ""
-
-if [ ! -d "${INSTALLDIR}" ]
-then
-  mkdir -p "${INSTALLDIR}"
-  if [ $? -ne 0 ]
-  then
-    echo -e "***** Cannot create installation directory, installation failed *****"
-    exit
-  fi
-fi
-
-# Extract everything from the compressed tar file
-fromdir=$( pwd )
-cd "${INSTALLDIR}"
-tar -xvf "${fromdir}/${AppName}-${AppVersion}-Linux.tar.gz"
-
-echo -e ""
-echo -e "====== ${AppName}-${AppVersion} installation complete ======"
diff --git a/RTCP/Cobalt/clAmdFft/samples/CMakeLists.txt b/RTCP/Cobalt/clAmdFft/samples/CMakeLists.txt
deleted file mode 100644
index dcf1f3b8d95a9b31ab72cda1c542d365da35d8c0..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/CMakeLists.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-#############################################################################
-##	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-#############################################################################
-cmake_minimum_required( VERSION 2.6 )
-project( clAmdFft.Sample )
-
-# If AMDAPPSDKROOT is defined as an environment value, use that value and cache it so it's visible in the cmake-gui.  
-# Otherwise, create a sensible default that the user can change
-if( DEFINED ENV{AMDAPPSDKROOT} )
-	set( AMD_APP_SDK_ROOT $ENV{AMDAPPSDKROOT} CACHE PATH "Environment variable defining the root of the ATI Stream SDK" )
-else( )
-	set( AMD_APP_SDK_ROOT "/Path/To/ATI_Stream_SDK" CACHE PATH "Modify this variable to point to the root of the ATI Stream SDK installation" )
-endif( )
-
-# If BOOST_ROOT is defined as an environment value, use that value and cache it so it's visible in the cmake-gui.  
-# Otherwise, create a sensible default that the user can change
-if( DEFINED ENV{BOOST_ROOT} )
-	set( BOOST_ROOT $ENV{BOOST_ROOT} CACHE PATH "Environment variable defining the root of the Boost installation" )
-else( )
-	if( UNIX )
-		set( BOOST_ROOT "/usr" CACHE PATH "Modify this variable to point to the root of the Boost installation" )
-	else( )
-		set( BOOST_ROOT "/Path/To/boost_x_xx_x" CACHE PATH "Modify this variable to point to the root of the Boost installation" )
-	endif()
-endif( )
-
-# Currently, linux has a problem outputing both narrow and wide characters,
-# which happens in our client because openCL only supports narrow characters
-if( WIN32 )
-	option( UNICODE "Build with Unicode Support" ON )
-	if( UNICODE )
-		message( STATUS "UNICODE build" )
-	endif( )
-else()
-	set( UNICODE OFF )
-	message( STATUS "UNICODE feature disabled on linux" )
-endif()
-
-if( MSVC_IDE )
-	set( BUILD64 ${CMAKE_CL_64} )
-else()
-	option( BUILD64 "Build a 64-bit product" ON )
-	if( BUILD64 )
-		message( STATUS "64-bit build" )
-	endif( )
-
-	if( IS_DIRECTORY ${PROJECT_SOURCE_DIR}/library/test )
-		option( CODE_COVERAGE "Build makefiles with code coverage instrumentation" OFF )
-		if( CODE_COVERAGE )
-			message( STATUS "Code coverage instrumentation on" )
-		endif()
-	endif()
-endif()
-
-# For linux, modify the global find property to help us find libraries like Boost in the correct paths
-if( UNIX )
-	if( BUILD64 )
-		set_property( GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE )
-		message( STATUS "64bit build - FIND_LIBRARY_USE_LIB64_PATHS: ${FIND_LIBRARY_USE_LIB64_PATHS}" )
-	else()
-		set_property( GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE )
-		message( STATUS "32bit build - FIND_LIBRARY_USE_LIB64_PATHS: ${FIND_LIBRARY_USE_LIB64_PATHS}" )
-	endif()
-endif()
-
-# Find the absolute path to the opencl library that we need to link too; the path depends on being 64bit or 32bit
-if( BUILD64 )
-	find_library( OPENCL_LIBRARIES
-		NAMES OpenCL
-		HINTS
-			${AMD_APP_SDK_ROOT}/lib/
-			ENV AMD_APP_SDK_ROOT
-		PATH_SUFFIXES x86_64 x86
-	)
-else()
-	find_library( OPENCL_LIBRARIES
-		NAMES OpenCL
-		HINTS
-			${AMD_APP_SDK_ROOT}/lib/
-			ENV AMD_APP_SDK_ROOT
-		PATH_SUFFIXES x86
-	)
-endif()
-message( STATUS "OPENCL_LIBRARIES: ${OPENCL_LIBRARIES}" )
-
-set( Boost_USE_MULTITHREADED ON )
-set( Boost_USE_STATIC_LIBS   ON )
-set( Boost_DETAILED_FAILURE_MSG   ON )
-set( Boost_DEBUG ON )
-set( Boost_ADDITIONAL_VERSIONS "1.44.0" "1.44" )
-# On linux, the boost installed in the system always appears to override any user boost installs
-if( UNIX )
-	set( Boost_NO_SYSTEM_PATHS TRUE )
-endif( )
-find_package( Boost 1.33.0 COMPONENTS program_options )
-message(STATUS "Boost_PROGRAM_OPTIONS_LIBRARY: ${Boost_PROGRAM_OPTIONS_LIBRARY}")
-
-# FFLAGS depend on the compiler, grab the compiler name from the path
-get_filename_component( C_COMPILER_NAME ${CMAKE_C_COMPILER} NAME_WE )
-# message( "C_COMPILER_NAME: " ${C_COMPILER_NAME} )
-# message( "CMAKE_C_COMPILER: " ${CMAKE_C_COMPILER} )
-
-# Set common compile and link options
-if( C_COMPILER_NAME STREQUAL "cl" )
-	# Following options for nMake
-	message( STATUS "Detected MSVS Ver: " ${MSVC_VERSION} )
-	if( NOT MSVC_IDE )
-		message( STATUS "Using an nMake environment to build" )
-
-	endif( )
-
-elseif( C_COMPILER_NAME STREQUAL "gcc" )
-	message( STATUS "Detected GNU fortran compiler." )
-	# set( CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}" )
-	
-	if( BUILD64 )
-		set( CMAKE_CXX_FLAGS "-m64 ${CMAKE_CXX_FLAGS}" )
-		set( CMAKE_C_FLAGS "-m64 ${CMAKE_C_FLAGS}" )
-	else( )
-		set( CMAKE_CXX_FLAGS "-m32 ${CMAKE_CXX_FLAGS}" )
-		set( CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}" )
-	endif( )
-else( )
-	message( FATAL_ERROR "Compiler name not detected" )
-endif( )
-
-# If UNICODE is defined, pass extra definitions into 
-if( UNICODE )
-	add_definitions( "/DUNICODE /D_UNICODE" )
-endif( )
-
-# Print out compiler flags for viewing/debug
-message( STATUS "CMAKE_CXX_COMPILER flags: " ${CMAKE_CXX_FLAGS} )
-message( STATUS "CMAKE_CXX_COMPILER debug flags: " ${CMAKE_CXX_FLAGS_DEBUG} )
-message( STATUS "CMAKE_CXX_COMPILER release flags: " ${CMAKE_CXX_FLAGS_RELEASE} )
-message( STATUS "CMAKE_CXX_COMPILER relwithdebinfo flags: " ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} )
-message( STATUS "CMAKE_EXE_LINKER link flags: " ${CMAKE_EXE_LINKER_FLAGS} )
-
-include_directories( ${Boost_INCLUDE_DIRS} ${AMD_APP_SDK_ROOT}/include ${PROJECT_SOURCE_DIR}/../include )
-
-# Set the OpenCL library include path depending on target platform
-if( BUILD64 )
-    if( WIN32 )
-	    link_directories( ${AMD_APP_SDK_ROOT}/lib/x86_64/ ${PROJECT_SOURCE_DIR}/../lib64/import )
-    elseif( UNIX )
-	    link_directories( ${AMD_APP_SDK_ROOT}/lib/x86_64/ ${PROJECT_SOURCE_DIR}/../lib64 )
-    endif()
-else()
-    if( WIN32 )
-	    link_directories( ${AMD_APP_SDK_ROOT}/lib/x86/ ${PROJECT_SOURCE_DIR}/../lib32/import )
-    elseif( UNIX )
-	    link_directories( ${AMD_APP_SDK_ROOT}/lib/x86/ ${PROJECT_SOURCE_DIR}/../lib32 )
-    endif()
-endif()
-
-add_executable( clAmdFft.Client 
-		# sources follow
-		clAmdFft.client.cpp
-		clAmdFft.openCL.cpp
-		statisticalTimer.cpp
-		stdafx.cpp
-		clAmdFft.client.h
-		clAmdFft.openCL.h
-		statisticalTimer.h
-		stdafx.h
-		targetver.h
-		amd-unicode.h
-		../include/clAmdFft.h )
-
-target_link_libraries(clAmdFft.Client clAmdFft.Runtime ${Boost_LIBRARIES} ${OPENCL_LIBRARIES})
diff --git a/RTCP/Cobalt/clAmdFft/samples/amd-unicode.h b/RTCP/Cobalt/clAmdFft/samples/amd-unicode.h
deleted file mode 100644
index 6aad7185c760729a32dd640560d739524fb5b145..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/amd-unicode.h
+++ /dev/null
@@ -1,46 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2011 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-#pragma once
-#if !defined( amd_unicode_h )
-#define amd_unicode_h
-
-//	Typedefs to support unicode and ansii compilation
-#if defined( _UNICODE )
-	typedef std::wstring		tstring;
-	typedef std::wstringstream	tstringstream;
-	typedef std::wifstream		tifstream;
-	typedef std::wofstream		tofstream;
-	typedef std::wfstream		tfstream;
-	static std::wostream&	tout	= std::wcout;
-	static std::wostream&	terr	= std::wcerr;
-#else
-	typedef std::string tstring;
-	typedef std::stringstream tstringstream;
-	typedef std::ifstream		tifstream;
-	typedef std::ofstream		tofstream;
-	typedef std::fstream		tfstream;
-	static std::ostream&	tout	= std::cout;
-	static std::ostream&	terr	= std::cerr;
-#endif 
-
-//	These macros help linux cope with the conventions of windows tchar.h file
-#if defined( _WIN32 )
-	#include <tchar.h>
-	#include <windows.h>
-#else
-	#if defined( __GNUC__ )
-		typedef char TCHAR;
-		typedef char _TCHAR;
-		#define _tmain main
-
-		#if defined( UNICODE )
-			#define _T(x)	L ## x
-		#else
-			#define _T(x)	x
-		#endif 
-	#endif
-#endif
-
-#endif
\ No newline at end of file
diff --git a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.client.cpp b/RTCP/Cobalt/clAmdFft/samples/clAmdFft.client.cpp
deleted file mode 100644
index b5c6d5dea1cbf904282fe2b075329ba7b981e35c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.client.cpp
+++ /dev/null
@@ -1,635 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-// clAmdFft.client.cpp : Defines the entry point for the console application.
-//
-
-#include "stdafx.h"
-#include "../include/clAmdFft.h"
-#include "clAmdFft.client.h"
-#include "clAmdFft.openCL.h"
-#include "statisticalTimer.h"
-#include "amd-unicode.h"
-
-namespace po = boost::program_options;
-
-//	This is used with the program_options class so that the user can type an integer on the command line 
-//	and we store into an enum varaible
-template<class _Elem, class _Traits>
-std::basic_istream<_Elem, _Traits> & operator>> (std::basic_istream<_Elem, _Traits> & stream, clAmdFftLayout & layout)
-{
-	cl_uint tmp;
-	stream >> tmp;
-	layout = clAmdFftLayout(tmp);
-	return stream;
-}
-
-//	Format an unsigned number with comma thousands separator
-//
-template<typename T>		// T could be 32-bit or 64-bit
-std::basic_string<TCHAR> commatize (T number)	{
-	static TCHAR scratch [8*sizeof(T)];
-	register TCHAR * ptr = scratch + countOf(scratch);
-	*(--ptr) = 0;
-	for (int digits = 3; ; ) {
-		*(--ptr) = '0' + int (number % 10);
-		number /= 10;
-		if (0 == number)
-			break;
-		if (--digits <= 0) {
-			*(--ptr) = ',';
-			digits = 3;
-			}
-	}
-	return std::basic_string<TCHAR> (ptr);
-}	// end of commatize ()
-
-
-int _tmain( int argc, _TCHAR* argv[] )
-{
-	//	This helps with mixing output of both wide and narrow characters to the screen
-	std::ios::sync_with_stdio( false );
-
-	//	Define MEMORYREPORT on windows platfroms to enable debug memory heap checking
-#if defined( MEMORYREPORT ) && defined( _WIN32 )
-	TCHAR logPath[ MAX_PATH ];
-	::GetCurrentDirectory( MAX_PATH, logPath );
-	::_tcscat_s( logPath, _T( "\\MemoryReport.txt") );
-
-	//	We leak the handle to this file, on purpose, so that the ::_CrtSetReportFile() can output it's memory 
-	//	statistics on app shutdown
-	HANDLE hLogFile;
-	hLogFile = ::CreateFile( logPath, GENERIC_WRITE, 
-		FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
-
-	::_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_WNDW | _CRTDBG_MODE_DEBUG );
-	::_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_WNDW | _CRTDBG_MODE_DEBUG );
-	::_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG );
-
-	::_CrtSetReportFile( _CRT_ASSERT, hLogFile );
-	::_CrtSetReportFile( _CRT_ERROR, hLogFile );
-	::_CrtSetReportFile( _CRT_WARN, hLogFile );
-
-	int tmp = ::_CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
-	tmp |= _CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF;
-	::_CrtSetDbgFlag( tmp );
-
-	//	By looking at the memory leak report that is generated by this debug heap, there is a number with 
-	//	{} brackets that indicates the incremental allocation number of that block.  If you wish to set
-	//	a breakpoint on that allocation number, put it in the _CrtSetBreakAlloc() call below, and the heap
-	//	will issue a bp on the request, allowing you to look at the call stack
-	//	::_CrtSetBreakAlloc( 1833 );
-
-#endif /* MEMORYREPORT */
-
-	//	OpenCL state
-	cl_context			context;
-	cl_command_queue	queue;
-	cl_mem				clMemBuffersIn [ 2 ] = { NULL, NULL };
-	cl_mem				clMemBuffersOut[ 2 ] = { NULL, NULL };
-	std::vector< cl_device_id > device_id;
-	cl_event			outEvent	= NULL;
-	cl_device_type		deviceType	= CL_DEVICE_TYPE_DEFAULT;
-	cl_uint				deviceGpuList     = 0;	// a bitmap set
-
-	//	FFT state
-	clAmdFftPlanHandle	plHandle;
-	clAmdFftResultLocation	place = CLFFT_INPLACE;
-	clAmdFftLayout inLayout  = CLFFT_COMPLEX_INTERLEAVED;
-	clAmdFftLayout outLayout = CLFFT_COMPLEX_INTERLEAVED;
-	size_t clLengths[ 3 ];
-	size_t clPadding[ 3 ] = {0, 0, 0, };  // *** TODO
-	size_t clStrides[ 4 ];
-	cl_uint commandQueueFlags = 0;
-	size_t batchSize = 1;
-
-	//	Local Data
-	size_t buffSizeBytesIn = 0, buffSizeBytesOut = 0;
-	size_t fftVectorSize= 0, fftVectorSizePadded = 0, fftBatchSize = 0;
-	cl_uint nBuffersOut = 0;
-	cl_uint profileCount = 0;
-	clAmdFftDim	dim = CLFFT_1D;
-
-	//	Initialize flags for FFT library
-	std::auto_ptr< clAmdFftSetupData > setupData( new clAmdFftSetupData );
-	OPENCL_V_THROW( clAmdFftInitSetupData( setupData.get( ) ), 
-		"clAmdFftInitSetupData failed" );
-
-	try
-	{
-		// Declare the supported options.
-		po::options_description desc( "clFFT client command line options" );
-		desc.add_options()
-			( "help,h",        "produces this help message" )
-			( "version,v",     "Print queryable version information from the clFFT library" )
-			( "clInfo,i",      "Print queryable information of the OpenCL runtime" )
-			( "gpu,g",         "Force instantiation of an OpenCL GPU device" )
-			( "gpu0",          "Force instantiation of an OpenCL GPU device using gpu0" )
-			( "gpu1",          "Force instantiation of an OpenCL GPU device using gpu1" )
-			( "gpu2",          "Force instantiation of an OpenCL GPU device using gpu2" )
-			( "gpu3",          "Force instantiation of an OpenCL GPU device using gpu3" )
-			( "cpu,c",         "Force instantiation of an OpenCL CPU device" )
-			( "all,a",         "Force instantiation of all OpenCL devices" )
-			( "outPlace,o",    "Out of place FFT transform (default: in place)" )
-			( "dumpKernels,d", "FFT engine will dump generated OpenCL FFT kernels to disk (default: dump off)" )
-			( "lenX,x",        po::value< size_t >( &clLengths[ 0 ] )->default_value( 1024 ),   "Specify the length of the 1st dimension of a test array" )
-			( "lenY,y",        po::value< size_t >( &clLengths[ 1 ] )->default_value( 1 ),      "Specify the length of the 2nd dimension of a test array" )
-			( "lenZ,z",        po::value< size_t >( &clLengths[ 2 ] )->default_value( 1 ),      "Specify the length of the 3rd dimension of a test array" )
-			( "batchSize,b",   po::value< size_t >( &batchSize )->default_value( 1 ), "If this value is greater than one, arrays will be used " )
-			( "profile,p",     po::value< cl_uint >( &profileCount )->default_value( 1 ), "Time and report the kernel speed of the FFT (default: profiling off)" )
-			( "inLayout",      po::value< clAmdFftLayout >( &inLayout )->default_value( CLFFT_COMPLEX_INTERLEAVED ), "Layout of input data:\n1) interleaved\n2) planar" )
-			( "outLayout",     po::value< clAmdFftLayout >( &outLayout )->default_value( CLFFT_COMPLEX_INTERLEAVED ), "Layout of input data:\n1) interleaved\n2) planar" )
-			;
-
-		po::variables_map vm;
-		po::store( po::parse_command_line( argc, argv, desc ), vm );
-		po::notify( vm );
-
-		if( vm.count( "version" ) )
-		{
-			const int indent = countOf( "clFFT client API version: " );
-			tout << std::left << std::setw( indent ) << _T( "clFFT client API version: " )
-				<< clAmdFftVersionMajor << _T( "." )
-				<< clAmdFftVersionMinor << _T( "." )
-				<< clAmdFftVersionPatch << std::endl;
-
-			cl_uint libMajor, libMinor, libPatch;
-			clAmdFftGetVersion( &libMajor, &libMinor, &libPatch );
-
-			tout << std::left << std::setw( indent ) << _T( "clFFT runtime version: " )
-				<< libMajor << _T( "." )
-				<< libMinor << _T( "." )
-				<< libPatch << std::endl << std::endl;
-		}
-
-		if( vm.count( "help" ) )
-		{
-			//	This needs to be 'cout' as program-options does not support wcout yet
-			std::cout << desc << std::endl;
-			return 0;
-		}
-
-		size_t mutex = ((vm.count( "gpu" ) > 0) ? 1 : 0)
-			| ((vm.count( "gpu0" ) > 0) ? 1 : 0)
-			| ((vm.count( "gpu1" ) > 0) ? 1 : 0)
-			| ((vm.count( "gpu2" ) > 0) ? 1 : 0)
-			| ((vm.count( "gpu3" ) > 0) ? 1 : 0)
-			| ((vm.count( "cpu" ) > 0) ? 2 : 0)
-			| ((vm.count( "all" ) > 0) ? 4 : 0);
-		if ((mutex & (mutex-1)) != 0) {
-			terr << _T("You have selected mutually-exclusive OpenCL device options:") << std::endl;
-			if (vm.count ( "gpu" )  > 0) terr << _T("    gpu,g   Force instantiation of an OpenCL GPU device" ) << std::endl;
-			if (vm.count ( "gpu0" ) > 0) terr << _T("    gpu0    Force instantiation of an OpenCL GPU device using gpu0" ) << std::endl;
-			if (vm.count ( "gpu1" ) > 0) terr << _T("    gpu1    Force instantiation of an OpenCL GPU device using gpu1" ) << std::endl;
-			if (vm.count ( "gpu2" ) > 0) terr << _T("    gpu2    Force instantiation of an OpenCL GPU device using gpu2" ) << std::endl;
-			if (vm.count ( "gpu3" ) > 0) terr << _T("    gpu3    Force instantiation of an OpenCL GPU device using gpu3" ) << std::endl;
-			if (vm.count ( "cpu" )  > 0) terr << _T("    cpu,c   Force instantiation of an OpenCL CPU device" ) << std::endl;
-			if (vm.count ( "all" )  > 0) terr << _T("    all,a   Force instantiation of all OpenCL devices" ) << std::endl;
-			return 1;
-		}
-
-		if( vm.count( "gpu" ) )
-		{
-			deviceType = CL_DEVICE_TYPE_GPU;
-			deviceGpuList = ~0;
-		}
-		if( vm.count( "gpu0" ) )
-		{
-			deviceType	= CL_DEVICE_TYPE_GPU;
-			deviceGpuList |= 1;
-		}
-		if( vm.count( "gpu1" ) )
-		{
-			deviceType	= CL_DEVICE_TYPE_GPU;
-			deviceGpuList |= 2;
-		}
-		if( vm.count( "gpu2" ) )
-		{
-			deviceType	= CL_DEVICE_TYPE_GPU;
-			deviceGpuList |= 4;
-		}
-		if( vm.count( "gpu3" ) )
-		{
-			deviceType	= CL_DEVICE_TYPE_GPU;
-			deviceGpuList |= 8;
-		}
-
-		if( vm.count( "cpu" ) )
-		{
-			deviceType	= CL_DEVICE_TYPE_CPU;
-		}
-
-		if( vm.count( "all" ) )
-		{
-			deviceType	= CL_DEVICE_TYPE_ALL;
-		}
-
-		bool printInfo = false;
-		if( vm.count( "clInfo" ) )
-		{
-			printInfo = true;
-		}
-
-		if( vm.count( "outPlace" ) )
-		{
-			place = CLFFT_OUTOFPLACE;
-		}
-
-		if( profileCount > 1 )
-		{
-			commandQueueFlags |= CL_QUEUE_PROFILING_ENABLE;
-		}
-
-		if( vm.count( "dumpKernels" ) )
-		{
-			setupData->debugFlags	|= CLFFT_DUMP_PROGRAMS;
-		}
-
-		//	Our command line does not specify what dimension FFT we wish to transform; we decode 
-		//	this from the lengths that the user specifies for X, Y, Z.  A length of one means that
-		//	The user does not want that dimension.
-
-		for (unsigned u = 0; u < countOf(clLengths); ++u) {
-			if (0 != clLengths[u])	continue;
-			clLengths[u] = 1;
-		}
-
-		dim = CLFFT_1D;
-		if( clLengths[ 1 ] > 1 )
-		{
-			dim	= CLFFT_2D;
-		}
-		if( clLengths[ 2 ] > 1 )
-		{
-			dim	= CLFFT_3D;
-		}
-
-		clStrides[ 0 ] = 1;
-		clStrides[ 1 ] = clStrides[ 0 ] * (clLengths[ 0 ] + clPadding[ 0 ]);
-		clStrides[ 2 ] = clStrides[ 1 ] * (clLengths[ 1 ] + clPadding[ 1 ]);
-		clStrides[ 3 ] = clStrides[ 2 ] * (clLengths[ 2 ] + clPadding[ 2 ]);
-
-		fftVectorSize	= clLengths[ 0 ] * clLengths[ 1 ] * clLengths[ 2 ];
-		fftVectorSizePadded = clStrides[ 3];
-		fftBatchSize	= fftVectorSizePadded * batchSize;
-
-		switch( outLayout )
-		{
-		case CLFFT_COMPLEX_INTERLEAVED:
-			nBuffersOut      = 1;
-			buffSizeBytesOut = fftBatchSize * sizeof( std::complex< float > );
-			break;
-		case CLFFT_COMPLEX_PLANAR:
-			nBuffersOut      = 2;
-			buffSizeBytesOut = fftBatchSize * sizeof(float);
-			break;
-		}
-
-		//	Fill our input buffers depending on how we want 
-		switch( inLayout )
-		{
-		case CLFFT_COMPLEX_INTERLEAVED:
-			{
-				//	This call creates our openCL context and sets up our devices; expected to throw on error
-				buffSizeBytesIn = fftBatchSize * sizeof( std::complex< float > );
-
-				device_id = initializeCL( deviceType, deviceGpuList, context, printInfo );
-				createOpenCLCommandQueue( context,
-										  commandQueueFlags, queue,
-										  device_id,
-										  buffSizeBytesIn, 1, clMemBuffersIn,
-										  buffSizeBytesOut, nBuffersOut, clMemBuffersOut);
-
-				std::vector< std::complex< float > > input( fftBatchSize );
-
-				// impulse test case
-				for( cl_uint i = 0; i < fftBatchSize; ++i )
-				{
-					input[ i ] = 1;
-				}
-
-				OPENCL_V_THROW( clEnqueueWriteBuffer( queue, clMemBuffersIn[ 0 ], CL_TRUE, 0, buffSizeBytesIn, &input[ 0 ], 
-					0, NULL, &outEvent ), 
-					"clEnqueueWriteBuffer failed" );
-
-				//for( cl_uint i = 0; i < fftBatchSize; ++i )
-				//{
-				//	input[ i ] = 1.23456f;
-				//}
-
-				//OPENCL_V_THROW( clEnqueueWriteBuffer( queue, clMemBuffersOut[ 0 ], CL_TRUE, 0, buffSizeBytes, &input[ 0 ], 
-				//	0, NULL, &outEvent ), 
-				//	"clEnqueueWriteBuffer failed" );
-			}
-			break;
-		case CLFFT_COMPLEX_PLANAR:
-			{
-				//	This call creates our openCL context and sets up our devices; expected to throw on error
-				buffSizeBytesIn = fftBatchSize * sizeof( float );
-
-				device_id = initializeCL( deviceType, deviceGpuList, context, printInfo );
-				createOpenCLCommandQueue( context,
-										  commandQueueFlags, queue,
-										  device_id,
-										  buffSizeBytesIn, 2, clMemBuffersIn,
-										  buffSizeBytesOut, nBuffersOut, clMemBuffersOut);
-
-				//	Just initialize the input buffer to all 1's for now
-				std::vector< float > real( fftBatchSize );
-				std::vector< float > imag( fftBatchSize );
-				for( cl_uint i = 0; i < fftBatchSize; ++i )
-				{
-					real[ i ] = 1;
-					imag[ i ] = 0;
-				}
-
-				OPENCL_V_THROW( clEnqueueWriteBuffer( queue, clMemBuffersIn[ 0 ], CL_TRUE, 0, buffSizeBytesIn, &real[ 0 ], 
-					0, NULL, &outEvent ), 
-					"clEnqueueWriteBuffer failed" );
-				OPENCL_V_THROW( clEnqueueWriteBuffer( queue, clMemBuffersIn[ 1 ], CL_TRUE, 0, buffSizeBytesIn, &imag[ 0 ], 
-					0, NULL, &outEvent ), 
-					"clEnqueueWriteBuffer failed" );
-			}
-			break;
-		default:
-			{
-				throw std::runtime_error( "Input layout format not yet supported" );
-			}
-			break;
-		}
-
-	}
-	catch( std::exception& e )
-	{
-		terr << _T( "clFFT error condition reported:" ) << std::endl << e.what() << std::endl;
-		return 1;
-	}
-
-	//	Performance Data
-	StatisticalTimer&	sTimer	= StatisticalTimer::getInstance( );
-	sTimer.Reserve( 3, profileCount );
-	sTimer.setNormalize( true );
-	StatisticalTimer::sTimerID	clFFTID	= sTimer.getUniqueID( "clFFT", 0 );
-
-	OPENCL_V_THROW( clAmdFftSetup( setupData.get( ) ), "clAmdFftSetup failed" );
-
-	OPENCL_V_THROW( clAmdFftCreateDefaultPlan( &plHandle, context, dim, clLengths ), "clAmdFftCreateDefaultPlan failed" );
-
-	//	Default plan creates a plan that expects an inPlace transform with interleaved complex numbers
-	OPENCL_V_THROW( clAmdFftSetResultLocation( plHandle, place ), "clAmdFftSetResultLocation failed" );
-	OPENCL_V_THROW( clAmdFftSetLayout( plHandle, inLayout, outLayout ), "clAmdFftSetLayout failed" );
-	OPENCL_V_THROW( clAmdFftSetPlanBatchSize( plHandle, batchSize ), "clAmdFftSetPlanBatchSize failed" );
-
-	if ((clPadding[ 0 ] | clPadding[ 1 ] | clPadding[ 2 ]) != 0) {
-		OPENCL_V_THROW (clAmdFftSetPlanInStride  ( plHandle, dim, clStrides ), "clAmdFftSetPlanInStride failed" );
-		OPENCL_V_THROW (clAmdFftSetPlanOutStride ( plHandle, dim, clStrides ), "clAmdFftSetPlanOutStride failed" );
-		OPENCL_V_THROW (clAmdFftSetPlanDistance  ( plHandle, clStrides[ dim ], clStrides[ dim ]), "clAmdFftSetPlanDistance failed" );
-	}
-
-	OPENCL_V_THROW( clAmdFftBakePlan( plHandle, 1, &queue, NULL, NULL ), "clAmdFftBakePlan failed" );
-	
-	//get the buffersize
-	size_t buffersize=0;
-	OPENCL_V_THROW( clAmdFftGetTmpBufSize(plHandle, &buffersize ), "clAmdFftGetTmpBufSize failed" );
-		
-	//allocate the intermediate buffer	
-	cl_mem clMedBuffer=NULL;
-		
-	if (buffersize)
-	{
-		cl_int medstatus;
-		clMedBuffer = clCreateBuffer ( context, CL_MEM_READ_WRITE, buffersize, 0, &medstatus);
-		OPENCL_V_THROW( medstatus, "Creating intmediate Buffer failed" );
-	}
-
-	switch( inLayout )
-	{
-	case CLFFT_COMPLEX_INTERLEAVED:
-	case CLFFT_COMPLEX_PLANAR:
-		break;
-	default:
-		//	Don't recognize input layout
-		return CLFFT_INVALID_ARG_VALUE;
-	}
-
-	switch( outLayout )
-	{
-	case CLFFT_COMPLEX_INTERLEAVED:
-	case CLFFT_COMPLEX_PLANAR:
-		break;
-	default:
-		//	Don't recognize output layout
-		return CLFFT_INVALID_ARG_VALUE;
-	}
-
-	if (( place == CLFFT_INPLACE )
-	&&  ( inLayout != outLayout )) {
-		switch( inLayout )
-		{
-		case CLFFT_COMPLEX_INTERLEAVED:
-			{
-				assert (CLFFT_COMPLEX_PLANAR == outLayout);
-				throw std::runtime_error( "Cannot use the same buffer for interleaved->planar in-place transforms" );
-				break;
-			}
-		case CLFFT_COMPLEX_PLANAR:
-			{
-				assert (CLFFT_COMPLEX_INTERLEAVED == outLayout);
-				throw std::runtime_error( "Cannot use the same buffer for planar->interleaved in-place transforms" );
-				break;
-			}
-		}
-	}
-
-	//	Loop as many times as the user specifies to average out the timings
-	//
-	cl_mem * BuffersOut = ( place == CLFFT_INPLACE ) ? NULL :  &clMemBuffersOut[ 0 ];
-	sTimer.Start(clFFTID);
-	for( cl_uint i = 0; i < profileCount; ++i )
-	{
-		OPENCL_V_THROW( clAmdFftEnqueueTransform( plHandle, CLFFT_FORWARD, 1, &queue, 0, NULL, &outEvent, 
-			&clMemBuffersIn[ 0 ], BuffersOut, clMedBuffer ),
-			"clAmdFftEnqueueTransform failed" );
-	}
-	OPENCL_V_THROW( clFinish( queue ), "clFinish failed" );
-	sTimer.Stop(clFFTID);
-
-	if( commandQueueFlags & CL_QUEUE_PROFILING_ENABLE )
-	{
-		//	Remove all timings that are outside of 3 stddev; we ignore outliers to get a more consistent result
-		sTimer.pruneOutliers( 3.0 );
-
-		// windows frequency count is by seconds
-		double kernelExecTimeNs	= sTimer.getAverageTime( clFFTID ) * 1e9/profileCount;
-		double kernelExecGflops	= 5 * fftBatchSize * (log(static_cast<float>(fftVectorSize))/log(2.0f)) / static_cast< double >( kernelExecTimeNs );
-
-		tout << _T( "FFT kernel execution time < ns >: " ) << commatize ((unsigned long long) kernelExecTimeNs) << std::endl;
-		tout << _T( "FFT kernel execution Gflops < BatchSize*5*N*log2( N ) >: " ) << kernelExecGflops << std::endl;
-	}
-	sTimer.Reset( );
-
-	// Read and check output data
-	// This check is not valid if the FFT is executed multiple times inplace.
-	//
-	if (( place == CLFFT_OUTOFPLACE )
-	||  ( profileCount == 1))
-	{
-		bool checkflag= false;
-		switch( outLayout )
-		{
-		case CLFFT_COMPLEX_INTERLEAVED:
-			{
-				std::vector< std::complex< float > > output( fftBatchSize );
-
-				if( place == CLFFT_INPLACE )
-				{
-					OPENCL_V_THROW( clEnqueueReadBuffer( queue, clMemBuffersIn[ 0 ], CL_TRUE, 0, buffSizeBytesIn, &output[ 0 ], 
-						0, NULL, NULL ),
-						"Reading the result buffer failed" );
-				}
-				else
-				{
-					OPENCL_V_THROW( clEnqueueReadBuffer( queue, clMemBuffersOut[ 0 ], CL_TRUE, 0, buffSizeBytesOut, &output[ 0 ], 
-						0, NULL, NULL ),
-						"Reading the result buffer failed" );
-				}
-
-				//check output data
-				for( cl_uint i = 0; i < fftBatchSize; ++i )
-				{
-					if (0 == (i % fftVectorSizePadded))
-					{
-						if (output[i].real() != fftVectorSize) 
-						{
-							checkflag = true;
-							break;
-						}
-					}
-					else
-					{
-						if (output[ i ].real() != 0)
-						{
-							checkflag = true;
-							break;
-						}
-					}
-
-					if (output[ i ].imag() != 0)
-					{
-						checkflag = true;
-						break;
-					}
-				}
-			}
-			break;
-		case CLFFT_COMPLEX_PLANAR:
-			{
-				std::valarray< float > real( fftBatchSize );
-				std::valarray< float > imag( fftBatchSize );
-
-				if( place == CLFFT_INPLACE )
-				{
-					OPENCL_V_THROW( clEnqueueReadBuffer( queue, clMemBuffersIn[ 0 ], CL_TRUE, 0, buffSizeBytesIn, &real[ 0 ], 
-						0, NULL, NULL ),
-						"Reading the result buffer failed" );
-					OPENCL_V_THROW( clEnqueueReadBuffer( queue, clMemBuffersIn[ 1 ], CL_TRUE, 0, buffSizeBytesIn, &imag[ 0 ], 
-						0, NULL, NULL ),
-						"Reading the result buffer failed" );
-				}
-				else
-				{
-					OPENCL_V_THROW( clEnqueueReadBuffer( queue, clMemBuffersOut[ 0 ], CL_TRUE, 0, buffSizeBytesOut, &real[ 0 ], 
-						0, NULL, NULL ),
-						"Reading the result buffer failed" );
-					OPENCL_V_THROW( clEnqueueReadBuffer( queue, clMemBuffersOut[ 1 ], CL_TRUE, 0, buffSizeBytesOut, &imag[ 0 ], 
-						0, NULL, NULL ),
-						"Reading the result buffer failed" );
-				}
-
-				//  Check output data
-				//  The output data might not be contiguous in the output buffer, if there
-				//  is any padding in any dimension, so we need to access slices of the buffer.
-				//  We treat the data buffers as arrays of 3D arrays in all cases.
-				//  If this is a 1D test, then
-				//     clLength[ 1 ] and clLength[ 2] will be 1.
-				//     The first element of every 1D slice will be nonzero.
-				//  If this is a 2D test, then
-				//     clLength[ 2 ] will be a.
-				//     The first elment of every 2D slice will be nonzero.
-				//  If this is a 3D test, then
-				//     The first element of every 3D slice will be nonzero.
-				//
-				for (unsigned ub = 0; ub < batchSize; ++ub) {
-					std::slice slice3D (ub * clStrides[ 3 ], clStrides[ 3 ], 1);
-					std::valarray<float> real3D (real[ slice3D ]);
-					for (unsigned uz = 0; uz < clLengths[2]; ++uz) {
-						std::slice slice2D (uz * clStrides[ 2 ], clStrides[ 2 ], 1);
-						std::valarray<float> real2D (real[ slice2D ]);
-						bool nzZ = (dim == CLFFT_3D) && (0 == uz);
-						for (unsigned uy = 0; uy < clLengths[1]; ++uy) {
-							std::slice slice1D (uy * clStrides[ 1], clStrides[ 1], 1);
-							std::valarray<float> real1D (real2D [ slice1D ]);
-							bool nzY = (nzZ || (dim == CLFFT_2D)) && (0 == uy);
-							for (unsigned ux = 0; ux < clLengths[0]; ++ux) {
-								bool nzX = (nzY || (dim == CLFFT_1D)) && (0 == ux);
-								float expected = nzX ? float (fftVectorSize) : 0.0f;
-								if (real1D[ux] != expected)
-									checkflag = true;
-							}
-						}
-					}
-				}
-
-				////check output data
-				//for( cl_uint i = 0; i < fftBatchSize; ++i )
-				//{
-				//	if (0 == (i % fftVectorSizePadded))
-				//	{
-				//		if (real[i] != fftVectorSize) 
-				//		{
-				//			checkflag = true;
-				//			break;
-				//		}
-				//	}
-				//	else
-				//	{
-				//		if (real[i] != 0)
-				//		{
-				//			checkflag = true;
-				//			break;
-				//		}
-				//	}
-
-				//	if (imag[i] != 0)
-				//	{
-				//		checkflag = true;
-				//		break;
-				//	}
-				//}
-			}
-			break;
-		default:
-			{
-				throw std::runtime_error( "Input layout format not yet supported" );
-			}
-			break;
-		}
-	
-		if (checkflag) 
-		{
-			std::cout << "\n\n\t\tClient Test *****FAIL*****" << std::endl;
-		}
-		else
-		{
-			std::cout << "\n\n\t\tClient Test *****PASS*****" << std::endl;
-		}
-	}
-
-	OPENCL_V_THROW( clAmdFftDestroyPlan( &plHandle ), "clAmdFftDestroyPlan failed" );
-	OPENCL_V_THROW( clAmdFftTeardown( ), "clAmdFftTeardown failed" );
-
-	cleanupCL( &context, &queue, countOf( clMemBuffersIn ), clMemBuffersIn, countOf( clMemBuffersOut ), clMemBuffersOut, &outEvent );
-
-	return 0;
-}
diff --git a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.client.h b/RTCP/Cobalt/clAmdFft/samples/clAmdFft.client.h
deleted file mode 100644
index 8d4ac80bbcb78849b758e7698b145667368b1cb4..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.client.h
+++ /dev/null
@@ -1,13 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-#pragma once
-#if !defined( CLIENT_H )
-#define CLIENT_H
-
-//	Boost headers that we want to use
-//	#define BOOST_PROGRAM_OPTIONS_DYN_LINK
-#include <boost/program_options.hpp>
-
-#endif
diff --git a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.h b/RTCP/Cobalt/clAmdFft/samples/clAmdFft.h
deleted file mode 100644
index 73e65d0d349eeb24d7d27997d78abe43661a244a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.h
+++ /dev/null
@@ -1,573 +0,0 @@
-/***********************************************************************
-**	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-***********************************************************************/
-
-/*! @file clAmdFft.h
- * clAmdFft.h defines all of the public interfaces and types that are meant to be used by clFFT clients
- * This is the one public header file that should be consumed by clFFT clients.  It is written to adhere to native "C"
- * interfaces to make clAmdFft library as portable as possible; it should be callable from C, C++, .NET and Fortran,
- * either with the proper linking or using wrapper classes.
- *
- */
-
-#pragma once
-#if !defined( CLAMDFFT_DOTH )
-#define CLAMDFFT_DOTH
-
-#if defined(__APPLE__) || defined(__MACOSX)
-	#include <OpenCL/cl.h>
-#else
-	#include <CL/cl.h>
-#endif
-
-#include "clAmdFft.version.h"
-
-/*! This preprocessor definition is the standard way of making exporting APIs
- *  from a DLL simpler. All files within this DLL are compiled with the CLAMDFFT_EXPORTS
- *  symbol defined on the command line. This symbol should not be defined on any project
- *  that uses this DLL. This way any other project whose source files include this file see 
- *  clAmdFft functions as being imported from a DLL, whereas this DLL sees symbols
- *  defined with this macro as being exported.
- */
-#if defined( _WIN32 )
-	#if !defined( __cplusplus )
-		#define inline __inline
-	#endif
-
-	#if defined( CLAMDFFT_EXPORTS )
-		#define CLAMDFFTAPI __declspec( dllexport )
-	#else
-		#define CLAMDFFTAPI __declspec( dllimport )
-	#endif
-#else
-	#define CLAMDFFTAPI
-#endif
-
-/*	In general, you can not use namespaces for strict C compliance, so we prefix our public accessible names
- *	with the string clAmdFft
- */
-
-/*	All functions will return pre-defined error codes, and will NOT throw exceptions to the caller
- */
-
-/*!  @brief clAmdFft error codes definition, incorporating OpenCL error definitions 
- *
- *   This enumeration is a superset of the OpenCL error codes.  For example, CL_OUT_OF_HOST_MEMORY,
- *   which is defined in cl.h is aliased as CLFFT_OUT_OF_HOST_MEMORY.  The set of basic OpenCL
- *   error codes is extended to add extra values specific to the clAmdFft package.
- */
-enum clAmdFftStatus_
-{
-	CLFFT_INVALID_GLOBAL_WORK_SIZE			= CL_INVALID_GLOBAL_WORK_SIZE,
-	CLFFT_INVALID_MIP_LEVEL					= CL_INVALID_MIP_LEVEL,
-	CLFFT_INVALID_BUFFER_SIZE				= CL_INVALID_BUFFER_SIZE,
-	CLFFT_INVALID_GL_OBJECT					= CL_INVALID_GL_OBJECT,
-	CLFFT_INVALID_OPERATION					= CL_INVALID_OPERATION,
-	CLFFT_INVALID_EVENT						= CL_INVALID_EVENT,
-	CLFFT_INVALID_EVENT_WAIT_LIST			= CL_INVALID_EVENT_WAIT_LIST,
-	CLFFT_INVALID_GLOBAL_OFFSET				= CL_INVALID_GLOBAL_OFFSET,
-	CLFFT_INVALID_WORK_ITEM_SIZE			= CL_INVALID_WORK_ITEM_SIZE,
-	CLFFT_INVALID_WORK_GROUP_SIZE			= CL_INVALID_WORK_GROUP_SIZE,
-	CLFFT_INVALID_WORK_DIMENSION			= CL_INVALID_WORK_DIMENSION,
-	CLFFT_INVALID_KERNEL_ARGS				= CL_INVALID_KERNEL_ARGS,
-	CLFFT_INVALID_ARG_SIZE					= CL_INVALID_ARG_SIZE,
-	CLFFT_INVALID_ARG_VALUE					= CL_INVALID_ARG_VALUE,
-	CLFFT_INVALID_ARG_INDEX					= CL_INVALID_ARG_INDEX,
-	CLFFT_INVALID_KERNEL					= CL_INVALID_KERNEL,
-	CLFFT_INVALID_KERNEL_DEFINITION			= CL_INVALID_KERNEL_DEFINITION,
-	CLFFT_INVALID_KERNEL_NAME				= CL_INVALID_KERNEL_NAME,
-	CLFFT_INVALID_PROGRAM_EXECUTABLE		= CL_INVALID_PROGRAM_EXECUTABLE,
-	CLFFT_INVALID_PROGRAM					= CL_INVALID_PROGRAM,
-	CLFFT_INVALID_BUILD_OPTIONS				= CL_INVALID_BUILD_OPTIONS,
-	CLFFT_INVALID_BINARY					= CL_INVALID_BINARY,
-	CLFFT_INVALID_SAMPLER					= CL_INVALID_SAMPLER,
-	CLFFT_INVALID_IMAGE_SIZE				= CL_INVALID_IMAGE_SIZE,
-	CLFFT_INVALID_IMAGE_FORMAT_DESCRIPTOR	= CL_INVALID_IMAGE_FORMAT_DESCRIPTOR,
-	CLFFT_INVALID_MEM_OBJECT				= CL_INVALID_MEM_OBJECT,
-	CLFFT_INVALID_HOST_PTR					= CL_INVALID_HOST_PTR,
-	CLFFT_INVALID_COMMAND_QUEUE				= CL_INVALID_COMMAND_QUEUE,
-	CLFFT_INVALID_QUEUE_PROPERTIES			= CL_INVALID_QUEUE_PROPERTIES,
-	CLFFT_INVALID_CONTEXT					= CL_INVALID_CONTEXT,
-	CLFFT_INVALID_DEVICE					= CL_INVALID_DEVICE,
-	CLFFT_INVALID_PLATFORM					= CL_INVALID_PLATFORM,
-	CLFFT_INVALID_DEVICE_TYPE				= CL_INVALID_DEVICE_TYPE,
-	CLFFT_INVALID_VALUE						= CL_INVALID_VALUE,
-	CLFFT_MAP_FAILURE						= CL_MAP_FAILURE,
-	CLFFT_BUILD_PROGRAM_FAILURE				= CL_BUILD_PROGRAM_FAILURE,
-	CLFFT_IMAGE_FORMAT_NOT_SUPPORTED		= CL_IMAGE_FORMAT_NOT_SUPPORTED,
-	CLFFT_IMAGE_FORMAT_MISMATCH				= CL_IMAGE_FORMAT_MISMATCH,
-	CLFFT_MEM_COPY_OVERLAP					= CL_MEM_COPY_OVERLAP,
-	CLFFT_PROFILING_INFO_NOT_AVAILABLE		= CL_PROFILING_INFO_NOT_AVAILABLE,
-	CLFFT_OUT_OF_HOST_MEMORY				= CL_OUT_OF_HOST_MEMORY,
-	CLFFT_OUT_OF_RESOURCES					= CL_OUT_OF_RESOURCES,
-	CLFFT_MEM_OBJECT_ALLOCATION_FAILURE		= CL_MEM_OBJECT_ALLOCATION_FAILURE,
-	CLFFT_COMPILER_NOT_AVAILABLE			= CL_COMPILER_NOT_AVAILABLE,
-	CLFFT_DEVICE_NOT_AVAILABLE				= CL_DEVICE_NOT_AVAILABLE,
-	CLFFT_DEVICE_NOT_FOUND					= CL_DEVICE_NOT_FOUND,
-	CLFFT_SUCCESS							= CL_SUCCESS,
-	//-------------------------- Extended status codes for clAmdFft ----------------------------------------
-	CLFFT_BUGCHECK =  4*1024,	/*!< Bugcheck. */
-	CLFFT_NOTIMPLEMENTED,		/*!< Functionality is not implemented yet. */
-	CLFFT_TRANSPOSED_NOTIMPLEMENTED, /*!< Transposed functionality is not implemented for this transformation. */
-	CLFFT_FILE_NOT_FOUND,		/*!< Tried to open an existing file on the host system, but failed. */
-	CLFFT_FILE_CREATE_FAILURE,	/*!< Tried to create a file on the host system, but failed. */
-	CLFFT_VERSION_MISMATCH,		/*!< Version conflict between client and library. */
-	CLFFT_INVALID_PLAN,			/*!< Requested plan could not be found. */
-	CLFFT_DEVICE_NO_DOUBLE,		/*!< Double precision not supported on this device. */
-	CLFFT_ENDSTATUS				/* This value will always be last, and marks the length of clAmdFftStatus. */
-};
-typedef enum clAmdFftStatus_ clAmdFftStatus;
-
-/*!  @brief The dimension of the input and output buffers that will be fed into all FFT transforms */
-typedef enum clAmdFftDim_
-{
-	CLFFT_1D		= 1,		/*!< 1 Dimensional FFT transform (default). */
-	CLFFT_2D,					/*!< 2 Dimensional FFT transform. */
-	CLFFT_3D,					/*!< 3 Dimensional FFT transform. */
-	ENDDIMENSION			/*!< This value will always be last, and marks the length of clAmdFftDim. */
-} clAmdFftDim;
-
-/*!  @brief What are the expected layout's of the complex numbers <p>
- *   <b> For Release 1.0,</b> only the CLFFT_COMPLEX_INTERLEAVED and CLFFT_COMPLEX_PLANAR formats are supported.
- *   The real and hermitian formats should be supported in a future release.
- */
-typedef enum clAmdFftLayout_
-{
-	CLFFT_COMPLEX_INTERLEAVED	= 1,	/*!< An array of complex numbers, with real and imaginary components together (default). */
-	CLFFT_COMPLEX_PLANAR,				/*!< Arrays of real componets and arrays of imaginary components that have been seperated out. */
-	CLFFT_HERMITIAN_INTERLEAVED,		/*!< Compressed form of complex numbers; complex-conjugates not stored, real and imaginary components in same array. TODO: Document layout */
-	CLFFT_HERMITIAN_PLANAR,				/*!< Compressed form of complex numbers; complex-conjugates not stored, real and imaginary components in separate arrays. TODO: Document layout */
-	CLFFT_REAL,							/*!< An array of real numbers, with no corresponding imaginary components. */
-	ENDLAYOUT			/*!< This value will always be last, and marks the length of clAmdFftLayout. */
-} clAmdFftLayout;
-
-/*!  @brief What is the expected precision of each FFT.
- *   @ref DistanceStridesandPitches
- */
-typedef enum clAmdFftPrecision_
-{
-	CLFFT_SINGLE	= 1,	/*!< An array of complex numbers, with real and imaginary components as floats (default). */
-	CLFFT_DOUBLE,			/*!< An array of complex numbers, with real and imaginary components as doubles. */
-	CLFFT_SINGLE_FAST,		/*!< Faster implementation preferred. */
-	CLFFT_DOUBLE_FAST,		/*!< Faster implementation preferred. */
-	ENDPRECISION	/*!< This value will always be last, and marks the length of clAmdFftPrecision. */
-} clAmdFftPrecision;
-
-/*!  @brief What is the expected direction of each FFT, time or the frequency domains */
-typedef enum clAmdFftDirection_
-{
-	CLFFT_FORWARD	= -1,		/*!< FFT transform from the time to the frequency domain. */
-	CLFFT_BACKWARD	= 1,		/*!< FFT transform from the frequency to the time domain. */
-	CLFFT_MINUS		= -1,		/*!< Alias for the forward transform. */
-	CLFFT_PLUS		= 1,		/*!< Alias for the backward transform. */
-	ENDDIRECTION			/*!< This value will always be last, and marks the length of clAmdFftDirection. */
-} clAmdFftDirection;
-
-/*!  @brief Are the input buffers overwritten with the results */
-typedef enum clAmdFftResultLocation_
-{
-	CLFFT_INPLACE		= 1,		/*!< The input and output buffers are the same (default). */
-	CLFFT_OUTOFPLACE,				/*!< Seperate input and output buffers. */
-	ENDPLACE				/*!< This value will always be last, and marks the length of clAmdFftPlaceness. */
-} clAmdFftResultLocation;
-
-/*! @brief whether the result will be returned in original order; only valid for dimensions greater than 1 */
-typedef enum clAmdFftResultTransposed_ {
-	CLFFT_NOTRANSPOSE = 1,		/*!< The results are returned in the original preserved order (default) */
-	CLFFT_TRANSPOSED,			/*!< The result is transposed where transpose kernel is supported (possibly faster) */
-	ENDTRANSPOSED			/*!< This value will always be last, and marks the length of clAmdFftResultTransposed */
-} clAmdFftResultTransposed;
-
-/*! 	BitMasks to be used with clAmdFftSetupData.debugFlags */
-#define CLFFT_DUMP_PROGRAMS 0x1
-
-/*! @brief Data structure that can be passed to clAmdFftSetup() to control the behavior of the FFT runtime
- *  @details This structure contains values that can be initialized before instantiation of the FFT runtime 
- *  with ::clAmdFftSetup().  To initialize this structure, pass a pointer to a user struct to ::clAmdFftInitSetupData( ),
- *  which will clear the structure and set the version member variables to the current values.
- */
-struct clAmdFftSetupData_
-{
-	cl_uint major;		/*!< Major version number of the project; signifies major API changes. */
-	cl_uint minor;		/*!< Minor version number of the project; minor API changes that could break backwards compatibility. */
-	cl_uint patch;		/*!< Patch version number of the project; Always incrementing number, signifies change over time. */
-
-	/*! 	Bitwise flags that control the behavior of library debug logic. */
-	cl_ulong debugFlags;  /*! This should be set to zero, except when debugging the clAmdFft library.
-	                       *  <p> debugFlags can be set to CLFFT_DUMP_PROGRAMS, in which case the dynamically generated OpenCL kernels will
-	                       *  be written to text files in the current working directory.  These files will have a *.cl suffix.
-	                       */
-};
-typedef struct clAmdFftSetupData_ clAmdFftSetupData;
-
-/*!  @brief An abstract handle to the object that represents the state of the FFT(s) */
-typedef size_t clAmdFftPlanHandle;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-	/*! @brief Initialize an clAmdFftSetupData struct for the client
-	 *  @details clAmdFftSetupData is passed to clAmdFftSetup to control behavior of the FFT runtime
-	 *  @param[out] setupData Data structure is cleared, initialized with version information and default values
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	inline clAmdFftStatus clAmdFftInitSetupData( clAmdFftSetupData* setupData )
-	{
-		setupData->major	= clAmdFftVersionMajor;
-		setupData->minor	= clAmdFftVersionMinor;
-		setupData->patch	= clAmdFftVersionPatch;
-		setupData->debugFlags	= 0;
-
-		return	CLFFT_SUCCESS;
-	}
-
-	/*! @brief Initialize internal FFT resources.
-	 *  @details AMD's FFT implementation caches kernels, programs and buffers for its internal use.
-	 *  @param[in] setupData Data structure that can be passed into the setup routine to control FFT generation behavior 
-	 * 	and debug functionality
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetup( const clAmdFftSetupData* setupData );
-
-	/*! @brief Release all internal resources.
-	 *  @details Call when client is done with this FFT library, allowing the library to destroy all resources it has cached
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftTeardown( );
-
-	/*! @brief Query the FFT library for version information
-	 *  @details Return the major, minor and patch version numbers associated with this FFT library
-	 *  @param[out] major Major functionality change
-	 *  @param[out] minor Minor functionality change
-	 *  @param[out] patch Bug fixes, documentation changes, no new features introduced
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetVersion( cl_uint* major, cl_uint* minor, cl_uint* patch );
-
-	/*! @brief Create a plan object initialized entirely with default values.
-	 *  @details A plan is a repository of state for calculating FFT's.  Allows the runtime to pre-calculate kernels, programs
-	 * 	and buffers and associate them with buffers of specified dimensions.
-	 *  @param[out] plHandle Handle to the newly created plan
-	 *  @param[in] context Client is responsible for providing an OpenCL context for the plan
-	 *  @param[in] dim The dimensionality of the FFT transform; describes how many elements are in the array
-	 *  @param[in] clLengths An array of lengths, of size 'dim'.  Each value describes the length of additional dimensions
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftCreateDefaultPlan( clAmdFftPlanHandle* plHandle, cl_context context, const clAmdFftDim dim, 
-								const size_t* clLengths );
-
-	/*! @brief Create a copy of an existing plan.
-	 *  @details This API allows a client to create a new plan based upon an existing plan.  This is a convenience function 
-	 *  provided for quickly creating plans that are similar, but may differ slightly.
-	 *  @param[out] out_plHandle Handle to the newly created plan that is based on in_plHandle
-	 *  @param[in] new_context Client is responsible for providing a new context for the new plan
-	 *  @param[in] in_plHandle Handle to a plan to be copied, previously created
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftCopyPlan( clAmdFftPlanHandle* out_plHandle, cl_context new_context, clAmdFftPlanHandle in_plHandle );
-
-	/*! @brief Prepare the plan for execution.
-	 *  @details After all plan parameters are set, the client has the option of 'baking' the plan, which tells the runtime that
-	 *  no more changes to the plan's parameters are expected, and the OpenCL kernels should be compiled.  This optional function
-	 *  allows the client application to perform this function when the application is being initialized instead of on the first
-	 *  execution. 
-	 *  At this point, the clAmdFft runtime will apply all implimented optimizations, possibly including
-	 *  running kernel experiments on the devices in the plan context.
-	 *  <p>  Users should assume that this function will take a long time to execute.  If a plan is not baked before being executed, 
-	 *  users should assume that the first call to clAmdFftEnqueueTransform will take a long time to execute.
-	 *  <p>  If any significant parameter of a plan is changed after the plan is baked (by a subsequent call to one of 
-	 *  the clAmdFftSetPlan____ functions), that will not be considered an error.  Instead, the plan will revert back to
-	 *  the unbaked state, discarding the benefits of the baking operation.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] numQueues Number of command queues in commQueueFFT; 0 is a valid value, in which case client does not want 
-	 * 	the runtime to run load experiments and only pre-calculate state information
-	 *  @param[in] commQueueFFT An array of cl_command_queues created by the client; the command queues must be a proper subset of 
-	 * 	the devices included in the plan context
-	 *  @param[in] pfn_notify A function pointer to a notification routine. The notification routine is a callback function that 
-	 *  an application can register and which will be called when the program executable has been built (successfully or unsuccessfully)
-	 *  <b> For Release 1.0,</b> this parameter MUST be NULL or nullptr.
-	 *  @param[in] user_data Passed as an argument when pfn_notify is called. 
-	 *  <b> For Release 1.0,</b> this parameter MUST be NULL or nullptr.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftBakePlan( clAmdFftPlanHandle plHandle, cl_uint numQueues, cl_command_queue* commQueueFFT,
-							void (CL_CALLBACK *pfn_notify)(clAmdFftPlanHandle plHandle, void *user_data), void* user_data );
-
-	/*! @brief Release the resources of a plan.
-	 *  @details A plan may include kernels, programs and buffers associated with it that consume memory.  When a plan 
-	 *  is not needed anymore, the client should release the plan.
-	 *  @param[in,out] plHandle Handle to a plan previously created
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftDestroyPlan( clAmdFftPlanHandle* plHandle );
-	
-	/*! @brief Retrieve the OpenCL context of a previously created plan.
-	 *  @details User should pass a reference to an cl_context variable, which will be changed to point to a 
-	 *  context set in the specified plan.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] context Reference to user allocated cl_context, which will point to context set in plan
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanContext( const clAmdFftPlanHandle plHandle, cl_context* context );
-
-	/*! @brief Retrieve the floating point precision of the FFT data
-	 *  @details User should pass a reference to an clAmdFftPrecision variable, which will be set to the 
-	 *  precision of the FFT complex data in the plan.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] precision Reference to user clAmdFftPrecision enum
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanPrecision( const clAmdFftPlanHandle plHandle, clAmdFftPrecision* precision );
-
-	/*! @brief Set the floating point precision of the FFT data
-	 *  @details Set the plan property which will be the precision of the FFT complex data in the plan.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] precision Reference to user clAmdFftPrecision enum <p>
-	 *  <b> For Release 1.0,</b> only CLFFT_SINGLE and CLFFT_SINGLE_FAST are supported.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanPrecision( clAmdFftPlanHandle plHandle, clAmdFftPrecision precision );
-
-	/*! @brief Retrieve the scaling factor that should be applied to the FFT data
-	 *  @details User should pass a reference to an cl_float variable, which will be set to the 
-	 *  floating point scaling factor that will be multiplied across the FFT data.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dir Which direction does the scaling factor apply to
-	 *  @param[out] scale Reference to user cl_float variable
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanScale( const clAmdFftPlanHandle plHandle, clAmdFftDirection dir, cl_float* scale );
-
-	/*! @brief Set the scaling factor that should be applied to the FFT data
-	 *  @details Set the plan property which will be the floating point scaling factor that will be 
-	 *  multiplied across the FFT data.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dir Which direction does the scaling factor apply to
-	 *  @param[in] scale Reference to user cl_float variable
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanScale( clAmdFftPlanHandle plHandle, clAmdFftDirection dir, cl_float scale );
-
-	/*! @brief Retrieve the number of discrete arrays that this plan can handle concurrently
-	 *  @details User should pass a reference to an cl_uint variable, which will be set to the 
-	 *  number of discrete arrays (1D or 2D) that will be batched together for this plan
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] batchSize How many discrete number of FFT's are to be performed
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanBatchSize( const clAmdFftPlanHandle plHandle, size_t* batchSize );
-
-	/*! @brief Set the number of discrete arrays that this plan can handle concurrently
-	 *  @details Set the plan property which will be set to the number of discrete arrays (1D or 2D) 
-	 *  that will be batched together for this plan
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] batchSize How many discrete number of FFT's are to be performed
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanBatchSize( clAmdFftPlanHandle plHandle, size_t batchSize );
-
-	/*! @brief Retrieve the dimensionality of FFT's to be transformed in the plan
-	 *  @details Queries a plan object and retrieves the dimensionality that the plan is set for.  A size is returned to
-	 *  help the client allocate the proper storage to hold the dimensions in a further call to clAmdFftGetPlanLength
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] dim The dimensionality of the FFT's to be transformed
-	 *  @param[out] size Value used to allocate an array to hold the FFT dimensions.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanDim( const clAmdFftPlanHandle plHandle, clAmdFftDim* dim, cl_uint* size );
-
-	/*! @brief Set the dimensionality of FFT's to be transformed by the plan
-	 *  @details Set the dimensionality of FFT's to be transformed by the plan
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimensionality of the FFT's to be transformed
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanDim( clAmdFftPlanHandle plHandle, const clAmdFftDim dim );
-
-	/*! @brief Retrieve the length of each dimension of the FFT
-	 *  @details User should pass a reference to a size_t array, which will be set to the 
-	 *  length of each discrete dimension of the FFT
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the length parameters; describes how many elements are in the array
-	 *  @param[out] clLengths An array of lengths, of size 'dim'.  Each array value describes the length of each dimension
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanLength( const clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clLengths );
-
-	/*! @brief Set the length of each dimension of the FFT
-	 *  @details Set the plan property which will be the length of each discrete dimension of the FFT
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the length parameters; describes how many elements are in the array
-	 *  @param[in] clLengths An array of lengths, of size 'dim'.  Each value describes the length of additional dimensions
-	 *  <p><b> For Release 1.0, </b> All lengths must be powers of 2.  Non-power-of-two dimensions should be supported in a future release.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanLength( clAmdFftPlanHandle plHandle, const clAmdFftDim dim, const size_t* clLengths );
-
-	/*! @brief Retrieve the distance between consecutive elements for input buffers in a dimension.
-	 *  @details Depending on how the dimension is set in the plan (for 2D or 3D FFT's), strideY or strideZ can be safely
-	 *  ignored
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the stride parameters; describes how many elements are in the array
-	 *  @param[out] clStrides An array of strides, of size 'dim'.  Usually strideX=1 so that successive elements in the first dimension are stored contiguously.
-	 * 	Typically strideY=LenX, strideZ=LenX*LenY such that successive elements in the second and third dimensions are stored contiguously.
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanInStride( const clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clStrides );
-
-	/*! @brief Set the distance between consecutive elements for input buffers in a dimension.
-	 *  @details Set the plan properties which will be the distance between elements in a given dimension
-	 *  (units are in terms of clAmdFftPrecision)
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the stride parameters; describes how many elements are in the array
-	 *  @param[in] clStrides An array of strides, of size 'dim'. 
-	 *  See  @ref DistanceStridesandPitches for details.
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanInStride( clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clStrides );
-
-	/*! @brief Retrieve the distance between consecutive elements for output buffers in a dimension.
-	 *  @details Depending on how the dimension is set in the plan (for 2D or 3D FFT's), strideY or strideZ can be safely
-	 *  ignored
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the stride parameters; describes how many elements are in the array
-	 *  @param[out] clStrides An array of strides, of size 'dim'.  Usually strideX=1 so that successive elements in the first dimension are stored contiguously.
-	 *  Typically strideY=LenX, strideZ=LenX*LenYsuch that successive elements in the second and third dimensions are stored contiguously.
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanOutStride( const clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clStrides );
-
-	/*! @brief Set the distance between consecutive elements for output buffers in a dimension.
-	 *  @details Set the plan properties which will be the distance between elements in a given dimension
-	 *  (units are in terms of clAmdFftPrecision)
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dim The dimension of the stride parameters; describes how many elements are in the array
-	 *  @param[in] clStrides An array of strides, of size 'dim'.  Usually strideX=1 so that successive elements in the first dimension are stored contiguously.
-	 * 	Typically strideY=LenX, strideZ=LenX*LenY such that successive elements in the second and third dimensions are stored contiguously.
-	 *  @sa clAmdFftSetPlanInStride
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanOutStride( clAmdFftPlanHandle plHandle, const clAmdFftDim dim, size_t* clStrides );
-
-	/*! @brief Retrieve the distance between Array objects
-	 *  @details Pitch is the distance between each discrete array object in an FFT array. This is only used 
-	 *  for 'array' dimensions in clAmdFftDim; see clAmdFftSetPlanDimension (units are in terms of clAmdFftPrecision)
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] iDist The distance between the beginning elements of the discrete array objects in memory on input.
-	 *  For contiguous arrays in memory, iDist=(strideX*strideY*strideZ)
-	 *  @param[out] oDist The distance between the beginning elements of the discrete array objects in memory on output.
-	 *  For contiguous arrays in memory, oDist=(strideX*strideY*strideZ)
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanDistance( const clAmdFftPlanHandle plHandle, size_t* iDist, size_t* oDist );
-
-	/*! @brief Set the distance between Array objects
-	 *  @details Pitch is the distance between each discrete array object in an FFT array. This is only used 
-	 *  for 'array' dimensions in clAmdFftDim; see clAmdFftSetPlanDimension (units are in terms of clAmdFftPrecision)
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] iDist The distance between the beginning elements of the discrete array objects in memory on input.
-	 *  For contiguous arrays in memory, iDist=(strideX*strideY*strideZ)
-	 *  @param[out] oDist The distance between the beginning elements of the discrete array objects in memory on output.
-	 *  For contiguous arrays in memory, oDist=(strideX*strideY*strideZ)
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanDistance( clAmdFftPlanHandle plHandle, size_t iDist, size_t oDist );
-
-	/*! @brief Retrieve the expected layout of the input and output buffers
-	 *  @details Output buffers can be filled with either hermitian or complex numbers.  Complex numbers can be stored 
-	 *  in various layouts; this informs the FFT engine what layout to produce on output
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] iLayout Indicates how the input buffers are laid out in memory
-	 *  @param[out] oLayout Indicates how the output buffers are laid out in memory
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetLayout( const clAmdFftPlanHandle plHandle, clAmdFftLayout* iLayout, clAmdFftLayout* oLayout );
-
-	/*! @brief Set the expected layout of the input and output buffers
-	 *  @details Output buffers can be filled with either hermitian or complex numbers.  Complex numbers can be stored 
-	 *  in various layouts; this informs the FFT engine what layout to produce on output
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] iLayout Indicates how the input buffers are laid out in memory
-	 *  @param[in] oLayout Indicates how the output buffers are laid out in memory
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetLayout( clAmdFftPlanHandle plHandle, clAmdFftLayout iLayout, clAmdFftLayout oLayout );
-
-	/*! @brief Retrieve whether the input buffers are going to be overwritten with results
-	 *  @details If the setting is to do an in-place transform, the input buffers are overwritten with the results of the
-	 *  transform.  If the setting is for out-of-place transforms, the engine knows to look for separate output buffers
-	 *  on the Enqueue call.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] placeness Tells the FFT engine to clobber the input buffers or to expect output buffers for results
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetResultLocation( const clAmdFftPlanHandle plHandle, clAmdFftResultLocation* placeness );
-
-	/*! @brief Set whether the input buffers are going to be overwritten with results
-	 *  @details If the setting is to do an in-place transform, the input buffers are overwritten with the results of the
-	 *  transform.  If the setting is for out-of-place transforms, the engine knows to look for separate output buffers
-	 *  on the Enqueue call.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] placeness Tells the FFT engine to clobber the input buffers or to expect output buffers for results
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetResultLocation( clAmdFftPlanHandle plHandle, clAmdFftResultLocation placeness );
-	
-	/*! @brief Retrieve the final transpose setting of a muti-dimensional FFT 
-	 *  @details A multi-dimensional FFT typically transposes the data several times during calculation.  If the client 
-	 *  does not care about the final transpose to put data back in proper dimension, the final transpose can be skipped 
-	 *  for possible speed improvements 
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] transposed Parameter specifies whether the final transpose can be skipped
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftGetPlanTransposeResult( const clAmdFftPlanHandle plHandle, clAmdFftResultTransposed * transposed );
-
-	/*! @brief Set the final transpose setting of a muti-dimensional FFT 
-	 *  @details A multi-dimensional FFT typically transposes the data several times during calculation.  If the client 
-	 *  does not care about the final transpose to put data back in proper dimension, the final transpose can be skipped 
-	 *  for possible speed improvements 
-	 *  @param[in] plHandle Handle to a plan previously created 
-	 *  @param[in] transposed Parameter specifies whether the final transpose can be skipped
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftSetPlanTransposeResult( clAmdFftPlanHandle plHandle, clAmdFftResultTransposed transposed );
-
-
-	/*! @brief Get buffer size (in bytes), which may be needed internally for an intermediate buffer
-	 *  @details Very large FFT transforms may need multiple passes, and the operation would need a temporary buffer to hold
-	 *  intermediate results. This function is only valid after the plan is baked, otherwise an invalid operation error
-	 *  is returned. If buffersize returns as 0, the runtime needs no temporary buffer.
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[out] buffersize Size in bytes for intermediate buffer
-	 */
-	CLAMDFFTAPI clAmdFftStatus clAmdFftGetTmpBufSize( const clAmdFftPlanHandle plHandle, size_t* buffersize );
-
-	/*! @brief Enqueue an FFT transform operation, and return immediately (non-blocking)
-	 *  @details This transform API is specific to the interleaved complex format, taking an input buffer with real and imaginary
-	 *  components paired together, and outputting the results into an output buffer in the same format
-	 *  @param[in] plHandle Handle to a plan previously created
-	 *  @param[in] dir Forwards or backwards transform
-	 *  @param[in] numQueuesAndEvents Number of command queues in commQueues; number of expected events to be returned in outEvents
-	 *  @param[in] commQueues An array of cl_command_queues created by the client; the command queues must be a proper subset of 
-	 * 	the devices included in the plan context
-	 *  @param[in] numWaitEvents Specify the number of elements in the eventWaitList array
-	 *  @param[in] waitEvents Events that this transform should wait to complete before executing on the device
-	 *  @param[out] outEvents The runtime fills this array with events corresponding 1 to 1 with the input command queues passed
-	 *	in commQueues.  This parameter can be NULL or nullptr, in which case client is not interested in receiving notifications
-	 *	when transforms are finished, otherwise if not NULL the client is responsible for allocating this array, with at least 
-	 *	as many elements as specified in numQueuesAndEvents.
-	 *  @param[in] inputBuffers An array of cl_mem objects that contain data for processing by the FFT runtime.  If the transform
-	 *  is in place, the FFT results will overwrite the input buffers
-	 *  @param[out] outputBuffers An array of cl_mem objects that will store the results of out of place transforms.  If the transform
-	 *  is in place, this parameter may be NULL or nullptr.  It is completely ignored
-	 *  @param[in] tmpBuffer A cl_mem object that is reserved as a temporary buffer for FFT processing. If clTmpBuffers is NULL or nullptr,
-	 *  and the runtime needs temporary storage, an internal temporary buffer will be created on the fly managed by the runtime.
-	 *  @return Enum describing error condition; superset of OpenCL error codes
-	 */
-	CLAMDFFTAPI clAmdFftStatus	clAmdFftEnqueueTransform(
-												clAmdFftPlanHandle plHandle,
-												clAmdFftDirection dir,
-												cl_uint numQueuesAndEvents,
-												cl_command_queue* commQueues,
-												cl_uint numWaitEvents,
-												const cl_event* waitEvents,
-												cl_event* outEvents,
-												cl_mem* inputBuffers,
-												cl_mem* outputBuffers,
-												cl_mem tmpBuffer
-												);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.openCL.cpp b/RTCP/Cobalt/clAmdFft/samples/clAmdFft.openCL.cpp
deleted file mode 100644
index 5cba77240f0a93dda5a945efe34957a1a814c67f..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.openCL.cpp
+++ /dev/null
@@ -1,522 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-// clAmdFft.opencl.cpp : Provides functions to set up openCL
-//
-
-#include "stdafx.h"
-#include <stdexcept>
-#include <iomanip>
-#include <sstream>
-#include <cstring>
-#include <vector>
-#include "clAmdFft.h"
-#include "clAmdFft.openCL.h"
-
-void prettyPrintPlatformInfo( const cl_platform_id& pId )
-{
-	size_t platformProfileSize	= 0;
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_PROFILE, 0, NULL, &platformProfileSize ),
-		"Getting CL_PLATFORM_PROFILE Platform Info string size ( ::clGetPlatformInfo() )" );
-
-	std::vector< char > szPlatformProfile( platformProfileSize );
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_PROFILE, platformProfileSize, &szPlatformProfile[ 0 ], NULL),
-		"Getting CL_PLATFORM_PROFILE Platform Info string ( ::clGetPlatformInfo() )" );
-
-	size_t platformVersionSize	= 0;
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VERSION, 0, NULL, &platformVersionSize ),
-		"Getting CL_PLATFORM_VERSION Platform Info string size ( ::clGetPlatformInfo() )" );
-
-	std::vector< char > szPlatformVersion( platformVersionSize );
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VERSION, platformVersionSize, &szPlatformVersion[ 0 ], NULL),
-		"Getting CL_PLATFORM_VERSION Platform Info string ( ::clGetPlatformInfo() )" );
-
-	size_t platformNameSize	= 0;
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_NAME, 0, NULL, &platformNameSize ),
-		"Getting CL_PLATFORM_NAME Platform Info string size ( ::clGetPlatformInfo() )" );
-
-	std::vector< char > szPlatformName( platformNameSize );
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_NAME, platformNameSize, &szPlatformName[ 0 ], NULL),
-		"Getting CL_PLATFORM_NAME Platform Info string ( ::clGetPlatformInfo() )" );
-
-	size_t vendorStringSize	= 0;
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VENDOR, 0, NULL, &vendorStringSize ),
-		"Getting CL_PLATFORM_VENDOR Platform Info string size ( ::clGetPlatformInfo() )" );
-
-	std::vector< char > szPlatformVendor( vendorStringSize );
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VENDOR, vendorStringSize, &szPlatformVendor[ 0 ], NULL),
-		"Getting CL_PLATFORM_VENDOR Platform Info string ( ::clGetPlatformInfo() )" );
-
-	size_t platformExtensionsSize	= 0;
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_EXTENSIONS, 0, NULL, &platformExtensionsSize ),
-		"Getting CL_PLATFORM_EXTENSIONS Platform Info string size ( ::clGetPlatformInfo() )" );
-
-	std::vector< char > szPlatformExtensions( platformExtensionsSize );
-	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_EXTENSIONS, platformExtensionsSize, &szPlatformExtensions[ 0 ], NULL),
-		"Getting CL_PLATFORM_EXTENSIONS Platform Info string ( ::clGetPlatformInfo() )" );
-
-	const int indent = countOf( "    CL_PLATFORM_EXTENSIONS: " );
-	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_PROFILE: " << &szPlatformProfile[ 0 ] << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_VERSION: " << &szPlatformVersion[ 0 ] << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_NAME: " << &szPlatformName[ 0 ] << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_VENDOR: " << &szPlatformVendor[ 0 ] << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_EXTENSIONS: " << &szPlatformExtensions[ 0 ] << std::endl;
-	std::cout << std::right << std::endl;
-}
-
-void prettyPrintDeviceInfo( const cl_device_id& dId )
-{
-	size_t deviceNameSize	= 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_NAME, 0, NULL, &deviceNameSize ),
-		"Getting CL_DEVICE_NAME Platform Info string size ( ::clGetDeviceInfo() )" );
-
-	std::vector< char > szDeviceName( deviceNameSize );
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_NAME, deviceNameSize, &szDeviceName[ 0 ], NULL ),
-		"Getting CL_DEVICE_NAME Platform Info string ( ::clGetDeviceInfo() )" );
-
-	size_t deviceVersionSize	= 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_VERSION, 0, NULL, &deviceVersionSize ),
-		"Getting CL_DEVICE_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
-
-	std::vector< char > szDeviceVersion( deviceVersionSize );
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_VERSION, deviceVersionSize, &szDeviceVersion[ 0 ], NULL ),
-		"Getting CL_DEVICE_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
-
-	size_t driverVersionSize	= 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DRIVER_VERSION, 0, NULL, &driverVersionSize ),
-		"Getting CL_DRIVER_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
-
-	std::vector< char > szDriverVersion( driverVersionSize );
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DRIVER_VERSION, driverVersionSize, &szDriverVersion[ 0 ], NULL ),
-		"Getting CL_DRIVER_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
-
-	size_t openCLVersionSize	= 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_OPENCL_C_VERSION, 0, NULL, &openCLVersionSize ),
-		"Getting CL_DEVICE_OPENCL_C_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
-
-	std::vector< char > szOpenCLVersion( openCLVersionSize );
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_OPENCL_C_VERSION, openCLVersionSize, &szOpenCLVersion[ 0 ], NULL ),
-		"Getting CL_DEVICE_OPENCL_C_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
-
-	cl_device_type devType = CL_DEVICE_TYPE_DEFAULT;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_TYPE, sizeof( cl_device_type ), &devType, NULL ),
-		"Getting CL_DEVICE_TYPE device info ( ::clGetDeviceInfo() )" );
-
-	cl_uint devAddrBits = 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_ADDRESS_BITS, sizeof( cl_uint ), &devAddrBits, NULL ),
-		"Getting CL_DEVICE_ADDRESS_BITS device info ( ::clGetDeviceInfo() )" );
-
-	cl_uint maxClockFreq = 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof( cl_uint ), &maxClockFreq, NULL ),
-		"Getting CL_DEVICE_MAX_CLOCK_FREQUENCY device info ( ::clGetDeviceInfo() )" );
-
-	cl_bool devAvailable = CL_FALSE;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_AVAILABLE, sizeof( cl_bool ), &devAvailable, NULL ),
-		"Getting CL_DEVICE_AVAILABLE device info ( ::clGetDeviceInfo() )" );
-
-	cl_bool devCompAvailable = CL_FALSE;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_COMPILER_AVAILABLE, sizeof( cl_bool ), &devCompAvailable, NULL ),
-		"Getting CL_DEVICE_COMPILER_AVAILABLE device info ( ::clGetDeviceInfo() )" );
-
-	size_t devMaxWorkGroup	= 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof( size_t ), &devMaxWorkGroup, NULL ),
-		"Getting CL_DEVICE_MAX_WORK_GROUP_SIZE device info ( ::clGetDeviceInfo() )" );
-
-	cl_uint devMaxWorkItemDim = CL_FALSE;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof( cl_uint ), &devMaxWorkItemDim, NULL ),
-		"Getting CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS device info ( ::clGetDeviceInfo() )" );
-
-	std::vector< size_t >	devMaxWorkItemSizes( devMaxWorkItemDim );
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof( size_t )*devMaxWorkItemSizes.size( ), &devMaxWorkItemSizes[0], NULL),
-		"Getting CL_DEVICE_MAX_WORK_ITEM_SIZES device info ( ::clGetDeviceInfo() )" );
-
-	cl_bool deviceHostUnified = 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof( cl_bool ), &deviceHostUnified, NULL ),
-		"Getting CL_DEVICE_HOST_UNIFIED_MEMORY Platform Info string ( ::clGetDeviceInfo() )" );
-
-	cl_ulong devMaxConstantBuffer	= 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof( cl_ulong ), &devMaxConstantBuffer, NULL ),
-		"Getting CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE device info ( ::clGetDeviceInfo() )" );
-
-	cl_ulong devLocalMemSize	= 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_LOCAL_MEM_SIZE, sizeof( cl_ulong ), &devLocalMemSize, NULL ),
-		"Getting CL_DEVICE_LOCAL_MEM_SIZE device info ( ::clGetDeviceInfo() )" );
-
-	cl_ulong deviceGlobalMemSize = 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof( cl_ulong ), &deviceGlobalMemSize, NULL ),
-		"Getting CL_DEVICE_GLOBAL_MEM_SIZE device info ( ::clGetDeviceInfo() )" );
-
-	cl_ulong deviceMaxMemAllocSize = 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof( cl_ulong ), &deviceMaxMemAllocSize, NULL ),
-		"Getting CL_DEVICE_MAX_MEM_ALLOC_SIZE device info ( ::clGetDeviceInfo() )" );
-
-	size_t deviceExtSize	= 0;
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_EXTENSIONS, 0, NULL, &deviceExtSize ),
-		"Getting CL_DEVICE_EXTENSIONS Platform Info string size ( ::clGetDeviceInfo() )" );
-
-	std::vector< char > szDeviceExt( deviceExtSize );
-	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_EXTENSIONS, deviceExtSize, &szDeviceExt[ 0 ], NULL ),
-		"Getting CL_DEVICE_EXTENSIONS Platform Info string ( ::clGetDeviceInfo() )" );
-
-	const int indent = countOf( "    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: " );
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_NAME: " << &szDeviceName[ 0 ] << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_VERSION: " << &szDeviceVersion[ 0 ] << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DRIVER_VERSION: " << &szDriverVersion[ 0 ] << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_TYPE: "
-		<< (CL_DEVICE_TYPE_DEFAULT     & devType ? "default"     : "")
-		<< (CL_DEVICE_TYPE_CPU         & devType ? "CPU"         : "")
-		<< (CL_DEVICE_TYPE_GPU         & devType ? "GPU"         : "")
-		<< (CL_DEVICE_TYPE_ACCELERATOR & devType ? "Accelerator" : "")
-		<< std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_CLOCK_FREQUENCY: " << maxClockFreq << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_ADDRESS_BITS: " << devAddrBits << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_AVAILABLE: " << ( devAvailable ? "TRUE": "FALSE") << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_COMPILER_AVAILABLE: " << ( devCompAvailable ? "TRUE": "FALSE") << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_OPENCL_C_VERSION: " << &szOpenCLVersion[ 0 ] << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_WORK_GROUP_SIZE: " << devMaxWorkGroup << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: " << devMaxWorkItemDim << std::endl;
-	for( cl_uint wis = 0; wis < devMaxWorkItemSizes.size( ); ++wis )
-	{
-		std::stringstream dimString;
-		dimString << "Dimension[ " << wis << " ]  ";
-		std::cout << std::right << std::setw( indent ) << dimString.str( ) << devMaxWorkItemSizes[wis] << std::endl;
-	}
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_HOST_UNIFIED_MEMORY: " << ( deviceHostUnified ? "TRUE": "FALSE") << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: " << devMaxConstantBuffer;
-	std::cout << " ( " << devMaxConstantBuffer / 1024 << " KB )" << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_LOCAL_MEM_SIZE: " << devLocalMemSize;
-	std::cout << " ( " << devLocalMemSize / 1024 << " KB )" << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_GLOBAL_MEM_SIZE: " << deviceGlobalMemSize;
-	std::cout << " ( " << deviceGlobalMemSize / 1048576 << " MB )" << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_MEM_ALLOC_SIZE: " << deviceMaxMemAllocSize;
-	std::cout << " ( " << deviceMaxMemAllocSize / 1048576 << " MB )" << std::endl;
-	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_EXTENSIONS: " << &szDeviceExt[ 0 ] << std::endl;
-
-	std::cout << std::right << std::endl;
-}
-
-//	Verify a failed condition; return true on fail
-inline cl_bool OPENCL_V_FAIL( cl_int res )
-{
-	if( res == CL_SUCCESS )
-		return CL_FALSE;
-	else
-		return CL_TRUE;
-}
-
-std::string prettyPrintclFFTStatus( const cl_int& status )
-{
-	switch( status )
-	{
-		case CLFFT_INVALID_GLOBAL_WORK_SIZE:
-			return "CLFFT_INVALID_GLOBAL_WORK_SIZE";
-		case CLFFT_INVALID_MIP_LEVEL:
-			return "CLFFT_INVALID_MIP_LEVEL";
-		case CLFFT_INVALID_BUFFER_SIZE:
-			return "CLFFT_INVALID_BUFFER_SIZE";
-		case CLFFT_INVALID_GL_OBJECT:
-			return "CLFFT_INVALID_GL_OBJECT";
-		case CLFFT_INVALID_OPERATION:
-			return "CLFFT_INVALID_OPERATION";
-		case CLFFT_INVALID_EVENT:
-			return "CLFFT_INVALID_EVENT";
-		case CLFFT_INVALID_EVENT_WAIT_LIST:
-			return "CLFFT_INVALID_EVENT_WAIT_LIST";
-		case CLFFT_INVALID_GLOBAL_OFFSET:
-			return "CLFFT_INVALID_GLOBAL_OFFSET";
-		case CLFFT_INVALID_WORK_ITEM_SIZE:
-			return "CLFFT_INVALID_WORK_ITEM_SIZE";
-		case CLFFT_INVALID_WORK_GROUP_SIZE:
-			return "CLFFT_INVALID_WORK_GROUP_SIZE";
-		case CLFFT_INVALID_WORK_DIMENSION:
-			return "CLFFT_INVALID_WORK_DIMENSION";
-		case CLFFT_INVALID_KERNEL_ARGS:
-			return "CLFFT_INVALID_KERNEL_ARGS";
-		case CLFFT_INVALID_ARG_SIZE:
-			return "CLFFT_INVALID_ARG_SIZE";
-		case CLFFT_INVALID_ARG_VALUE:
-			return "CLFFT_INVALID_ARG_VALUE";
-		case CLFFT_INVALID_ARG_INDEX:
-			return "CLFFT_INVALID_ARG_INDEX";
-		case CLFFT_INVALID_KERNEL:
-			return "CLFFT_INVALID_KERNEL";
-		case CLFFT_INVALID_KERNEL_DEFINITION:
-			return "CLFFT_INVALID_KERNEL_DEFINITION";
-		case CLFFT_INVALID_KERNEL_NAME:
-			return "CLFFT_INVALID_KERNEL_NAME";
-		case CLFFT_INVALID_PROGRAM_EXECUTABLE:
-			return "CLFFT_INVALID_PROGRAM_EXECUTABLE";
-		case CLFFT_INVALID_PROGRAM:
-			return "CLFFT_INVALID_PROGRAM";
-		case CLFFT_INVALID_BUILD_OPTIONS:
-			return "CLFFT_INVALID_BUILD_OPTIONS";
-		case CLFFT_INVALID_BINARY:
-			return "CLFFT_INVALID_BINARY";
-		case CLFFT_INVALID_SAMPLER:
-			return "CLFFT_INVALID_SAMPLER";
-		case CLFFT_INVALID_IMAGE_SIZE:
-			return "CLFFT_INVALID_IMAGE_SIZE";
-		case CLFFT_INVALID_IMAGE_FORMAT_DESCRIPTOR:
-			return "CLFFT_INVALID_IMAGE_FORMAT_DESCRIPTOR";
-		case CLFFT_INVALID_MEM_OBJECT:
-			return "CLFFT_INVALID_MEM_OBJECT";
-		case CLFFT_INVALID_HOST_PTR:
-			return "CLFFT_INVALID_HOST_PTR";
-		case CLFFT_INVALID_COMMAND_QUEUE:
-			return "CLFFT_INVALID_COMMAND_QUEUE";
-		case CLFFT_INVALID_QUEUE_PROPERTIES:
-			return "CLFFT_INVALID_QUEUE_PROPERTIES";
-		case CLFFT_INVALID_CONTEXT:
-			return "CLFFT_INVALID_CONTEXT";
-		case CLFFT_INVALID_DEVICE:
-			return "CLFFT_INVALID_DEVICE";
-		case CLFFT_INVALID_PLATFORM:
-			return "CLFFT_INVALID_PLATFORM";
-		case CLFFT_INVALID_DEVICE_TYPE:
-			return "CLFFT_INVALID_DEVICE_TYPE";
-		case CLFFT_INVALID_VALUE:
-			return "CLFFT_INVALID_VALUE";
-		case CLFFT_MAP_FAILURE:
-			return "CLFFT_MAP_FAILURE";
-		case CLFFT_BUILD_PROGRAM_FAILURE:
-			return "CLFFT_BUILD_PROGRAM_FAILURE";
-		case CLFFT_IMAGE_FORMAT_NOT_SUPPORTED:
-			return "CLFFT_IMAGE_FORMAT_NOT_SUPPORTED";
-		case CLFFT_IMAGE_FORMAT_MISMATCH:
-			return "CLFFT_IMAGE_FORMAT_MISMATCH";
-		case CLFFT_MEM_COPY_OVERLAP:
-			return "CLFFT_MEM_COPY_OVERLAP";
-		case CLFFT_PROFILING_INFO_NOT_AVAILABLE:
-			return "CLFFT_PROFILING_INFO_NOT_AVAILABLE";
-		case CLFFT_OUT_OF_HOST_MEMORY:
-			return "CLFFT_OUT_OF_HOST_MEMORY";
-		case CLFFT_OUT_OF_RESOURCES:
-			return "CLFFT_OUT_OF_RESOURCES";
-		case CLFFT_MEM_OBJECT_ALLOCATION_FAILURE:
-			return "CLFFT_MEM_OBJECT_ALLOCATION_FAILURE";
-		case CLFFT_COMPILER_NOT_AVAILABLE:
-			return "CLFFT_COMPILER_NOT_AVAILABLE";
-		case CLFFT_DEVICE_NOT_AVAILABLE:
-			return "CLFFT_DEVICE_NOT_AVAILABLE";
-		case CLFFT_DEVICE_NOT_FOUND:
-			return "CLFFT_DEVICE_NOT_FOUND";
-		case CLFFT_SUCCESS:
-			return "CLFFT_SUCCESS";
-		case CLFFT_NOTIMPLEMENTED:
-			return "CLFFT_NOTIMPLEMENTED";
-		case CLFFT_FILE_NOT_FOUND:
-			return "CLFFT_FILE_NOT_FOUND";
-		case CLFFT_FILE_CREATE_FAILURE:
-			return "CLFFT_FILE_CREATE_FAILURE";
-		case CLFFT_VERSION_MISMATCH:
-			return "CLFFT_VERSION_MISMATCH";
-		case CLFFT_INVALID_PLAN:
-			return "CLFFT_INVALID_PLAN";
-		default:
-			return "Error code not defined";
-		break;
-	}
-}
-
-std::vector< cl_device_id > initializeCL( cl_device_type deviceType,
-										  cl_uint deviceGpuList,
-										  cl_context& context,
-										  bool printclInfo )
-{
-	cl_int status = 0;
-
-	/*
-		* Have a look at the available platforms and pick either
-		* the AMD one if available or a reasonable default.
-		*/
-
-	cl_uint numPlatforms	= 0;
-	cl_platform_id platform = NULL;
-	OPENCL_V_THROW( ::clGetPlatformIDs( 0, NULL, &numPlatforms ),
-			"Getting number of platforms( ::clGetPlatformsIDs() )" );
-
-	if( numPlatforms > 0 )
-	{
-		std::vector< cl_platform_id > platforms( numPlatforms );
-		OPENCL_V_THROW( ::clGetPlatformIDs( numPlatforms, &platforms[ 0 ], NULL ),
-			"Getting Platform Id's ( ::clGetPlatformsIDs() )" );
-
-		//	TODO: How should we determine what platform to choose?  We are just defaulting to the last one reported, as we
-		//	print out the info
-		for( unsigned int i=0; i < numPlatforms; ++i )
-		{
-			if( printclInfo )
-			{
-				std::cout << "OpenCL platform [ " << i << " ]:" << std::endl;
-				prettyPrintPlatformInfo( platforms[i] );
-			}
-
-			platform = platforms[i];
-		}
-	}
-
-	if( NULL == platform )
-	{
-		throw std::runtime_error( "No appropriate OpenCL platform could be found" );
-	}
-
-	/*
-	 * If we could find our platform, use it. Otherwise use just available platform.
-	 */
-
-	//	Get the device list for this type.
-	//
-	cl_uint num_devices = 0;
-	OPENCL_V_THROW( ::clGetDeviceIDs( platform, deviceType, 0, NULL, &num_devices ),
-		"Getting OpenCL devices ( ::clGetDeviceIDs() )" );
-	if( 0 == num_devices )
-	{
-		OPENCL_V_THROW( CLFFT_DEVICE_NOT_AVAILABLE, "No devices available");
-	}
-
-	std::vector< cl_device_id > deviceIDs( num_devices );
-	OPENCL_V_THROW( ::clGetDeviceIDs( platform, deviceType, num_devices, &deviceIDs[0], NULL),
-		"Getting OpenCL deviceIDs ( ::clGetDeviceIDs() )" );
-
-	if( (CL_DEVICE_TYPE_GPU == deviceType) && (~cl_uint(0) != deviceGpuList) )
-	{
-		//	The command line options specify to user certain gpu(s)
-		//
-		for( unsigned u = (unsigned) deviceIDs.size(); u-- > 0; )
-		{
-			if( 0 != (deviceGpuList & (1<<u) ) )
-				continue;
-
-			//  Remove this GPU from the list
-			deviceIDs[u] = deviceIDs.back();
-			deviceIDs.pop_back();
-		}
-	}
-
-	if( 0 == deviceIDs.size( ) )
-	{
-		OPENCL_V_THROW( CLFFT_DEVICE_NOT_AVAILABLE, "No devices available");
-	}
-
-	cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform, 0 };
-
-	/////////////////////////////////////////////////////////////////
-	// Create an OpenCL context
-	/////////////////////////////////////////////////////////////////
-	context = clCreateContext( cps,
-							   (cl_uint) deviceIDs.size(),
-							   & deviceIDs[0],
-							   NULL,
-							   NULL,
-							   &status);
-	OPENCL_V_THROW( status, "Creating Context ( ::clCreateContextFromType() )" );
-
-	/* First, get the size of device list data */
-	size_t deviceListSize;
-	OPENCL_V_THROW( ::clGetContextInfo( context, CL_CONTEXT_DEVICES, 0, NULL, &deviceListSize ),
-		"Getting device array size ( ::clGetContextInfo() )" );
-
-	/////////////////////////////////////////////////////////////////
-	// Detect OpenCL devices
-	/////////////////////////////////////////////////////////////////
-	std::vector< cl_device_id > devices( deviceListSize/sizeof( cl_device_id ) );
-
-	/* Now, get the device list data */
-	OPENCL_V_THROW( ::clGetContextInfo( context, CL_CONTEXT_DEVICES, deviceListSize, &devices[ 0 ], NULL ),
-		"Getting device array ( ::clGetContextInfo() )" );
-
-	if( printclInfo )
-	{
-		cl_uint cContextDevices	= 0;
-		
-		size_t deviceVersionSize	= 0;
-		OPENCL_V_THROW( ::clGetDeviceInfo( devices[0], CL_DEVICE_VERSION, 0, NULL, &deviceVersionSize ),
-			"Getting CL_DEVICE_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
-
-		std::vector< char > szDeviceVersion( deviceVersionSize );
-		OPENCL_V_THROW( ::clGetDeviceInfo( devices[0], CL_DEVICE_VERSION, deviceVersionSize, &szDeviceVersion[ 0 ], NULL ),
-			"Getting CL_DEVICE_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
-	
-		char openclstr[11]="OpenCL 1.0";
-
-		if (!strncmp((const char*)&szDeviceVersion[ 0 ], openclstr, 10))
-		{
-			cContextDevices	= 1;
-		}
-		else
-		{
-			OPENCL_V_THROW( ::clGetContextInfo( context, CL_CONTEXT_NUM_DEVICES, sizeof( cContextDevices ), &cContextDevices, NULL ),
-				"Getting number of context devices ( ::clGetContextInfo() )" );
-		}
-
-		for( cl_uint i = 0; i < cContextDevices; ++i )
-		{
-			std::cout << "OpenCL devices [ " << i << " ]:" << std::endl;
-			prettyPrintDeviceInfo( devices[i] );
-		}
-	}
-
-	return devices;
-}
-
-int cleanupCL( cl_context* context, cl_command_queue* commandQueue,
-	const cl_uint numBuffersIn, cl_mem inputBuffer[], const cl_uint numBuffersOut, cl_mem outputBuffer[], cl_event* outEvent )
-{
-	if( *outEvent != NULL )
-		OPENCL_V_THROW( clReleaseEvent( *outEvent ), "Error: In clReleaseEvent\n" );
-
-	releaseOpenCLMemBuffer( numBuffersIn, inputBuffer);
-	releaseOpenCLMemBuffer( numBuffersOut, outputBuffer);
-
-	if( *commandQueue != NULL )
-		OPENCL_V_THROW( clReleaseCommandQueue( *commandQueue ), "Error: In clReleaseCommandQueue\n" );
-
-	if( *context != NULL )
-		OPENCL_V_THROW( clReleaseContext( *context ), "Error: In clReleaseContext\n" );
-
-	return 0;
-}
-
-int createOpenCLMemoryBuffer( cl_context& context, const size_t bufferSizeBytes, const cl_uint numBuffers, cl_mem buffer[], cl_mem_flags accessibility) {
-	cl_int status = 0;
-
-	for( cl_uint i = 0; i < numBuffers; ++i )
-	{
-		buffer[ i ] = ::clCreateBuffer( context, accessibility, bufferSizeBytes, NULL, &status);
-		OPENCL_V_THROW( status, "Creating Buffer ( ::clCreateBuffer() )" );
-	}
-
-	return 0;
-}
-
-int releaseOpenCLMemBuffer( const cl_uint numBuffers, cl_mem buffer[])
-{
-	for( cl_uint i = 0; i < numBuffers; ++i )
-	{
-		if( buffer[ i ] != NULL )
-			OPENCL_V_THROW( clReleaseMemObject( buffer[ i ] ), "Error: In clReleaseMemObject\n" );
-	}
-
-	return 0;
-}
-
-void createOpenCLCommandQueue( cl_context& context,
-							   cl_uint commandQueueFlags,
-							   cl_command_queue& commandQueue,
-							   std::vector< cl_device_id > devices,
-							   const size_t bufferSizeBytesIn,
-							   const cl_uint numBuffersIn,
-							   cl_mem clMemBufferIn[],
-							   const size_t bufferSizeBytesOut,
-							   const cl_uint numBuffersOut,
-							   cl_mem clMemBufferOut[] )
-{
-	cl_int status = 0;
-	commandQueue = ::clCreateCommandQueue( context, devices[0], commandQueueFlags, &status );
-	OPENCL_V_THROW( status, "Creating Command Queue ( ::clCreateCommandQueue() )" );
-
-	createOpenCLMemoryBuffer( context, bufferSizeBytesIn,  numBuffersIn,  clMemBufferIn,  CL_MEM_READ_WRITE);
-	createOpenCLMemoryBuffer( context, bufferSizeBytesOut, numBuffersOut, clMemBufferOut, CL_MEM_READ_WRITE);
-}
-
diff --git a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.openCL.h b/RTCP/Cobalt/clAmdFft/samples/clAmdFft.openCL.h
deleted file mode 100644
index cb82e024b7ac0d442e42d5d6eac645f0b3fbf408..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/clAmdFft.openCL.h
+++ /dev/null
@@ -1,97 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-#pragma once
-#if !defined( AMD_OPENCL_H )
-#define AMD_OPENCL_H
-#include <memory>
-#include <stdexcept>
-#include "amd-unicode.h"
-
-//	Creating a portable defintion of countof
-#if defined( _WIN32 )
-	#define countOf _countof
-#else
-	#define countOf( arr ) ( sizeof( arr ) / sizeof( arr[ 0 ] ) )
-#endif
-
-/*
- * \brief OpenCL related initialization (ripped from AMD stream sample code )
- *        Create Context, Device list
- *        Load CL file, compile, link CL source 
- *		  Build program and kernel objects
- */
-std::vector< cl_device_id > initializeCL( cl_device_type deviceType,
-										  cl_uint deviceGpuList,
-										  cl_context& context,
-										  bool printclInfo );
-
-/*
- * \brief OpenCL memory buffer creation
- */
-int createOpenCLMemoryBuffer(
-		cl_context& context,
-		const size_t bufferSizeBytes,
-		const cl_uint numBuffers,
-		cl_mem buffer[],
-		cl_mem_flags accessibility
-		);
-
-/*
- * \brief OpenCL command queue creation (ripped from AMD stream sample code )
- *        Create Command Queue
- *        Create OpenCL memory buffer objects
- */
-void createOpenCLCommandQueue( cl_context& context,
-							   cl_uint commandQueueFlags,
-							   cl_command_queue& commandQueue,
-							   std::vector< cl_device_id > devices,
-							   const size_t bufferSizeBytesIn,
-							   const cl_uint numBuffersIn,
-							   cl_mem clMemBufferIn[],
-							   const size_t bufferSizeBytesOut,
-							   const cl_uint numBuffersOut,
-							   cl_mem clMemBufferOut[] );
-
-/*
- * \brief release OpenCL memory buffer
- */
-int releaseOpenCLMemBuffer( const cl_uint numBuffers, cl_mem buffer[] );
-
-std::string prettyPrintclFFTStatus( const cl_int& status );
-
-//	This is used to either wrap an OpenCL function call, or to explicitly check a variable for an OpenCL error condition.
-//	If an error occurs, we throw.  
-//	Note: std::runtime_error does not take unicode strings as input, so only strings supported
-inline cl_int OpenCL_V_Throw ( cl_int res, const std::string& msg, size_t lineno )
-{ 
-	switch( res )
-	{
-		case	CL_SUCCESS:		/**< No error */
-			break;
-		default:
-		{
-			std::stringstream tmp;
-			tmp << "OPENCL_V_THROWERROR< ";
-			tmp << prettyPrintclFFTStatus( res );
-			tmp << " > (";
-			tmp << lineno;
-			tmp << "): ";
-			tmp << msg;
-			std::string errorm (tmp.str());
-			std::cout << errorm<< std::endl;
-			throw	std::runtime_error( errorm );
-		}
-	}
-
-	return	res;
-}
-#define OPENCL_V_THROW(_status,_message) OpenCL_V_Throw (_status, _message, __LINE__)
-
-/*
- * \brief Release OpenCL resources (Context, Memory etc.) (ripped from AMD stream sample code )
- */
-int cleanupCL( cl_context* context, cl_command_queue* commandQueue, const cl_uint numBuffersIn, cl_mem inputBuffer[], const cl_uint numBuffersOut, cl_mem outputBuffer[], cl_event* outEvent );
-
-#endif
diff --git a/RTCP/Cobalt/clAmdFft/samples/clMemcpy.cpp b/RTCP/Cobalt/clAmdFft/samples/clMemcpy.cpp
deleted file mode 100644
index a1c63fa57807ebffb40a785d18b8caac7010d73b..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/clMemcpy.cpp
+++ /dev/null
@@ -1,998 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-// clAmdFft.clMemcpy.cpp : OpenCL memory copy kernel generator
-//
-//
-//
-////////////////////////////////////////////////////////////////////////////////
-
-//	TODO: Add 2d/tiled memory copies.
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <CL/opencl.h>
-#include <iostream>
-#include <vector>
-#include <time.h>
-
-#include <sstream>
-#include <string>
-using std::stringstream;
-
-#include <boost/program_options.hpp>
-namespace po = boost::program_options;
-
-//#include "../statTimer/clAmdFft.statisticalTimer.extern.h"
-//#include "../include/clAmdFft.sharedLibrary.h"
-
-#include "../../../common/statisticalTimer.h"
-
-#include "../../../common/amd-unicode.h"
-
-class clDataType{
-public:
-	virtual bool setSize(size_t size) = 0; // set size
-	virtual size_t getSize() = 0;		// size in bytes
-	virtual size_t getTypeSize() = 0;	// size of base type in bytes
-	virtual std::string getName() = 0;	// get cl type name
-};
-
-class clFloat:public clDataType{
-public:
-
-	clFloat()
-	{
-		clSize = 2;
-	}
-
-	size_t getSize()
-	{
-		return clSize * sizeof(float);
-	}
-
-	size_t getTypeSize()
-	{
-		return sizeof(float);
-	}
-
-	std::string getName()
-	{
-		std::stringstream name;
-		name << "float";
-		if(clSize > 1)
-		{
-			name << clSize;
-		}
-
-		std::string ret = name.str().c_str();
-		return ret;
-	}
-
-	bool setSize(size_t size)
-	{
-		if(size < 0 || size > 16 || (size & (size - 1)) )
-		{
-			return false;
-		}
-		else
-		{
-			clSize = size;
-			return true;
-		}
-	}
-	// The null kernel generator has its own special set of paramters
-
-private:
-	size_t clSize;
-};
-
-class clDouble:public clDataType{
-public:
-
-	clDouble()
-	{
-		clSize = 1;
-	}
-
-	size_t getSize()
-	{
-		return clSize * sizeof(double);
-	}
-
-	size_t getTypeSize()
-	{
-		return sizeof(double);
-	}
-
-	std::string getName()
-	{
-		std::stringstream name;
-		name << "double";
-		if(clSize > 1)
-		{
-			name << clSize;
-		}
-		
-		std::string ret = name.str().c_str();
-		return ret;
-	}
-
-	bool setSize(size_t size)
-	{
-		if(size < 0 || size > 4 || (size & (size - 1)))
-		{
-			return false;
-		}
-		else
-		{
-			clSize = size;
-			return true;
-		}
-	}
-	// The null kernel generator has its own special set of paramters
-
-private:
-	size_t clSize;
-};
-
-// This is a helper function to query a device for it's caps and check whether a certain user supplied cap is present
-// stolen from the clAmdRuntime library
-bool checkDevExt( std::string cap, std::vector< cl_device_id >& devices )
-{
-	for( size_t d = 0; d < devices.size( ); ++d)
-	{
-		size_t deviceExtSize	= 0;
-		 ::clGetDeviceInfo( devices[ d ], CL_DEVICE_EXTENSIONS, 0, NULL, &deviceExtSize ),
-			"Getting CL_DEVICE_EXTENSIONS Platform Info string size ( ::clGetDeviceInfo() )";
-
-		std::vector< char > szDeviceExt( deviceExtSize );
-		::clGetDeviceInfo( devices[ d ], CL_DEVICE_EXTENSIONS, deviceExtSize, &szDeviceExt[ 0 ], NULL ),
-			"Getting CL_DEVICE_EXTENSIONS Platform Info string ( ::clGetDeviceInfo() )";
-
-		std::string strDeviceExt = &szDeviceExt[ 0 ];
-
-		if( strDeviceExt.find( cap.c_str( ), 0 ) == std::string::npos )
-			return 0;
-	}
-
-	return true;
-}
-
-#define INDENT "    "
-
-// memcpy kernel generator, very simple
-//
- void GenerateMemcpyKernel (stringstream &ssn, const int registerCount, const int dumbyRegisterCount, const int workGroupSize , clDataType * clType,  const bool useBarrier, int ldsPasses, const int dataItemCount, const int writeOnly, const int readOnly, const int memcpyOnly, const bool supportDoublePrecision)
-{
-// kernel generator - dumb
-
-	//std::stringstream ssn         (std::stringstream::out);
-	static const bool first_choice = true;
-
-	ssn << "//------------------------------\n"
-	     "// !!!!!NULL Memcopy KERNEL!!!!\n\n";
-
-	// include double precision support
-	
-	if(supportDoublePrecision)
-	{
-		ssn<< "\n#pragma OPENCL EXTENSION cl_amd_fp64 : enable\n\n";
-	}
-
-	// set the workgroup size to our specification, this will effect the number of wavefronts used	
-	ssn << "__attribute__((reqd_work_group_size(" << workGroupSize << ",1,1)))\n"
-		<< "__kernel void\n"
-		<< "memcpy" << "(\n";
-
-
-// basically do inplace memcopy unless memcpyOnly is true, then do out of place
-
-	if(!memcpyOnly)
-	{
-		ssn << INDENT "__global " << clType->getName() << " *gcomplx\n";
-		ssn << ")\n{\n";
-	}
-	else
-	{
-		ssn << INDENT "__global const " << clType->getName() << " *in,\n";
-		ssn << INDENT "__global " << clType->getName() << " *out\n";
-		ssn << ")\n{\n";
-
-		// a strict memcopy kernel does not require much, just code it here and return
-
-		ssn << INDENT "int gid = get_global_id(0);\n";
-		ssn << INDENT "out[gid] = in[gid];\n";
-		ssn << INDENT "return;";
-		ssn << "\n}\n";
-
-		return;
-	}
-
-	
-	// create registers for kernel to use for memcopies
-	ssn << "\n" << clType->getName() << " R0";
-	for(int i = 1; i < registerCount + dumbyRegisterCount; i++)
-	{
-		ssn << ",R" << i;
-	}
-
-	ssn << ";\n";
-
-	// identifiers for local work item and global group id
-	ssn << "\nuint me = get_local_id(0);";
-	ssn << "\nuint batch = get_group_id(0);";
-
-	ssn << "\nglobal ";
-	
-	// if read only kernel use const to disable read caching
-	if(writeOnly)
-	{
-	ssn << "const ";
-	}
-		
-	ssn << clType->getName() << "* gpc = gcomplx + me * " <<  registerCount << " + batch * " << registerCount * workGroupSize << ";";
-	
-	if(ldsPasses > 0)
-	{
-		// allocate LDS
-		ssn << "\n__local " << clType->getName() << " ldsBuff[" << registerCount * workGroupSize << "];";
-		ssn << "\n__local " << clType->getName() << "* lds = ldsBuff + me * " << registerCount << ";";
-	}
-	
-	ssn << "\n";
-
-	// If write only kernel, don't read back regs to global memory
-	if(writeOnly || !readOnly)
-	{
-		// copy data from Global Memory to regs
-		for(int i = 0; i < registerCount; i++)
-		{
-			ssn << "\nR" << i << "= gpc[" << i << "];";
-		}
-	}
-
-	ssn << "\n";
-
-	// make number of LDS passes specified, copy from regs to lds back to regs
-	for(int j = 0; j < ldsPasses; j++) 
-	{
-
-		// copy data from regs to LDS
-		for(int i = 0; i < registerCount; i++)
-		{
-			
-			ssn << "\nlds[" << i << "] = R" << i << ";";
-		}
-
-		ssn << "\n";
-	
-		// insert memory barrier
-		if(useBarrier == true)
-		{
-			ssn << "\nbarrier(CLK_LOCAL_MEM_FENCE);\n";
-		}
-
-		// copy data from LDS back to regs
-		for(int i = 0; i < registerCount; i++)
-		{
-			ssn << "\nR" << i << " = lds[" << (registerCount -1 ) - i << "];";
-		}
-
-		ssn << "\n";
-
-	}
-	
-	// if dumby registers are specified, just assign a value to them
-	// do some math
-	int rIndex = 0;
-	for(int i = registerCount; i < registerCount + dumbyRegisterCount; i++)
-	{
-		if( i == registerCount)
-		{
-			ssn << "\nR" << i << " = R0 * 3.1459;";
-	//		ssn << "\nR0 = R" << i << ";";  // write results to R0 to kee it from being optimized out
-		}
-		else
-		{
-			ssn << "\nR" << i << " = R" << i <<" + R" << i - 1 << " * 3.1459;";
-		}
-	
-		ssn << "\nR" << rIndex <<" = R" << i << ";";
-		rIndex ++;
-		if(rIndex >= registerCount)
-		{
-			rIndex = 0;
-		}
-	}
-
-	ssn << "\n";
-
-	// if readonly or not a writeonly kernel copy registers back to global memory
-	if(readOnly || !writeOnly)
-	{
-		for(int i = 0; i < registerCount; i++)
-		{
-			ssn << "\ngpc[" << i << "] = R" << i << ";";
-		}
-	}
-	ssn << "\n}\n";
-}
-
-// http://cottonvibes.blogspot.com/2011/01/dynamically-allocate-aligned-memory.html
-// Alignment must be power of 2 (1,2,4,8,16...2^15)
-void* aligned_malloc(size_t size, size_t alignment) {
-    assert(alignment <= 0x8000);
-    uintptr_t r = (uintptr_t)malloc(size + --alignment + 2);
-    uintptr_t o = (r + 2 + alignment) & ~(uintptr_t)alignment;
-    if (!r) return NULL;
-    ((uint16_t*)o)[-1] = (uint16_t)(o-r);
-    return (void*)o;
-}
- 
-void aligned_free(void* p) {
-    if (!p) return;
-    free((void*)((uintptr_t)p-((uint16_t*)p)[-1]));
-}
-
-
-int main(int argc, char** argv)
-{
-    int err;                            // error code returned from api calls
-
-    size_t global;                      // global domain size for our calculation
-    size_t local;                       // local domain size for our calculation
-	cl_platform_id platform;
-    cl_device_id device_id;             // compute device id 
-	cl_uint platforms;
-    cl_context context;                 // compute context
-    cl_command_queue commands;          // compute command queue
-    cl_program program;                 // compute program
-    cl_kernel kernel;                   // compute kernel
-    
-    cl_mem input;                       // device memory used for the input array
-	cl_mem output;                      // device memory used for the output array for strict memcopy kernel
-
-	cl_device_type deviceType = CL_DEVICE_TYPE_GPU; // make the GPU the default device type
-    
-    int workgroupSize = 0;		 // workgroup size / number of work items per wavefront
-	int registerCount = 16;		 // registers allocated in kernels for memcopy operations
-	int dumbyRegisterCount = 16; // registers allocated, but not used for memcopies
-	int dataItemCount = 0;		 // total number of items (type float,float2,4) to copy to/from OpenCL device
-	int dataItemCountEnd = 0;		 // total number of items (type float,float2,4) to copy to/from OpenCL device
-	int ldsPasses = 1;			 // number of 'passes' copying data to/from LDS
-	clDataType * clType; 			 // default float type to use
-	bool useBarrier = true;			// include memory barrier in kernels
-	bool memcpyOnly = false;	// if true, creates strict memcopy kernels, not registers allocated (in CL code)
-	bool writeOnly = false;		// only perform write operations
-	bool readOnly = false;		// only perform read operations.
-	bool bDisableOptimization = false; // disable OpenCL compiler optimizations if true
-	bool bDoublePrecision = false;
-	bool bZeroMemcopy = false;	// if true, host memory is used by GPU
-
-	cl_ulong start = 0; // profiling start and end times
-	cl_ulong end = 0;
-
-	clFloat lFloat;
-	clDouble lDouble;
-	clType =  &lFloat; // float is default
-
-	try
-	{
-		// Declare the supported options.
-		po::options_description desc( "clMemcpy client command line options" );
-		desc.add_options()
-			( "help,h",			"produces this help message" )
-			( "version,v",		"Print out build date/version" )
-			( "gpu,g",			"Force instantiation of an OpenCL GPU device" )
-			( "cpu,c",			"Force instantiation of an OpenCL CPU device" )
-			( "float,f",		po::value< int >(), "Float type to use in kernels, 1,2,4,8,16 (default: float2)" )
-			( "double,d",		po::value< int >(), "Use double type to use in kernels, 1,2,4 (default: double 1)" )
-			( "regs,r",			po::value< int >( &registerCount )->default_value( 16 ),	"Specify number of registers to use in kernels (default: 16)" )
-			( "dumbyRegs,q",	po::value< int >( &dumbyRegisterCount )->default_value( 0 ),	"Specify number 'dumby registers' to allocate in kernels" )
-			( "memcpyOnly,m",   "Generate strict memcopy kernel (default: false)" )
-			( "itemCount,i",	po::value< int >( &dataItemCount )->default_value( 0 ), "Number of items to transfer (default: max allocatable)" )
-			( "itemCountEnd,j",	po::value< int >( &dataItemCountEnd )->default_value( 0 ), "End of item count, start at i go to j in powers of 2." )
-			( "ldsPasses,l",	po::value< int >( &ldsPasses )->default_value( 1 ), "Number of 'passes' using LDS (default: 1, 0 = no LDS used)" )
-			( "barrier,b",      po::value< bool >( &useBarrier )->default_value( true ), "Include memory barrier in kernel" )
-			( "writeOnly,x",      "Write only kernels (default:  false)" )
-			( "readOnly,y",       "Read only kernels (default: false" )
-			( "disableOptimization,n",       "Disable OpenCL compiler optimizations (default: false" )
-			( "zeroMemcopy,z",       "Use zero memcopy kernels, only valid on APUs (default 0)" )
-			( "workgroupSize,w",	po::value< int >( &workgroupSize )->default_value( 64 ), "Workgroup size (default 64)" )
-			;
-
-		po::variables_map vm;
-		po::store( po::parse_command_line( argc, argv, desc ), vm );
-		po::notify( vm );
-
-		stringstream str;
-
-		if( vm.count( "version" ) )
-		{
-			str << "clMemcopy version: " << __DATE__ << " " << __TIME__ <<std::endl;
-			std::cout << str.str();
-			str.str() = "";
-			return 0;
-		}
-
-		if( vm.count( "help" ) )
-		{
-			//	This needs to be 'cout' as program-options does not support wcout yet
-			std::cout << desc << std::endl;
-			return 0;
-		}
-
-		size_t mutex = ((vm.count( "gpu" ) > 0) ? 1 : 0)
-			| ((vm.count( "cpu" ) > 0) ? 2 : 0);
-		if ((mutex & (mutex-1)) != 0) {
-			str << "You have selected mutually-exclusive OpenCL device options:" << std::endl;
-			if (vm.count ( "gpu" )  > 0) str << "    gpu,g   Force instantiation of an OpenCL GPU device" << std::endl;
-			if (vm.count ( "cpu" )  > 0) str << "    cpu,c   Force instantiation of an OpenCL CPU device" << std::endl;
-			{	
-				std::cout << str.str();
-				return 1;
-			}
-		}
-
-		mutex = ((vm.count( "writeOnly" ) > 0) ? 1 : 0)
-			| ((vm.count( "readOnly" ) > 0) ? 2 : 0);
-		if ((mutex & (mutex-1)) != 0) {
-			str << "You have selected mutually-exclusive OpenCL device options:" << std::endl;
-			if (vm.count ( "writeOnly" )  > 0) str << "    writeOnly,x   Generate write only kernels" << std::endl;
-			if (vm.count ( "readOnly" )  > 0) str << "    readOnly,y   Generate read only kernels" << std::endl;
-			{	
-				std::cout << str.str();
-				return 1;
-			}
-		}
-
-		if( vm.count( "gpu" ) )
-		{
-			deviceType	= CL_DEVICE_TYPE_GPU;
-		}
-		
-		if( vm.count( "cpu" ) )
-		{
-			deviceType	= CL_DEVICE_TYPE_CPU;
-		}
-
-		if( vm.count( "writeOnly" ) )
-		{
-			writeOnly = true;
-		}
-		
-		if( vm.count( "readOnly" ) )
-		{
-			readOnly = true;
-		}
-
-		if( vm.count( "zeroMemcopy" ) )
-		{
-			bZeroMemcopy = true;
-		}
-
-		int typeCount = 0;
-
-		if( vm.count( "float" ) )
-		{
-			if(!clType->setSize(vm["float"].as<int>()))
-			{
-				std::cout << "Float (float,-f) type must be 1,2,4,8, or 16.";
-				return 1;
-			}
-			typeCount ++;
-		}
-
-		if( vm.count( "double" ) )
-		{
-			clType =  &lDouble;
-			if(!clType->setSize(vm["double"].as<int>()))
-			{
-				std::cout << "Double (double,-d) type must be 1, or 2.";
-				return 1;
-			}
-			bDoublePrecision = true;
-			typeCount ++;
-		}
-
-		if(typeCount > 1)
-		{
-			std::cout << "Only one register type may be specified (Float,Double).";
-			return 1;
-		}
-
-		if( vm.count( "memcpyOnly" ) )
-		{
-			memcpyOnly = true;
-			registerCount = 1;
-		}
-
-		if( vm.count( "disableOptimization" ) )
-		{
-			bDisableOptimization = true;
-		}
-
-		if(workgroupSize < 1)
-		{
-			printf("Error: workgroup size can not be 0");
-			return 1;
-		}
-
-		// if the register count is < 1, it's a pure memcpy kernel
-		if(registerCount < 1)
-		{
-			registerCount = 1;
-			memcpyOnly = true;
-		}
-
-	}
-	catch( std::exception& e )
-	{
-		std::cout << "clMemcopy error condition reported:" << std::endl << e.what() << std::endl;
-		return 1;
-	}
-
-	// enumerate platforms to see if anything is available.
-	//
-	err=clGetPlatformIDs(1, &platform, &platforms);
-	if (err != CL_SUCCESS)
-    {
-        printf("Error: Failed to get a platform.!\n");
-        return EXIT_FAILURE;
-    }
-  
-    // Connect to a compute device
-    //
-    err = clGetDeviceIDs(platform, deviceType, 1, &device_id, NULL);
-    if (err != CL_SUCCESS)
-    {
-        printf("Error: Failed to create a device group!\n");
-        return EXIT_FAILURE;
-    }
-  
-    // Create a compute context 
-    //
-    context = clCreateContext(0, 1, &device_id, NULL, NULL, &err);
-    if (!context)
-    {
-        printf("Error: Failed to create a compute context!\n");
-        return EXIT_FAILURE;
-    }
-
-    // Create a command commands
-    //
-    commands = clCreateCommandQueue(context, device_id, CL_QUEUE_PROFILING_ENABLE, &err);
-    if (!commands)
-    {
-        printf("Error: Failed to create a command commands!\n");
-        return EXIT_FAILURE;
-    }
-
-	// find how much global memory can safely be allocated
-	//
-	cl_ulong maxMemAlloc = 0;
-	err = clGetDeviceInfo(device_id, CL_DEVICE_MAX_MEM_ALLOC_SIZE,sizeof(cl_ulong), &maxMemAlloc, NULL);
-	
-	if (err != CL_SUCCESS)
-    {
-        printf("Error: Failed to read MAX_MEM_ALLOC_SIZE from device!\n");
-        return EXIT_FAILURE;
-    }
-
-	// find how much local memory can safely be allocated
-	//
-	cl_ulong maxLocalMemAlloc = 0;
-	err = clGetDeviceInfo(device_id, CL_DEVICE_LOCAL_MEM_SIZE,sizeof(cl_ulong), &maxLocalMemAlloc, NULL);
-	
-	if (err != CL_SUCCESS)
-    {
-        printf("Error: Failed to read CL_DEVICE_LOCAL_MEM_SIZE from device!\n");
-        return EXIT_FAILURE;
-    }
-	
-	// check if double precision is supported
-	//	If the user specifies double precision, check that the device supports double precision first
-	if( bDoublePrecision )
-	{
-		std::vector< cl_device_id > dev;
-		dev.push_back(device_id);
-
-		bool retAmdFp64 = checkDevExt( "cl_amd_fp64", dev );
-		if( retAmdFp64 != true )
-		{
-			//	If AMD's extention is not supported, check for Khronos extention
-			bool retKhrFp64 = checkDevExt( "cl_khr_fp64", dev );
-			if( retKhrFp64 != true )
-			{
-				 printf("Error: Device %d does not support double precission\n", device_id);
-				return EXIT_FAILURE;
-			}
-		}
-	}
-
-	
-	do
-	{
-
-		// generate a kernel
-		//
-		stringstream kernelSource;
-
-		GenerateMemcpyKernel(kernelSource, registerCount, dumbyRegisterCount, workgroupSize, clType, useBarrier, ldsPasses, dataItemCount, writeOnly, readOnly, memcpyOnly, bDoublePrecision);
-	
-		if( !dataItemCountEnd ) // 
-		{	
-			printf("\n%s\n", kernelSource.str().c_str());
-		}
-		// calculate how many data items we want to move, float1,2,4
-		//
-		if(dataItemCount == 0)
-		{
-			if( memcpyOnly )
-			{
-				maxMemAlloc /= 2;  // need two buffers
-			}
-			dataItemCount = (int)(maxMemAlloc / (clType->getSize()));
-			dataItemCount /= registerCount * workgroupSize;
-			dataItemCount *= registerCount * workgroupSize;
-		}
-	
-
-		// Fill our data set with random float values
-		//
-    
-		void* data = aligned_malloc(clType->getSize() * dataItemCount, 256);              // original data set given to device
-		if(data == NULL)
-		{
-			printf("Error: Failed allcating host data buffer!\n");
-			return EXIT_FAILURE;
-		}
-
-		srand ( (unsigned int) time(NULL) );
-		for(int i = 0; i < dataItemCount * clType->getSize(); i++)
-		{  
-			*((char *)data + i) = rand() / (char)RAND_MAX;
-		}
-
-		// Create the compute program from the source buffer
-		//
-		std::string stringKern = kernelSource.str();
-		const char *charKern = stringKern.c_str();
-		program = clCreateProgramWithSource(context, 1, (const char **) &charKern, NULL, &err);
-		if (!program)
-		{
-			printf("Error: Failed to create compute program!\n");
-			return EXIT_FAILURE;
-		}
-
-		// Build the program executable
-		//
-		if(bDisableOptimization)
-		{
-			err = clBuildProgram(program, 0, NULL, "-g -cl-opt-disable", NULL, NULL);
-		}
-		else
-		{
-			err = clBuildProgram(program, 0, NULL, NULL, NULL, NULL);
-		}
-
-		if (err != CL_SUCCESS)
-		{
-			size_t len;
-			char buffer[2048];
-
-			printf("Error: Failed to build program executable!\n");
-			clGetProgramBuildInfo(program, device_id, CL_PROGRAM_BUILD_LOG, sizeof(buffer), buffer, &len);
-			printf("%s\n", buffer);
-			exit(1);
-		}
-
-		// Create the compute kernel in the program we wish to run
-		//
-		kernel = clCreateKernel(program, "memcpy", &err);
-		if (!kernel || err != CL_SUCCESS)
-		{
-			printf("Error: Failed to create compute kernel!\n");
-			exit(1);
-		}
-		/*
-		//	Discover and load the timer module if present
-		void* timerLibHandle = LoadSharedLibrary( "lib", "clAmdFft.StatTimer", false );
-		if( timerLibHandle == NULL )
-		{
-			terr << _T( "Could not find the external timing library; timings disabled" ) << std::endl;
-		}
-
-	
-		//	Timer module discovered and loaded successfully
-		//	Initialize function pointers to call into the shared module
-		PFGETSTATTIMER get_timer = reinterpret_cast< PFGETSTATTIMER > ( LoadFunctionAddr( timerLibHandle, "getStatTimer" ) );
-
-		//	Create and initialize our timer class, if the external timer shared library loaded
-		baseStatTimer* timer = NULL;
-		*/
-		size_t	writeTimer,readTimer,executeTimer = 0;
-		StatisticalTimer &timer = StatisticalTimer::getInstance();
-	
-
-	
-		//	timer->setNormalize( true );
-			timer.Reserve( 3, 1 );
-
-			writeTimer	= timer.getUniqueID( "write", 0 );
-			readTimer	= timer.getUniqueID( "read", 1 );
-			executeTimer	= timer.getUniqueID( "execute", 2);
-		
-	
-		// Create the input and output arrays in device memory for our calculation
-		//
-
-		cl_mem_flags memFlags = CL_MEM_READ_ONLY;
-		void *hostPtr = NULL;
-		void *hostPtrOut = NULL; // use to map point to output buffer for memcopy only kernels
-
-		// this option will only work on APUs same physical memory is used by host and device
-		if(bZeroMemcopy)
-		{
-			memFlags |= CL_MEM_ALLOC_HOST_PTR;
-		//	memFlags |= CL_MEM_USE_PERSISTENT_MEM_AMD;
-		}
-	
-		input = clCreateBuffer(context,  memFlags,  clType->getSize() * dataItemCount, NULL, NULL);
-	
-		if (!input)
-		{
-			printf("Error: Failed to allocate device memory!!\n");
-			exit(1);
-		}
-
-		if(memcpyOnly)
-		{
-			output = clCreateBuffer(context,  memFlags,  clType->getSize() * dataItemCount, NULL, NULL);
-			 if (!output)
-			{
-				printf("Error: Failed to allocate device memory!\n");
-				exit(1);
-			}
-		}
-
-
-
-		if( bZeroMemcopy )
-		{
-	//		err = clEnqueueWriteBuffer(commands, input, CL_TRUE, 0, clType->getSize() * dataItemCount, data, 0, NULL,  NULL); //test
-	//		if( err != CL_SUCCESS )
-	//		{
-	//		    printf("Error: Failed to copy host buffer to cl buffer (zero memcopy)!\n");
-	//			return EXIT_FAILURE;
-	//		}
-
-			hostPtr = clEnqueueMapBuffer(commands, input, CL_TRUE, CL_MAP_WRITE, 0,  clType->getSize() * dataItemCount, 0, NULL, NULL, &err);
-			if( err != CL_SUCCESS )
-			{
-				printf("Error: Failed to map host pointer to zero memcopy buffer!\n");
-				return EXIT_FAILURE;
-			}
-	
-			if(memcpyOnly)
-			{
-				hostPtrOut = clEnqueueMapBuffer(commands, output, CL_TRUE, CL_MAP_WRITE, 0,  clType->getSize() * dataItemCount, 0, NULL, NULL, &err);
-				if( err != CL_SUCCESS )
-				{
-					printf("Error: Failed to map host pointer to zero memcopy buffer!\n");
-					return EXIT_FAILURE;
-				}
-			}
-
-			// start timing writing to buffer (device or zero mem copy)
-			timer.Start(writeTimer);
-		
-			memcpy( hostPtr, data, clType->getSize() * dataItemCount);
-		}
-		else
-		{
-			// start timing writing to buffer (device or zero mem copy)
-			timer.Start(writeTimer);
-		}
-		
-		// Write our data set into the input array in device memory 
-		//
-		if( !bZeroMemcopy )
-		{
-			cl_event eventKernelTiming; // for timing
-
-			err = clEnqueueWriteBuffer(commands, input, CL_TRUE, 0, clType->getSize() * dataItemCount, data, 0, NULL,  &eventKernelTiming);
-			if (err != CL_SUCCESS)
-			{
-				printf("Error: Failed to write to source array!\n");
-				exit(1);
-			}
-			clFinish(commands);
-
-		
-			clGetEventProfilingInfo(eventKernelTiming, CL_PROFILING_COMMAND_START,
-											   sizeof(start), &start, NULL);
-
-			clGetEventProfilingInfo(eventKernelTiming, CL_PROFILING_COMMAND_END,
-											   sizeof(end), &end, NULL);
-
-			cl_ulong diff = end-start;
-		
-			if( !dataItemCountEnd)
-			{
-			printf("\nbuffer write GPU timer %lld",diff);
-			}
-		}
-		
-		timer.Stop(writeTimer);
-
- 		// Set the arguments to our compute kernel
-		//
- 
-		err = 0;
-		err  = clSetKernelArg(kernel, 0, sizeof(cl_mem), &input);
-
-		if(memcpyOnly)
-		{
-			err  = clSetKernelArg(kernel, 1, sizeof(cl_mem), &output);
-		}
-
-	//    err |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &output);
-	 //   err |= clSetKernelArg(kernel, 2, sizeof(unsigned int), &count);
-		if (err != CL_SUCCESS)
-		{
-			printf("Error: Failed to set kernel arguments! %d\n", err);
-			exit(1);
-		}
-	
-
-		// Get the maximum work group size for executing the kernel on the device
-		//
-		err = clGetKernelWorkGroupInfo(kernel, device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(local), &local, NULL);
-		if (err != CL_SUCCESS)
-		{
-			printf("Error: Failed to retrieve kernel work group info! %d\n", err);
-			exit(1);
-		}
-
-		// Execute the kernel over the entire range of our 1d input data set
-		// using the maximum number of work group items for this device
-		//
-		if(!memcpyOnly)
-		{
-			global = dataItemCount / registerCount;
-		}
-		else
-		{
-			global = dataItemCount;
-		}
-
-		if(workgroupSize < local && workgroupSize != 0)
-		{
-			local = workgroupSize;
-		}
-		if(workgroupSize > local)
-		{
-			printf("Error: Max supported workgroup size is %d, requested was %d", (unsigned int)local, workgroupSize);
-			exit(1);
-		}
-
-		cl_event eventKernelTiming; // for timing
-
-		timer.Start(executeTimer); // measure kernel execution time
-
-		err = clEnqueueNDRangeKernel(commands, kernel, 1, NULL, &global, &local, 0, NULL, &eventKernelTiming);
-
-		// Wait for the command commands to get serviced before reading back results
-		//
-   
-		//clWaitForEvents(1, &eventGlobal);
-		clFinish(commands);
-
-		timer.Stop(executeTimer); // end of kernel execution
-
-		clGetEventProfilingInfo(eventKernelTiming, CL_PROFILING_COMMAND_START,
-										   sizeof(start), &start, NULL);
-
-		clGetEventProfilingInfo(eventKernelTiming, CL_PROFILING_COMMAND_END,
-										   sizeof(end), &end, NULL);
-    
-		clReleaseEvent(eventKernelTiming);
-
-		if (err)
-		{
-			printf("Error: Failed to execute kernel!\n");
-			return EXIT_FAILURE;
-		}
-
-		timer.Start(readTimer); // measure time to read back from memory
-	
-		// Read back the results from the device to verify the output
-		//
-    
-		if( !bZeroMemcopy )
-		{
-			err = clEnqueueReadBuffer( commands, input, CL_TRUE, 0, clType->getSize() * dataItemCount, data, 0, NULL, NULL);  
-			if (err != CL_SUCCESS)
-			{
-				printf("Error: Failed to read output array! %d\n", err);
-				exit(1);
-			}
-		}
-
-		timer.Stop(readTimer);
-	      
-		cl_ulong time = end - start; /* Convert nanoseconds to msecs */
-    	
-		// Calculate gflops
-	
-		cl_ulong dataTransferred = dataItemCount * clType->getSize();
-
-		int multiplier = 2;
-		if(readOnly || writeOnly)
-		{
-			multiplier = 1;
-		}
-
-		int fftlen = (int)(local * registerCount * clType->getSize()/clType->getTypeSize()) / 2;
-		double gflops	= (global/local) * 5 * fftlen * ( log( static_cast< double >( fftlen ) ) / log( 2.0 ) ) / time;
-		double MBps = (double)(multiplier * (double)(dataTransferred) / time);
-
-		if( !dataItemCountEnd )
-		{
-			printf("\nTicks= %ld\nTransfer= %ld bytes\nbandwidth= %lf GB/S", time , dataTransferred, MBps);
-		
-			if(!memcpyOnly)
-			{
-				printf("\nType = %s\nfftlen=%d\nGflops %lf\n",clType->getName().c_str(), fftlen, gflops);
-			}
-		}
-		// Shutdown and cleanup
-		//
-    
-		if(bZeroMemcopy)
-		{
-			err = clEnqueueUnmapMemObject(commands, input, hostPtr, 0, 0, 0);
-			if(memcpyOnly)
-			{
-				err = clEnqueueUnmapMemObject(commands, output, hostPtrOut, 0, 0, 0);
-			}
-
-			if(err != CL_SUCCESS)
-			{
-				printf("Error: Failed to unmap memory objects!\n");
-				return EXIT_FAILURE;
-			}
-		}
-	
-		clReleaseMemObject(input);
-		if( memcpyOnly )
-		{
-			clReleaseMemObject(output);
-		}
-	
-		if( data )
-		{
-			aligned_free( data );
-		}
-	
-		printf("\n%10ld,\t%f,\t%f,\t%f,\t%f,",dataTransferred, timer.getMinimumTime(writeTimer) ,timer.getMinimumTime(executeTimer),timer.getMinimumTime(readTimer),timer.getMinimumTime(writeTimer)  + timer.getMinimumTime(executeTimer) + timer.getMinimumTime(readTimer) );
-
-		clReleaseProgram(program);
-		clReleaseKernel(kernel);
-
-		dataItemCount*= 2;
-} while(dataItemCount <= dataItemCountEnd);
-
-
-    clReleaseCommandQueue(commands);
-    clReleaseContext(context);
-
-    return 0;
-}
-
diff --git a/RTCP/Cobalt/clAmdFft/samples/statisticalTimer.cpp b/RTCP/Cobalt/clAmdFft/samples/statisticalTimer.cpp
deleted file mode 100644
index f9111f20069f499c230d9287924a55985da8258c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/statisticalTimer.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-// StatTimer.cpp : Defines the exported functions for the DLL application.
-//
-
-#include "stdafx.h"
-#include <iostream>
-#include <string>
-#include <cassert>
-#include <limits>
-#include <functional>
-#include "statisticalTimer.h"
-
-#if defined( __GNUC__ )
-	#include <sys/time.h>
-#endif
-
-//	Functor object to help with accumulating values in vectors
-template< typename T >
-struct Accumulator: public std::unary_function< T, void >
-{
-	T acc;
-
-	Accumulator( ): acc( 0 ) {}
-	void operator( )(T x) { acc += x; }
-};
-
-//	Unary predicate used for remove_if() algorithm
-//	Currently, RangeType is expected to be a floating point type, and ValType an integer type
-template< typename RangeType, typename ValType >
-struct PruneRange
-{
-	RangeType lower, upper;
-
-	PruneRange( RangeType mean, RangeType stdev ): lower( mean-stdev ), upper( mean+stdev ) {}
-
-	bool operator( )( ValType val )
-	{ 
-		//	These comparisons can be susceptible to signed/unsigned casting problems
-		//	This is why we cast ValType to RangeType, because RangeType should always be floating and signed
-		if( static_cast< RangeType >( val ) < lower )
-			return true;
-		else if( static_cast< RangeType >( val ) > upper )
-			return true;
-
-		return false;
-	}
-};
-
-StatisticalTimer& 
-StatisticalTimer::getInstance( )
-{
-	static	StatisticalTimer	timer;
-	return	timer;
-}
-
-StatisticalTimer::StatisticalTimer( ): nEvents( 0 ), nSamples( 0 ), normalize( true )
-{
-#if defined( _WIN32 )
-	//	OS call to get ticks per second2
-	::QueryPerformanceFrequency( reinterpret_cast<LARGE_INTEGER*>( &clkFrequency ) );
-#else
-	clkFrequency = 1000000;
-#endif
-}
-
-StatisticalTimer::~StatisticalTimer( )
-{}
-
-void
-StatisticalTimer::Clear( )
-{
-	labelID.clear( );
-	clkStart.clear( );
-	clkTicks.clear( );
-}
-
-void
-StatisticalTimer::Reset( )
-{
-	if( nEvents == 0 || nSamples == 0 )
-		throw	std::runtime_error( "StatisticalTimer::Reserve( ) was not called before Reset( )" );
-
-	clkStart.clear( );
-	clkTicks.clear( );
-
-	clkStart.resize( nEvents );
-	clkTicks.resize( nEvents );
-
-	for( unsigned int	i = 0; i < nEvents; ++i )
-	{
-		clkTicks.at( i ).reserve( nSamples );
-	}
-
-	return;
-}
-
-//	The caller can pre-allocate memory, to improve performance.  
-//	nEvents is an approximate value for how many seperate events the caller will think 
-//	they will need, and nSamples is a hint on how many samples we think we will take
-//	per event
-void
-StatisticalTimer::Reserve( unsigned int nEvents, unsigned int nSamples )
-{
-	this->nEvents	= std::max<unsigned int> (1, nEvents);
-	this->nSamples	= std::max<unsigned int> (1, nSamples);
-
-	Clear( );
-	labelID.reserve( nEvents );
-
-	clkStart.resize( nEvents );
-	clkTicks.resize( nEvents );
-
-	for( unsigned int i = 0; i < nEvents; ++i )
-	{
-		clkTicks.at( i ).reserve( nSamples );
-	}
-}
-
-void
-StatisticalTimer::setNormalize( bool norm )
-{
-	normalize = norm;
-}
-
-void
-StatisticalTimer::Start( sTimerID id )
-{
-#if defined( _WIN32 )
-	::QueryPerformanceCounter( reinterpret_cast<LARGE_INTEGER*>( &clkStart.at( id ) ) );
-#else
-	struct timeval s;
-	gettimeofday(&s, 0);
-	clkStart.at( id ) = (unsigned long long)s.tv_sec * 1000000 + (unsigned long long)s.tv_usec;
-#endif
-}
-
-void
-StatisticalTimer::Stop( sTimerID id )
-{
-	unsigned long long n;
-
-#if defined( _WIN32 )
-	::QueryPerformanceCounter( reinterpret_cast<LARGE_INTEGER*>( &n ) );
-#else
-	struct timeval s;
-	gettimeofday(&s, 0);
-	n = (unsigned long long)s.tv_sec * 1000000 + (unsigned long long)s.tv_usec;
-#endif
-
-	n		-= clkStart.at( id );
-	clkStart.at( id )	= 0;
-	AddSample( id, n );
-}
-
-void
-StatisticalTimer::AddSample( const sTimerID id, const unsigned long long n )
-{
-	clkTicks.at( id ).push_back( n );
-}
-
-//	This function's purpose is to provide a mapping from a 'friendly' human readable text string
-//	to an index into internal data structures.
-StatisticalTimer::sTimerID
-StatisticalTimer::getUniqueID( const std::string& label, unsigned int groupID )
-{
-	//	I expect labelID will hardly ever grow beyond 30, so it's not of any use
-	//	to keep this sorted and do a binary search
-
-	labelPair	sItem	= std::make_pair( label, groupID );
-
-	stringVector::iterator	iter;
-	iter	= std::find( labelID.begin(), labelID.end(), sItem );
-
-	if( iter != labelID.end( ) )
-		return	std::distance( labelID.begin( ), iter );
-
-	labelID.push_back( sItem );
-
-	return	labelID.size( ) - 1;
-
-}
-
-double
-StatisticalTimer::getMean( sTimerID id ) const
-{
-	if( clkTicks.empty( ) )
-		return	0;
-
-	size_t	N	= clkTicks.at( id ).size( );
-
-	Accumulator<unsigned long long> sum = std::for_each( clkTicks.at( id ).begin(), clkTicks.at( id ).end(), Accumulator<unsigned long long>() );
-
-	return	static_cast<double>( sum.acc ) / N;
-}
-
-double
-StatisticalTimer::getVariance( sTimerID id ) const
-{
-	if( clkTicks.empty( ) )
-		return	0;
-
-	double	mean	= getMean( id );
-
-	size_t	N	= clkTicks.at( id ).size( );
-	double	sum	= 0;
-
-	for( unsigned int i = 0; i < N; ++i )
-	{
-		double	diff	= clkTicks.at( id ).at( i ) - mean;
-		diff	*= diff;
-		sum		+= diff;
-	}
-
-	return	 sum / N;
-}
-
-double
-StatisticalTimer::getStdDev( sTimerID id ) const
-{
-	double	variance	= getVariance( id );
-
-	return	sqrt( variance );
-}
-
-double
-StatisticalTimer::getAverageTime( sTimerID id ) const
-{
-	if( normalize )
-		return getMean( id ) / clkFrequency;
-	else
-		return getMean( id );
-}
-
-double
-StatisticalTimer::getMinimumTime( sTimerID id ) const
-{
-	clkVector::const_iterator iter	= std::min_element( clkTicks.at( id ).begin( ), clkTicks.at( id ).end( ) );
-
-	if( iter != clkTicks.at( id ).end( ) )
-	{
-		if( normalize )
-			return static_cast<double>( *iter ) / clkFrequency;
-		else
-			return static_cast<double>( *iter );
-	}
-	else
-		return	0;
-}
-
-unsigned int	
-StatisticalTimer::pruneOutliers( sTimerID id , double multiple )
-{
-	if( clkTicks.empty( ) )
-		return	0;
-
-	double	mean	= getMean( id );
-	double	stdDev	= getStdDev( id );
-
-	clkVector&	clks = clkTicks.at( id );
-
-	//	Look on p. 379, "The C++ Standard Library"
-	//	std::remove_if does not actually erase, it only copies elements, it returns new 'logical' end
-	clkVector::iterator	newEnd	= std::remove_if( clks.begin( ), clks.end( ), PruneRange< double,unsigned long long >( mean, multiple*stdDev ) );
-
-	clkVector::difference_type dist	= std::distance( newEnd, clks.end( ) );
-
-	if( dist != 0 )
-		clks.erase( newEnd, clks.end( ) );
-
-	assert( dist < std::numeric_limits< unsigned int >::max( ) );
-
-	return static_cast< unsigned int >( dist );
-}
-
-unsigned int	
-StatisticalTimer::pruneOutliers( double multiple )
-{
-	unsigned int	tCount	= 0;
-
-	for( unsigned int l = 0; l < labelID.size( ); ++l )
-	{
-		unsigned int lCount	= pruneOutliers( l , multiple );
-		std::clog << "\tStatisticalTimer:: Pruning " << lCount << " samples from " << labelID[l].first << std::endl;
-		tCount += lCount;
-	}
-
-	return	tCount;
-}
-
-//	Defining an output print operator
-std::ostream&
-operator<<( std::ostream& os, const StatisticalTimer& st )
-{
-	if( st.clkTicks.empty( ) )
-		return	os;
-
-	std::ios::fmtflags bckup	= os.flags( );
-
-	for( unsigned int l = 0; l < st.labelID.size( ); ++l )
-	{
-		unsigned long long min	= 0;
-		StatisticalTimer::clkVector::const_iterator iter	= std::min_element( st.clkTicks.at( l ).begin( ), st.clkTicks.at( l ).end( ) );
-
-		if( iter != st.clkTicks.at( l ).end( ) )
-			min		= *iter;
-
-		os << st.labelID[l].first << ", " << st.labelID[l].second << std::fixed << std::endl;
-		os << "Min:," << min << std::endl;
-		os << "Mean:," << st.getMean( l ) << std::endl;
-		os << "StdDev:," << st.getStdDev( l ) << std::endl;
-		os << "AvgTime:," << st.getAverageTime( l ) << std::endl;
-		os << "MinTime:," << st.getMinimumTime( l ) << std::endl;
-
-		for( unsigned int	t = 0; t < st.clkTicks[l].size( ); ++t )
-		{
-			os << st.clkTicks[l][t]<< ",";
-		}
-		os << "\n" << std::endl;
-
-	}
-
-	os.flags( bckup );
-
-	return	os;
-}
diff --git a/RTCP/Cobalt/clAmdFft/samples/statisticalTimer.h b/RTCP/Cobalt/clAmdFft/samples/statisticalTimer.h
deleted file mode 100644
index f7e38c0fac3d240aed5025bbefc8da76fee3db26..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/statisticalTimer.h
+++ /dev/null
@@ -1,157 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010,2011 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-#pragma once
-#ifndef _STATISTICALTIMER_H_
-#define _STATISTICALTIMER_H_
-#include <iosfwd>
-#include <vector>
-#include <algorithm>
-
-/**
- * \file clAmdFft.StatisticalTimer.h
- * \brief A timer class that provides a cross platform timer for use
- * in timing code progress with a high degree of accuracy.
- *	This class is implemented entirely in the header, to facilitate inclusion into multiple
- *	projects without needing to compile an object file for each project.
- */
-
-/**
- * \class StatisticalTimer
- * \brief Counter that provides a fairly accurate timing mechanism for both
- * windows and linux. This timer is used extensively in all the samples.
- */
-
-class StatisticalTimer
-{
-	//	Private typedefs
-	typedef std::vector< unsigned long long > clkVector;
-	typedef	std::pair< std::string, unsigned int > labelPair;
-	typedef	std::vector< labelPair > stringVector;
-
-	//	In order to calculate statistics <std. dev.>, we need to keep a history of our timings
-	stringVector	labelID;
-	clkVector	clkStart;
-	std::vector< clkVector >	clkTicks;
-
-	//	How many clockticks in a second
-	unsigned long long	clkFrequency;
-
-	//	Saved sizes for our vectors, used in Reset() to reallocate vectors
-	clkVector::size_type	nEvents, nSamples;
-
-	//	This setting controls whether the Timer should convert samples into time by dividing by the 
-	//	clock frequency
-	bool normalize;
-
-	/**
-	 * \fn StatisticalTimer()
-	 * \brief Constructor for StatisticalTimer that initializes the class
-	 *	This is private so that user code cannot create their own instantiation.  Instead, you
-	 *	must go through getInstance( ) to get a reference to the class.
-	 */
-	StatisticalTimer( );
-
-	/**
-	 * \fn ~StatisticalTimer()
-	 * \brief Destructor for StatisticalTimer that cleans up the class
-	 */
-	~StatisticalTimer( );
-
-	/**
-	 * \fn StatisticalTimer(const StatisticalTimer& )
-	 * \brief Copy constructors do not make sense for a singleton, disallow copies
-	 */
-	StatisticalTimer( const StatisticalTimer& );
-
-	/**
-	 * \fn operator=( const StatisticalTimer& )
-	 * \brief Assignment operator does not make sense for a singleton, disallow assignments
-	 */
-	StatisticalTimer& operator=( const StatisticalTimer& );
-
-	friend std::ostream& operator<<( std::ostream& os, const StatisticalTimer& s );
-
-public:
-	//	Public typedefs
-	typedef stringVector::difference_type sTimerID;
-
-	/**
-	 * \fn getInstance()
-	 * \brief This returns a reference to the singleton timer.  Guarantees only 1 timer class is ever
-	 *	instantiated within a compilable executable.
-	 */
-	static StatisticalTimer& getInstance( );
-
-	/**
-	 * \fn void Start( sTimerID id )
-	 * \brief Start the timer
-	 * \sa Stop(), Reset()
-	 */
-	void Start( sTimerID id );
-
-	/**
-	 * \fn void Stop( sTimerID id )
-	 * \brief Stop the timer
-	 * \sa Start(), Reset()
-	 */
-	void Stop( sTimerID id );
-
-	/**
-	 * \fn void AddSample( const sTimerID id, const unsigned long long n )
-	 * \brief Explicitely add a timing sample into the class
-	 */
-	void AddSample( const sTimerID id, const unsigned long long n );
-
-	/**
-	 * \fn void Reset(void)
-	 * \brief Reset the timer to 0
-	 * \sa Start(), Stop()
-	 */
-	void Clear( );
-
-	/**
-	 * \fn void Reset(void)
-	 * \brief Reset the timer to 0
-	 * \sa Start(), Stop()
-	 */
-	void Reset( );
-
-	void Reserve( unsigned int nEvents, unsigned int nSamples );
-
-	sTimerID getUniqueID( const std::string& label, unsigned int groupID );
-
-	//	Calculate the average/mean of data for a given event
-	void	setNormalize( bool norm );
-
-	//	Calculate the average/mean of data for a given event
-	double	getMean( sTimerID id ) const;
-
-	//	Calculate the variance of data for a given event
-	//	Variance - average of the squared differences between data points and the mean
-	double	getVariance( sTimerID id ) const;
-
-	//	Sqrt of variance, also in units of the original data
-	double	getStdDev( sTimerID id ) const;
-
-	/**
-	 * \fn double getAverageTime(sTimerID id) const
-	 * \return Return the arithmetic mean of all the samples that have been saved
-	 */
-	double getAverageTime( sTimerID id ) const;
-
-	/**
-	 * \fn double getMinimumTime(sTimerID id) const
-	 * \return Return the arithmetic min of all the samples that have been saved
-	 */
-	double getMinimumTime( sTimerID id ) const;
-
-	//	Using the stdDev of the entire population (of an id), eliminate those samples that fall
-	//	outside some specified multiple of the stdDev.  This assumes that the population
-	//	form a gaussian curve.
-	unsigned int	pruneOutliers( double multiple );
-	unsigned int	pruneOutliers( sTimerID id , double multiple );
-};
-
-#endif // _STATISTICALTIMER_H_
diff --git a/RTCP/Cobalt/clAmdFft/samples/stdafx.cpp b/RTCP/Cobalt/clAmdFft/samples/stdafx.cpp
deleted file mode 100644
index a4069dfcc0f47908ae7fb5fbfbeac3507e383a49..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/stdafx.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-// stdafx.cpp : source file that includes just the standard includes
-// clAmdFft.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
-// TODO: reference any additional headers you need in STDAFX.H
-// and not in this file
diff --git a/RTCP/Cobalt/clAmdFft/samples/stdafx.h b/RTCP/Cobalt/clAmdFft/samples/stdafx.h
deleted file mode 100644
index 4887dae7f60052252150a02518cf0c65c8318e7a..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/stdafx.h
+++ /dev/null
@@ -1,27 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#pragma once
-
-#include "targetver.h"
-
-#include <iostream>
-#include <stdexcept>
-#include <iomanip>
-#include <complex>
-#include <valarray>
-#include <stdarg.h>
-#if defined( _WIN32 )
-	#define NOMINMAX
-	#define WIN32_LEAN_AND_MEAN			// Exclude rarely-used stuff from Windows headers
-
-	#include <tchar.h>
-	#include <windows.h>
-#endif
-
diff --git a/RTCP/Cobalt/clAmdFft/samples/targetver.h b/RTCP/Cobalt/clAmdFft/samples/targetver.h
deleted file mode 100644
index bf68fd6c48ba9919933b764c4db9119492f5f45c..0000000000000000000000000000000000000000
--- a/RTCP/Cobalt/clAmdFft/samples/targetver.h
+++ /dev/null
@@ -1,14 +0,0 @@
-////////////////////////////////////////////
-//	Copyright (C) 2010 Advanced Micro Devices, Inc. All Rights Reserved.
-////////////////////////////////////////////
-
-#pragma once
-
-// Including SDKDDKVer.h defines the highest available Windows platform.
-
-// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
-// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
-
-#if defined( _WIN32 )
-	#include <SDKDDKVer.h>
-#endif
diff --git a/SAS/MoM/MoMQueryService/test/CMakeLists.txt b/SAS/MoM/MoMQueryService/test/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..da32af1396b5261913ccda5208adf36f9abd0af2
--- /dev/null
+++ b/SAS/MoM/MoMQueryService/test/CMakeLists.txt
@@ -0,0 +1,9 @@
+# $Id: CMakeLists.txt 32679 2015-10-26 09:31:56Z schaap $
+include(LofarCTest)
+include(FindPythonModule)
+
+find_python_module(mysql)
+find_python_module(testing.mysqld)
+
+lofar_add_test(t_momqueryservice)
+
diff --git a/SAS/MoM/MoMQueryService/test/t_momqueryservice.py b/SAS/MoM/MoMQueryService/test/t_momqueryservice.py
new file mode 100755
index 0000000000000000000000000000000000000000..14d005fd57d2f924117eeb1ac8391d34d1fc6ef6
--- /dev/null
+++ b/SAS/MoM/MoMQueryService/test/t_momqueryservice.py
@@ -0,0 +1,2405 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2012-2015    ASTRON (Netherlands Institute for Radio Astronomy)
+# P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
+#
+# This file is part of the LOFAR software suite.
+# The LOFAR software suite is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# The LOFAR software suite is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+
+# $Id:  $
+import unittest
+import uuid
+from datetime import datetime
+from mysql import connector
+import logging
+import json
+from datetime import datetime, timedelta
+
+from lofar.common.datetimeutils import parseDatetime
+
+logger = logging.getLogger(__name__)
+
+from unittest import mock
+
+try:
+    import testing.mysqld
+except ImportError as e:
+    print(str(e))
+    print('Please install python3 package testing.mysqld: sudo pip3 install testing.mysqld')
+    exit(3)    # special lofar test exit code: skipped test
+
+from lofar.common.dbcredentials import Credentials
+from lofar.mom.momqueryservice.momqueryrpc import MoMQueryRPC
+from lofar.mom.momqueryservice.config import DEFAULT_MOMQUERY_SERVICENAME
+from lofar.mom.momqueryservice.momqueryservice import MoMDatabaseWrapper, ProjectDetailsQueryHandler
+from proton import Message
+
+trigger_specification = '<?xml version="1.0" encoding="UTF-8"?>\
+<p:trigger xsi:schemaLocation="http://www.astron.nl/LofarTrigger LofarTrigger.xsd"\
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p2="http://www.astron.nl/LofarSpecification"\
+    xmlns:p="http://www.astron.nl/LofarTrigger" xmlns:p1="http://www.astron.nl/LofarBase">\
+    <version>version</version>\
+    <name>name</name>\
+    <description>description</description>\
+    <projectReference>\
+        <ProjectCode>test-lofar</ProjectCode>\
+    </projectReference>\
+    <contactInformation>\
+        <name>name</name>\
+        <email>email</email>\
+        <phoneNumber>phoneNumber</phoneNumber>\
+        <affiliation>affiliation</affiliation>\
+    </contactInformation>\
+    <userName>holties</userName>\
+    <comment>comment</comment>\
+    <event>\
+        <identification>identification</identification>\
+        <description>description</description>\
+        <type>VOEvent</type>\
+    </event>\
+    <specification>\
+        <version>version</version>\
+        <projectReference>\
+            <ProjectCode>test-lofar</ProjectCode>\
+        </projectReference>\
+        <userName>holties</userName>\
+        <comment>comment</comment>\
+        <generatorName>generatorVersion</generatorName>\
+        <generatorVersion>generatorVersion</generatorVersion>\
+    </specification>\
+    <generatorName></generatorName>\
+    <generatorVersion></generatorVersion>\
+</p:trigger>'
+
+single_trigger_result = \
+{
+    '1':
+    {
+        'mom_id': '23',
+        'project_name': 'project name',
+        'arrival_time': '2017-02-24 16:14:05',
+        'status': 'finished',
+        'momurl_id': '12345'
+    },
+}
+
+multiple_triggers_result = \
+{
+    '1':
+    {
+        'mom_id': '23',
+        'project_name': 'project name',
+        'arrival_time': '2017-02-24 16:14:05',
+        'status': 'finished',
+        'momurl_id': '12345'
+    },
+    '2':
+    {
+        'mom_id': '32',
+        'project_name': 'project name',
+        'arrival_time': '2017-02-24 15:14:05',
+        'status': 'finished',
+        'momurl_id': '54321'
+    },
+}
+
+# share database for better performance
+def populate_db(mysqld):
+
+        connection = connector.connect(**mysqld.dsn())
+        cursor = connection.cursor()
+
+         # useradmin db
+        cursor.execute("CREATE DATABASE useradministration")
+        cursor.execute("CREATE TABLE useradministration.useraccount ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "userid int(11) NOT NULL DEFAULT '0', "
+                       "username varchar(20) NOT NULL DEFAULT '', "
+                       "password varchar(32) NOT NULL DEFAULT '', "
+                       "publickey varchar(32) DEFAULT NULL, "
+                       "PRIMARY KEY (id), "
+                       "UNIQUE KEY useraccount_UNIQ (username) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=1787 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE useradministration.useraccountsystemrole ("
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "useraccountid int(11) NOT NULL DEFAULT '0', "
+                       "systemroleid int(11) NOT NULL DEFAULT '0', "
+                       "indexid int(11) NOT NULL DEFAULT '0', "
+                       "PRIMARY KEY (id), "
+                       "KEY useraccount_useraccountsystemrole_IND (useraccountid), "
+                       "KEY systemrole_useraccountsystemrole_IND (systemroleid), "
+                       "KEY useraccount_index_useraccountsystemrole_IND (indexid) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=3413 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE useradministration.user ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "title varchar(100) DEFAULT NULL, "
+                       "firstname varchar(100) DEFAULT NULL, "
+                       "lastname varchar(100) NOT NULL DEFAULT '', "
+                       "email varchar(100) DEFAULT NULL, "
+                       "phone1 varchar(100) DEFAULT NULL, "
+                       "phone2 varchar(100) DEFAULT NULL, "
+                       "fax varchar(100) DEFAULT NULL, "
+                       "PRIMARY KEY (id), "
+                       "KEY user_lastname_IND (lastname) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=1790 DEFAULT CHARSET=latin1")
+        # mom database
+        cursor.execute("CREATE DATABASE mom")
+        cursor.execute("USE mom")
+        cursor.execute("CREATE TABLE mom2objectstatus ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "name varchar(255) DEFAULT NULL, "
+                       "roles varchar(512) DEFAULT NULL, "
+                       "userid int(11) DEFAULT NULL, "
+                       "statusid int(11) DEFAULT NULL, "
+                       "mom2objectid int(11) DEFAULT NULL, "
+                       "indexid int(11) DEFAULT NULL, "
+                       "statustime datetime NOT NULL DEFAULT '1000-01-01 00:00:00.000000', "
+                       "pending tinyint(1) DEFAULT 0, "
+                       "PRIMARY KEY (id) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=1725902 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE mom2object ("
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "parentid int(11) DEFAULT NULL, "
+                       "indexid int(11) DEFAULT NULL, "
+                       "mom2id int(11) NOT NULL DEFAULT 0, "
+                       "mom2objecttype char(25) NOT NULL, "
+                       "name varchar(100) NOT NULL DEFAULT '', "
+                       "description varchar(255) DEFAULT NULL, "
+                       "ownerprojectid int(11) DEFAULT NULL, "
+                       "currentstatusid int(11) DEFAULT NULL, "
+                       "topology varchar(100) DEFAULT NULL, "
+                       "predecessor varchar(512) DEFAULT NULL, "
+                       "topology_parent tinyint(1) DEFAULT 0, "
+                       "group_id int(11) DEFAULT 0, "
+                       "datasize bigint(20) DEFAULT 0, "
+                       "PRIMARY KEY (id), "
+                       "UNIQUE KEY mom2object_UNIQ (mom2id) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=331855 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE status ("
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "code char(15) NOT NULL DEFAULT '', "
+                       "type char(20) NOT NULL, "
+                       "description varchar(100) DEFAULT NULL, "
+                       "PRIMARY KEY (id), "
+                       "UNIQUE KEY status_UNIQ (code,type) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=712 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE member ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "projectid int(11) DEFAULT NULL, "
+                       "indexid int(11) DEFAULT NULL, "
+                       "PRIMARY KEY (id), "
+                       "KEY mom2object_member_FK (projectid), "
+                       "KEY indexid_IND (indexid) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=1010 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE registeredmember ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "memberid int(11) DEFAULT NULL, "
+                       "userid int(11) DEFAULT NULL, "
+                       "PRIMARY KEY (id), "
+                       "KEY member_registeredmember_FK (memberid), "
+                       "KEY userid_IND (userid) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=768 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE memberprojectrole ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "memberid int(11) DEFAULT NULL, "
+                       "indexid int(11) DEFAULT NULL, "
+                       "projectroleid int(11) DEFAULT NULL, "
+                       "PRIMARY KEY (id), "
+                       "KEY member_memberprojectrole_FK (memberid), "
+                       "KEY projectrole_memberprojectrole_FK (projectroleid), "
+                       "KEY indexid_IND (indexid) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=1167 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE projectrole ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "name char(15) NOT NULL DEFAULT '', "
+                       "description varchar(100) DEFAULT NULL, "
+                       "PRIMARY KEY (id), "
+                       "UNIQUE KEY projectrole_UNIQ (name) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE project ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "mom2objectid int(11) DEFAULT NULL, "
+                       "releasedate date DEFAULT NULL, "
+                       "PRIMARY KEY (id), "
+                       "KEY mom2object_IND (mom2objectid) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=149 DEFAULT CHARSET=latin1")
+        cursor.execute("ALTER TABLE project "
+                       "ADD allowtriggers BOOLEAN NOT NULL DEFAULT FALSE AFTER releasedate, "
+                       "ADD priority int(11) NOT NULL DEFAULT 1000 AFTER allowtriggers")
+        cursor.execute("CREATE TABLE lofar_trigger ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "username varchar(120) NOT NULL DEFAULT '', "
+                       "hostname varchar(128) NOT NULL DEFAULT '', "
+                       "arrivaltime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "
+                       "projectname varchar(100) NOT NULL DEFAULT '', "
+                       "metadata TEXT NOT NULL, "
+                       "cancelled BOOLEAN NOT NULL DEFAULT 0, "
+                       "cancelled_at timestamp NULL, "
+                       "cancelled_reason char(255), "
+                       "PRIMARY KEY (id), "
+                       "FOREIGN KEY (username) REFERENCES useradministration.useraccount(username)"
+                       ") ")
+        cursor.execute("CREATE TABLE lofar_observation ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "mom2objectid int(11) DEFAULT NULL, "
+                       "observation_id int(11) DEFAULT NULL, "
+                       "instrument char(32) DEFAULT NULL, "
+                       "user_specification_id int(11) DEFAULT NULL, "
+                       "system_specification_id int(11) DEFAULT NULL,"
+                       "default_template varchar(50) DEFAULT NULL,"
+                       "tbb_template varchar(50) DEFAULT NULL,"
+                       "tbb_piggyback_allowed tinyint(1) DEFAULT '0',"
+                       "parset mediumtext,"
+                       "nr_output_correlated int(11) DEFAULT NULL,"
+                       "nr_output_beamformed int(11) DEFAULT NULL,"
+                       "nr_output_coherent_stokes int(11) DEFAULT NULL,"
+                       "nr_output_incoherent_stokes int(11) DEFAULT NULL,"
+                       "nr_output_flyseye int(11) DEFAULT NULL,"
+                       "nr_output_correlated_valid int(11) DEFAULT NULL,"
+                       "nr_output_beamformed_valid int(11) DEFAULT NULL,"
+                       "nr_output_coherent_stokes_valid int(11) DEFAULT NULL,"
+                       "nr_output_incoherent_stokes_valid int(11) DEFAULT NULL,"
+                       "nr_output_flyseye_valid int(11) DEFAULT NULL,"
+                       "feedback text,"
+                       "aartfaac_piggyback_allowed bit(1) DEFAULT b'1',"
+                       "storage_cluster_id int(11) DEFAULT NULL,"
+                       "processing_cluster_id int(11) DEFAULT NULL,"
+                       "nico_testing int(11) DEFAULT NULL,"
+                       "PRIMARY KEY (id),"
+                       "KEY lofar_observation_observation_id_IND (observation_id),"
+                       "KEY mom2object_lofar_observation_FK (mom2objectid),"
+                       "KEY user_specification_lofar_observation_FK (user_specification_id),"
+                       "KEY system_specification_lofar_observation_FK (system_specification_id)"
+                       ") ENGINE=InnoDB AUTO_INCREMENT=52874 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE lofar_observation_specification ("
+                       "id int(11) NOT NULL AUTO_INCREMENT,"
+                       "type char(8) DEFAULT NULL,"
+                       "correlated_data tinyint(1) DEFAULT '1',"
+                       "filtered_data tinyint(1) DEFAULT '0',"
+                       "beamformed_data tinyint(1) DEFAULT '0',"
+                       "coherent_stokes_data tinyint(1) DEFAULT '0',"
+                       "incoherent_stokes_data tinyint(1) DEFAULT '0',"
+                       "antenna char(20) DEFAULT NULL,"
+                       "clock_mode char(10) DEFAULT NULL,"
+                       "instrument_filter char(15) DEFAULT NULL,"
+                       "integration_interval double DEFAULT NULL,"
+                       "channels_per_subband int(11) DEFAULT NULL,"
+                       "cn_integration_steps int(11) DEFAULT NULL,"
+                       "pencilbeams_flyseye tinyint(1) DEFAULT '0',"
+                       "pencilbeams_nr_pencil_rings int(11) DEFAULT NULL,"
+                       "pencilbeams_ring_size double DEFAULT NULL,"
+                       "stokes_selection char(4) DEFAULT NULL,"
+                       "stokes_integrate_channels tinyint(1) DEFAULT NULL,"
+                       "stokes_integration_steps int(11) unsigned DEFAULT NULL,"
+                       "station_set char(15) DEFAULT NULL,"
+                       "timeframe char(4) DEFAULT NULL,"
+                       "starttime datetime DEFAULT NULL,"
+                       "endtime datetime DEFAULT NULL,"
+                       "spec_duration double DEFAULT NULL,"
+                       "coherent_dedisperse_channels tinyint(1) DEFAULT '0',"
+                       "dispersion_measure float DEFAULT NULL,"
+                       "subbands_per_file_cs int(11) DEFAULT NULL,"
+                       "subbands_per_file_bf int(11) DEFAULT NULL,"
+                       "collapsed_channels_cs int(11) DEFAULT NULL,"
+                       "collapsed_channels_is int(11) DEFAULT NULL,"
+                       "downsampling_steps_cs int(11) DEFAULT NULL,"
+                       "downsampling_steps_is int(11) DEFAULT NULL,"
+                       "which_cs char(4) DEFAULT NULL,"
+                       "which_is char(4) DEFAULT NULL,"
+                       "bypass_pff tinyint(1) DEFAULT '0',"
+                       "enable_superterp tinyint(1) DEFAULT '0',"
+                       "flyseye tinyint(1) DEFAULT '0',"
+                       "tab_nr_rings int(11) DEFAULT NULL,"
+                       "tab_ring_size float DEFAULT NULL,"
+                       "bits_per_sample int(11) DEFAULT NULL,"
+                       "misc text,"
+                       "PRIMARY KEY (id),"
+                       "KEY lofar_observation_specification_type_IND (type)"
+                       ") ENGINE=InnoDB AUTO_INCREMENT=105645 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE lofar_pipeline ("
+                       "id int(11) NOT NULL AUTO_INCREMENT,"
+                       "mom2objectid int(11) DEFAULT NULL,"
+                       "starttime datetime DEFAULT NULL,"
+                       "endtime datetime DEFAULT NULL,"
+                       "pipeline_id int(11) DEFAULT NULL,"
+                       "pending tinyint(1) DEFAULT '0',"
+                       "template varchar(100) DEFAULT NULL,"
+                       "runtimeDirectory varchar(255) DEFAULT NULL,"
+                       "resultDirectory varchar(255) DEFAULT NULL,"
+                       "workingDirectory varchar(255) DEFAULT NULL,"
+                       "parset longtext,"
+                       "nr_output_correlated int(11) DEFAULT NULL,"
+                       "nr_output_beamformed int(11) DEFAULT NULL,"
+                       "nr_output_instrument_model int(11) DEFAULT NULL,"
+                       "nr_output_skyimage int(11) DEFAULT NULL,"
+                       "nr_output_correlated_valid int(11) DEFAULT NULL,"
+                       "nr_output_beamformed_valid int(11) DEFAULT NULL,"
+                       "nr_output_instrument_model_valid int(11) DEFAULT NULL,"
+                       "nr_output_skyimage_valid int(11) DEFAULT NULL,"
+                       "feedback text,"
+                       "demixing_parameters_id int(11) DEFAULT NULL,"
+                       "bbs_parameters_id int(11) DEFAULT NULL,"
+                       "duration double DEFAULT NULL,"
+                       "storage_cluster_id int(11) DEFAULT NULL,"
+                       "processing_cluster_id int(11) DEFAULT NULL,"
+                       "misc text,"
+                       "PRIMARY KEY (id),"
+                       "KEY lofar_pipeline_pipeline_id_IND (pipeline_id),"
+                       "KEY mom2object_lofar_pipeline_FK (mom2objectid),"
+                       "KEY demixing_parameters_FK (demixing_parameters_id),"
+                       "KEY bbs_parameters_FK (bbs_parameters_id)"
+                       ") ENGINE=InnoDB AUTO_INCREMENT=75471 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE resource ("
+                       "id int(11) NOT NULL auto_increment,"
+                       "projectid int(11) default NULL,"
+                       "resourcetypeid int(11) NOT NULL,"
+                       "allocation double default NULL,"
+                       "used double default NULL,"
+                       "unit varchar(50) NOT NULL DEFAULT '',"
+                       "projectpath varchar(255) default NULL,"
+                       "PRIMARY KEY (id),"
+                       "KEY resourcetype_resource_IND (resourcetypeid),"
+                       "KEY mom2object_resource_FK (projectid)"
+                       # "CONSTRAINT mom2object_resource_FK FOREIGN KEY (projectid) REFERENCES mom2object (id) ON DELETE CASCADE ON UPDATE NO ACTION,"
+                       # "CONSTRAINT resourcetype_resource_FK FOREIGN KEY (resourcetypeid) REFERENCES resourcetype (id)"
+                       ") ENGINE=InnoDB DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE  resourcetype ("
+                       "id int(11) NOT NULL auto_increment, "
+                       "name varchar(255) NOT NULL, "
+                       "hosturi varchar(255) default NULL,"
+                       "type varchar(50) NOT NULL,"
+                       "PRIMARY KEY (id),"
+                       "KEY resourcetype_name_IND (name)"
+                       ") ENGINE=InnoDB DEFAULT CHARSET=latin1")
+        # mom privilege
+        cursor.execute("CREATE DATABASE momprivilege")
+        cursor.execute("CREATE TABLE momprivilege.statustransitionrole ( "
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "statustransitionid int(11) DEFAULT NULL, "
+                       "roleid int(11) NOT NULL, "
+                       "roletype char(100) NOT NULL, "
+                       "PRIMARY KEY (id), "
+                       "KEY roletype_IND (roleid,roletype), "
+                       "KEY statustransition_statustransitionrole_FK (statustransitionid) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=8572 DEFAULT CHARSET=latin1")
+        cursor.execute("CREATE TABLE momprivilege.statustransition ("
+                       "id int(11) NOT NULL AUTO_INCREMENT, "
+                       "oldstatusid int(11) NOT NULL, "
+                       "newstatusid int(11) NOT NULL, "
+                       "PRIMARY KEY (id), "
+                       "KEY oldstatus_IND (oldstatusid), "
+                       "KEY newstatus_IND (oldstatusid) "
+                       ") ENGINE=InnoDB AUTO_INCREMENT=1272 DEFAULT CHARSET=latin1")
+        cursor.close()
+        connection.commit()
+        connection.close()
+
+Mysqld = testing.mysqld.MysqldFactory(cache_initialized_db = True, on_initialized = populate_db)
+
+def tearDownModule():
+    # clear cached database at end of tests
+    Mysqld.clear_cache()
+
+class TestProjectDetailsQueryHandler(unittest.TestCase):
+    database_credentials = Credentials()
+    database_credentials.host = "localhost"
+    database_credentials.user = "root"
+    database_credentials.database = "testdb"
+    database_credentials.password = None
+    database_credentials.config = {"useradministration_database": "useradministration",
+                                   "momprivilege_database": "momprivilege"}
+
+    project_name = "project name"
+    folder = "/project/folder"
+
+    def setUp(self):
+        mom_database_wrapper_patcher = mock.patch('lofar.mom.momqueryservice.momqueryservice.MoMDatabaseWrapper')
+        self.addCleanup(mom_database_wrapper_patcher.stop)
+        self.mom_database_wrapper_mock = mom_database_wrapper_patcher.start()
+
+        self.project_details_query_handler = ProjectDetailsQueryHandler(dbcreds = self.database_credentials)
+        self.project_details_query_handler.prepare_loop()
+
+    def test_IsProjectActive_returns_active_true_when_mom_wrapper_returns_true(self):
+        self.mom_database_wrapper_mock().is_project_active.return_value = True
+
+        return_value = self.project_details_query_handler.is_project_active(self.project_name)
+
+        self.assertTrue(return_value['active'])
+
+    def test_IsProjectActive_returns_active_false_when_mom_wrapper_returns_false(self):
+        self.mom_database_wrapper_mock().is_project_active.return_value = False
+
+        return_value = self.project_details_query_handler.is_project_active(self.project_name)
+
+        self.assertFalse(return_value['active'])
+
+    def test_FolderExists_return_exists_true_when_mom_wrapper_returns_true(self):
+        self.mom_database_wrapper_mock().folder_exists.return_value = True
+
+        return_value = self.project_details_query_handler.folder_exists(self.folder)
+
+        self.assertTrue(return_value['exists'])
+
+    def test_FolderExists_return_exists_false_when_mom_wrapper_returns_false(self):
+        self.mom_database_wrapper_mock().folder_exists.return_value = False
+
+        return_value = self.project_details_query_handler.folder_exists(self.folder)
+
+        self.assertFalse(return_value['exists'])
+
+    def test_authorized_add_with_status_returns_autorized_false_when_mom_wrapper_returns_false(self):
+        user_name = "user"
+        project_name = "project"
+        job_type = "observation"
+        status = "approved"
+
+        self.mom_database_wrapper_mock().authorized_add_with_status.return_value = False
+
+        return_value = self.project_details_query_handler.authorized_add_with_status(user_name, project_name, job_type,
+                                                                                     status)
+
+        self.assertFalse(return_value['authorized'])
+
+    def test_allows_triggers_returns_allows_true_when_mom_wrapper_returns_true(self):
+        project_name = "project"
+
+        self.mom_database_wrapper_mock().allows_triggers.return_value = True
+
+        return_value = self.project_details_query_handler.allows_triggers(project_name)
+
+        self.assertTrue(return_value['allows'])
+
+    def test_allows_triggers_returns_allows_false_when_mom_wrapper_returns_false(self):
+        project_name = "project"
+
+        self.mom_database_wrapper_mock().allows_triggers.return_value = False
+
+        return_value = self.project_details_query_handler.allows_triggers(project_name)
+
+        self.assertFalse(return_value['allows'])
+
+    def test_get_project_priority_returns_priority_that_the_mom_wrapper_returs(self):
+        project_name = "project"
+
+        self.mom_database_wrapper_mock().get_project_priority.return_value = 1000
+
+        return_value = self.project_details_query_handler.get_project_priority(project_name)
+
+        self.assertEqual(return_value['priority'], 1000)
+
+    def test_add_trigger_returns_row_id_that_the_mom_wrapper_returns(self):
+        project_name = "project"
+        host_name = "host name"
+        user_name = "user name"
+        meta_data = "meta data"
+
+        row_id = 55
+
+        self.mom_database_wrapper_mock().add_trigger.return_value = row_id
+
+        return_value = self.project_details_query_handler.add_trigger(user_name, host_name, project_name, meta_data)
+
+        self.assertEqual(return_value['row_id'], row_id)
+
+    def test_add_trigger_calls_update_trigger_quota_with_correct_projectname(self):
+        project_name = "project"
+        host_name = "host name"
+        user_name = "user name"
+        meta_data = "meta data"
+        row_id = 44
+
+        self.project_details_query_handler.add_trigger(user_name, host_name, project_name, meta_data)
+
+        self.mom_database_wrapper_mock().update_trigger_quota.assert_called_with(project_name)
+
+    def test_get_triggers_query(self):
+        user_name = 'user_name'
+
+        self.mom_database_wrapper_mock().get_triggers.return_value = \
+            multiple_triggers_result
+
+        return_value = self.project_details_query_handler.get_triggers(
+            user_name)
+
+        self.assertEqual(len(return_value['triggers']), 2)
+
+    def test_get_trigger_spec(self):
+        user_name = 'user_name'
+        trigger_id = '307'
+
+        self.mom_database_wrapper_mock().get_trigger_spec.return_value = \
+            trigger_specification
+
+        return_value = self.project_details_query_handler.get_trigger_spec(
+            user_name, trigger_id)
+
+        self.assertEqual(len(return_value['trigger_spec']),
+            len(trigger_specification))
+
+    # def test_get_trigger_id_returns_trigger_id_when_mom_wrapper_returns_an_id(self):
+    #     trigger_id = 1234
+    #
+    #     self.mom_database_wrapper_mock().get_trigger_id.return_value = trigger_id
+    #
+    #     return_value = self.project_details_query_handler.get_trigger_id(5432)
+    #
+    #     self.assertEqual(return_value['trigger_id'], trigger_id)
+    #
+    # def test_get_trigger_id_returns_status_ok_when_mom_wrapper_returns_an_id(self):
+    #     trigger_id = 1234
+    #
+    #     self.mom_database_wrapper_mock().get_trigger_id.return_value = trigger_id
+    #
+    #     return_value = self.project_details_query_handler.get_trigger_id(5432)
+    #
+    #     self.assertEqual(return_value['status'], "OK")
+    #
+    # def test_get_trigger_id_returns_status_error_when_mom_wrapper_returns_none(self):
+    #     self.mom_database_wrapper_mock().get_trigger_id.return_value = None
+    #
+    #     return_value = self.project_details_query_handler.get_trigger_id(5432)
+    #
+    #     self.assertEqual(return_value['status'], "Error")
+    #
+    # def test_get_trigger_id_returns_error_when_mom_wrapper_returns_none(self):
+    #     mom_id = 5432
+    #
+    #     self.mom_database_wrapper_mock().get_trigger_id.return_value = None
+    #
+    #     return_value = self.project_details_query_handler.get_trigger_id(mom_id)
+    #
+    #     self.assertEqual(return_value['errors'][0], "No trigger_id for mom_id: " + str(mom_id))
+    #
+    # def test_get_project_details_returns_author_email(self):
+    #     author_email = "author@email.com"
+    #     self.mom_database_wrapper_mock().get_project_details.return_value = \
+    #         {"author_email": author_email, "pi_email": "pi@email.com"}
+    #
+    #     return_value = self.project_details_query_handler.get_project_details(24343)
+    #
+    #     self.assertEqual(return_value["author_email"], author_email)
+
+    def test_get_project_details_returns_pi_email(self):
+        pi_email = "pi@email.com"
+        self.mom_database_wrapper_mock().get_project_details.return_value = \
+            {"author_email": "author@email.com", "pi_email": pi_email}
+
+        return_value = self.project_details_query_handler.get_project_details(24343)
+
+        self.assertEqual(return_value["pi_email"], pi_email)
+
+    def test_get_trigger_time_restrictions_returns_what_the_mom_wrapper_returns(self):
+        min_start_time = "2017-01-01T12:00:00"
+        max_end_time = "2017-01-02T01:00:03.0000"
+        min_duration = 300
+        max_duration = 600
+
+        return_value = {"minStartTime": min_start_time, "maxEndTime": max_end_time,
+                        "minDuration": min_duration, "maxDuration": max_duration}
+
+        self.mom_database_wrapper_mock().get_trigger_time_restrictions.return_value = return_value
+
+        result = self.project_details_query_handler.get_trigger_time_restrictions(1234)
+
+        self.assertEqual(return_value, result)
+
+    def test_get_station_selection_returns_what_the_mom_wrapper_returns(self):
+        resource_group = "SuperTerp"
+        rg_min = 1
+        rg_max = 3
+
+        self.mom_database_wrapper_mock().get_station_selection.return_value = \
+            [{"resourceGroup": resource_group, "min": rg_min, "max": rg_max}]
+
+        result = self.project_details_query_handler.get_station_selection(1234)
+
+        self.assertEqual(result[0]["resourceGroup"], resource_group)
+        self.assertEqual(result[0]["min"], rg_min)
+        self.assertEqual(result[0]["max"], rg_max)
+
+    def test_get_trigger_quota_returns_what_the_mom_wrapper_returns(self):
+        used = 5
+        max = 10
+        self.mom_database_wrapper_mock().get_trigger_quota.return_value = (used, max)
+        result = self.project_details_query_handler.get_trigger_quota(self.project_name)
+        self.assertEqual(result["used_triggers"], used)
+        self.assertEqual(result["allocated_triggers"], max)
+
+    def test_update_trigger_quota_returns_what_get_trigger_quota_returns(self):
+        used = 5
+        max = 10
+        self.mom_database_wrapper_mock().get_trigger_quota.return_value = (used, max)
+
+        result = self.project_details_query_handler.get_trigger_quota(self.project_name)
+        self.assertEqual(result["used_triggers"], used)
+        self.assertEqual(result["allocated_triggers"], max)
+
+    def test_cancel_trigger_calls_update_trigger_quota_with_correct_projectname(self):
+        project = 'myproject'
+        trigger = 1234
+        self.mom_database_wrapper_mock().get_projectname_for_trigger.return_value = project
+        self.mom_database_wrapper_mock().get_trigger_quota.return_value = (1, 10)
+
+        self.project_details_query_handler.cancel_trigger(trigger, "That's why!")
+        self.mom_database_wrapper_mock().get_projectname_for_trigger.assert_called_with(trigger)
+        self.mom_database_wrapper_mock().update_trigger_quota.assert_called_with(project)
+
+    def test_cancel_trigger_returns_what_get_trigger_quota_returns(self):
+        used = 5
+        max = 10
+        self.mom_database_wrapper_mock().get_trigger_quota.return_value = (used, max)
+
+        result = self.project_details_query_handler.cancel_trigger(1234, 'no reason')
+        self.assertEqual(result["used_triggers"], used)
+        self.assertEqual(result["allocated_triggers"], max)
+
+    def test_get_storagemanager_returns_what_the_mom_wrapper_returns(self):
+
+        return_value = "d.y.s.c.o."
+        self.mom_database_wrapper_mock().get_storagemanager.return_value = return_value
+        result = self.project_details_query_handler.get_storagemanager(1234)
+
+        self.assertEqual(return_value, result)
+
+class TestMomQueryRPC(unittest.TestCase):
+    test_id = 1234
+    trigger_id = 12345
+    message_id = str(uuid.uuid4())
+    folder = "/project/folder"
+    user_name = "user name"
+    project_name = "project name"
+    meta_data = "meta data"
+    host_name = "host name"
+    job_type = "observation"
+    status = "opened"
+
+    qpid_message = Message({
+        str(test_id): {
+                'project_mom2id': '4567',
+                'project_name': 'foo',
+                'project_description': 'bar',
+                'object_mom2id': str(test_id)
+            }
+        },
+        properties = {
+            "SystemName": "LOFAR",
+            "MessageType": "ReplyMessage",
+            "MessageId": message_id,
+            "status": "OK"
+        })
+
+    qpid_message_get_triggers_single_trigger = Message(
+        {"triggers": single_trigger_result},
+        properties =
+        {
+            "SystemName": "LOFAR",
+            "MessageType": "ReplyMessage",
+            "MessageId": message_id,
+            "status": "OK"
+        })
+
+    qpid_message_get_triggers_multiple_triggers = Message(
+        {"triggers": multiple_triggers_result},
+        properties =
+        {
+            "SystemName": "LOFAR",
+            "MessageType": "ReplyMessage",
+            "MessageId": message_id,
+            "status": "OK"
+        })
+
+    qpid_message_get_trigger_spec = Message(
+        {"trigger_spec": trigger_specification},
+        properties =
+        {
+            "SystemName": "LOFAR",
+            "MessageType": "ReplyMessage",
+            "MessageId": message_id,
+            "status": "OK"
+        })
+
+    qpid_message_is_user_operator_true = Message(
+        {"is_operator": True},
+        properties =
+        {
+            "SystemName": "LOFAR",
+            "MessageType": "ReplyMessage",
+            "MessageId": message_id,
+            "status": "OK"
+        })
+
+    qpid_message_is_user_operator_false = Message(
+        {"is_operator": False},
+        properties =
+        {
+            "SystemName": "LOFAR",
+            "MessageType": "ReplyMessage",
+            "MessageId": message_id,
+            "status": "OK"
+        })
+
+    qpid_message_is_project_active_true = Message({"active": True},
+                                                      properties = {
+                                                          "SystemName": "LOFAR",
+                                                          "MessageType": "ReplyMessage",
+                                                          "MessageId": message_id,
+                                                          "status": "OK"
+                                                      })
+
+    qpid_message_project_exists_true = Message({"exists": True},
+                                                   properties = {
+                                                       "SystemName": "LOFAR",
+                                                       "MessageType": "ReplyMessage",
+                                                       "MessageId": message_id,
+                                                       "status": "OK"
+                                                   })
+    qpid_message_authorized_true = Message({"authorized": True},
+                                               properties = {
+                                                   "SystemName": "LOFAR",
+                                                   "MessageType": "ReplyMessage",
+                                                   "MessageId": message_id,
+                                                   "status": "OK"
+                                               })
+
+    qpid_message_allows_true = Message({"allows": True},
+                                           properties = {
+                                               "SystemName": "LOFAR",
+                                               "MessageType": "ReplyMessage",
+                                               "MessageId": message_id,
+                                               "status": "OK"
+                                           })
+
+    qpid_message_priority_1000 = Message({"priority": 1000},
+                                             properties = {
+                                                 "SystemName": "LOFAR",
+                                                 "MessageType": "ReplyMessage",
+                                                 "MessageId": message_id,
+                                                 "status": "OK"
+                                             })
+
+    qpid_message_get_trigger_id = Message({"trigger_id": trigger_id, "status": "OK"},
+                                              properties = {
+                                                  "SystemName": "LOFAR",
+                                                  "MessageType": "ReplyMessage",
+                                                  "MessageId": message_id,
+                                                  "status": "OK"
+                                              })
+
+    qpid_message_add_trigger_row_id = 33
+    qpid_message_add_trigger = Message({"row_id": qpid_message_add_trigger_row_id},
+                                           properties = {
+                                               "SystemName": "LOFAR",
+                                               "MessageType": "ReplyMessage",
+                                               "MessageId": message_id,
+                                               "status": "OK"
+                                           })
+
+    author_email = "author@example.com"
+    pi_email = "pi@example.com"
+    qpid_message_get_project_details = Message({"author_email": author_email, "pi_email": pi_email},
+                                                   properties = {
+                                                       "SystemName": "LOFAR",
+                                                       "MessageType": "ReplyMessage",
+                                                       "MessageId": message_id,
+                                                       "status": "OK"
+                                                   })
+
+    test_priority = 42
+    qpid_message_get_project_priorities_for_objects = Message({str(test_id): test_priority},
+                                                                  properties = {
+                                                                      "SystemName": "LOFAR",
+                                                                      "MessageType": "ReplyMessage",
+                                                                      "MessageId": message_id,
+                                                                      "status": "OK"
+                                                                  })
+
+    min_start_time = "2017-01-01"
+    max_end_time = "2017-01-02"
+    min_duration = 300
+    max_duration = 600
+    qpid_message_get_time_restrictions = Message({"minStartTime": min_start_time,
+                                                      "maxEndTime": max_end_time,
+                                                      "minDuration": min_duration,
+                                                      "maxDuration": max_duration},
+                                                     properties = {
+                                                         "SystemName": "LOFAR",
+                                                         "MessageType": "ReplyMessage",
+                                                         "MessageId": message_id,
+                                                         "status": "OK"
+                                                     })
+
+    resourceGroup = "SuperTerp"
+    rg_min = 1
+    rg_max = 3
+    qpid_message_get_station_selection = Message([{"resourceGroup": resourceGroup, "min": rg_min, "max": rg_max}],
+                                                     properties = {
+                                                         "SystemName": "LOFAR",
+                                                         "MessageType": "ReplyMessage",
+                                                         "MessageId": message_id,
+                                                         "status": "OK"
+                                                     })
+    used_triggers = 1
+    allocated_triggers = 10
+    qpid_message_get_trigger_quota = Message({"used_triggers": used_triggers, "allocated_triggers": allocated_triggers},
+                                                     properties = {
+                                                         "SystemName": "LOFAR",
+                                                         "MessageType": "ReplyMessage",
+                                                         "MessageId": message_id,
+                                                         "status": "OK"
+                                                     })
+
+    def setUp(self):
+        # the mock library had difficulty to mock ToBus and FromBus probably to some weir naming issue.
+        # so mocking is done on QPID messaging level.
+
+        self.momrpc = MoMQueryRPC('busname', DEFAULT_MOMQUERY_SERVICENAME)
+        self.sender_mock = mock.MagicMock()
+
+        self.receiver_mock = mock.MagicMock()
+        self.receiver_mock.link.remote_source.address = "address"
+
+        connection_patcher = mock.patch('lofar.messaging.messagebus.proton.utils.BlockingConnection')
+        self.addCleanup(connection_patcher.stop)
+        self.connection_mock = connection_patcher.start()
+
+        self.connection_mock.Message = Message
+        self.connection_mock().create_receiver.return_value = self.receiver_mock
+
+        logger_patcher = mock.patch('lofar.mom.momqueryservice.momqueryrpc.logger')
+        self.addCleanup(logger_patcher.stop)
+        self.logger_mock = logger_patcher.start()
+
+    def test_object_details_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message
+
+        result = self.momrpc.getObjectDetails(self.test_id)
+
+        self.assertEquals(1, len(list(result.keys())))
+        self.assertEquals(self.test_id, list(result.keys())[0])
+        self.assertTrue('project_mom2id' in result[self.test_id])
+        self.assertTrue('project_name' in result[self.test_id])
+        self.assertTrue('project_description' in result[self.test_id])
+
+    def test_is_user_operator_logs_before_query(self):
+        self.receiver_mock.receive.return_value = \
+            self.qpid_message_is_user_operator_false
+
+        self.momrpc.isUserOperator(self.user_name)
+
+        self.logger_mock.info.assert_any_call("Requesting if user %s is an operator", self.user_name)
+
+    def test_is_user_operator_logs_after_query_1(self):
+        self.receiver_mock.receive.return_value = \
+            self.qpid_message_is_user_operator_true
+
+        self.momrpc.isUserOperator(self.user_name)
+
+        self.logger_mock.info.assert_any_call("User %s is %san operator", self.user_name, '')
+
+    def test_is_user_operator_logs_after_query_2(self):
+        self.receiver_mock.receive.return_value = \
+            self.qpid_message_is_user_operator_false
+
+        self.momrpc.isUserOperator(self.user_name)
+
+        self.logger_mock.info.assert_any_call("User %s is %san operator", self.user_name, 'not ')
+
+    def test_is_user_operator_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_is_user_operator_true
+
+        result = self.momrpc.isUserOperator(self.user_name)
+
+        self.assertTrue(result['is_operator'])
+
+    def test_is_project_active_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_is_project_active_true
+
+        result = self.momrpc.isProjectActive(self.project_name)
+
+        self.assertTrue(result['active'])
+
+    def test_is_project_active_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_is_project_active_true
+
+        self.momrpc.isProjectActive(self.project_name)
+
+        self.logger_mock.info.assert_any_call("Requesting if project: %s is active", self.project_name)
+
+    def test_is_project_active_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_is_project_active_true
+
+        result = self.momrpc.isProjectActive(self.project_name)
+
+        self.logger_mock.info.assert_any_call("Received Project is active: %s", result)
+
+    def test_folder_exists_active_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_project_exists_true
+
+        result = self.momrpc.folderExists(self.folder)
+
+        self.assertTrue(result['exists'])
+
+    def test_is_project_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_project_exists_true
+
+        self.momrpc.folderExists(self.folder)
+
+        self.logger_mock.info.assert_any_call("Requesting folder: %s exists", self.folder)
+
+    def test_is_project_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_project_exists_true
+
+        result = self.momrpc.folderExists(self.folder)
+
+        self.logger_mock.info.assert_any_call("Received folder exists: %s", result)
+
+    def test_authorized_add_with_status_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_authorized_true
+
+        self.momrpc.authorized_add_with_status(self.user_name, self.project_name, self.job_type, self.status)
+
+        self.logger_mock.info.assert_any_call(
+            "Requesting AutorizedAddWithStatus for user_name: %s project_name: %s job_type: %s status: %s",
+            self.user_name, self.project_name, self.job_type, self.status)
+
+    def test_authorized_add_with_status_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_authorized_true
+
+        result = self.momrpc.authorized_add_with_status(self.user_name, self.project_name, self.job_type, self.status)
+
+        self.logger_mock.info.assert_any_call(
+            "Received AutorizedAddWithStatus for user_name: %s project_name: %s job_type: %s status: %s result: %s",
+            self.user_name, self.project_name, self.job_type, self.status, result)
+
+    def test_authorized_add_with_status_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_authorized_true
+
+        result = self.momrpc.authorized_add_with_status(self.user_name, self.project_name, self.job_type, self.status)
+
+        self.assertTrue(result['authorized'])
+
+    def test_allows_triggers_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_allows_true
+
+        self.momrpc.allows_triggers(self.project_name)
+
+        self.logger_mock.info.assert_any_call("Requesting AllowsTriggers for project_name: %s", self.project_name)
+
+    def test_allows_triggers_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_allows_true
+
+        result = self.momrpc.allows_triggers(self.project_name)
+
+        self.logger_mock.info.assert_any_call(
+            "Received AllowsTriggers for project_name (%s): %s", self.project_name, result)
+
+    def test_allows_triggers_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_allows_true
+
+        result = self.momrpc.allows_triggers(self.project_name)
+
+        self.assertTrue(result['allows'])
+
+    def test_get_project_priority_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_priority_1000
+
+        self.momrpc.get_project_priority(self.project_name)
+
+        self.logger_mock.info.assert_any_call("Requestion GetProjectPriority for project_name: %s", self.project_name)
+
+    def test_get_project_priority_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_priority_1000
+
+        result = self.momrpc.get_project_priority(self.project_name)
+
+        self.logger_mock.info.assert_any_call(
+            "Received GetProjectPriority for project_name (%s): %s", self.project_name, result)
+
+    def test_get_project_priority_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_priority_1000
+
+        result = self.momrpc.get_project_priority(self.project_name)
+
+        self.assertEqual(result['priority'], 1000)
+
+    def test_add_trigger_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_add_trigger
+        self.receiver_mock.link.remote_source.address = "address"
+
+        self.momrpc.add_trigger(self.user_name, self.host_name, self.project_name, self.meta_data)
+
+        self.logger_mock.info.assert_any_call(
+            "Requestion AddTrigger for user_name: %s, host_name: %s, project_name: %s and meta_data: %s",
+            self.user_name, self.host_name, self.project_name, self.meta_data)
+
+    def test_add_trigger_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_add_trigger
+
+        result = self.momrpc.add_trigger(self.user_name, self.host_name, self.project_name, self.meta_data)
+
+        self.logger_mock.info.assert_any_call(
+            "Received AddTrigger for user_name (%s), host_name(%s), project_name(%s) and meta_data(%s): %s",
+            self.user_name, self.host_name, self.project_name, self.meta_data, result)
+
+    def test_add_trigger_query(self):
+        self.receiver_mock.link.remote_source.address = "address"
+        self.receiver_mock.receive.return_value = self.qpid_message_add_trigger
+
+        result = self.momrpc.add_trigger(self.user_name, self.host_name, self.project_name, self.meta_data)
+
+        self.assertEqual(result['row_id'], self.qpid_message_add_trigger_row_id)
+
+    def test_get_triggers_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_triggers_single_trigger
+
+        self.momrpc.get_triggers(self.user_name)
+
+        self.logger_mock.info.assert_any_call("Requesting triggers for "
+            "user %s", self.user_name)
+
+    def test_get_triggers_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_triggers_single_trigger
+
+        self.momrpc.get_triggers(self.user_name)
+
+        self.logger_mock.info.assert_any_call("Received %d triggers for user %s", 1, self.user_name)
+
+    def test_get_triggers_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_triggers_multiple_triggers
+
+        result = self.momrpc.get_triggers(self.user_name)
+
+        self.assertEqual(len(result['triggers']), 2)
+
+    def test_get_trigger_spec_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_spec
+
+        self.momrpc.get_trigger_spec(self.user_name, self.trigger_id)
+
+        self.logger_mock.info.assert_any_call("Requesting trigger spec for user %s and trigger id %s", self.user_name, self.trigger_id)
+
+    def test_get_trigger_spec_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_spec
+
+        trigger_spec = self.momrpc.get_trigger_spec(self.user_name, self.trigger_id)
+
+        self.logger_mock.info.assert_any_call("Received a trigger spec with size %d for trigger id %s of user %s", len(trigger_spec['trigger_spec']), self.trigger_id, self.user_name)
+
+    def test_get_trigger_spec(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_spec
+
+        result = self.momrpc.get_trigger_spec(self.user_name,
+            self.trigger_id)
+
+        self.assertEqual(len(result['trigger_spec']),
+            len(trigger_specification))
+
+    # @mock.patch('lofar.messaging.messagebus.proton.utils.BlockingConnection')
+    # def test_get_trigger_id_logs_before_query(self):
+    #     self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_id
+    #
+    #     mom_id = 6789
+    #
+    #     qpid_mock.Message = Message
+    #     qpid_mock.Connection().session().senders = [self.sender_mock]
+    #     qpid_mock.Connection().session().next_receiver.return_value = self.receiver_mock
+    #
+    #     self.momrpc.get_trigger_id(mom_id)
+    #
+    #     self.logger_mock.info.assert_any_call("Requesting GetTriggerId for mom_id: %s", mom_id)
+    #
+    # @mock.patch('lofar.messaging.messagebus.proton.utils.BlockingConnection')
+    # def test_get_trigger_id_logs_after_query(self):
+    #     self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_id
+    #
+    #     mom_id = 6789
+    #
+    #     qpid_mock.Message = Message
+    #     qpid_mock.Connection().session().senders = [self.sender_mock]
+    #     qpid_mock.Connection().session().next_receiver.return_value = self.receiver_mock
+    #
+    #     result = self.momrpc.get_trigger_id(mom_id)
+    #
+    #     self.logger_mock.info.assert_any_call("Received trigger_id: %s", result)
+    #
+    # @mock.patch('lofar.messaging.messagebus.proton.utils.BlockingConnection')
+    # def test_get_trigger_id_query(self):
+    #     self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_id
+    #
+    #     mom_id = 6789
+    #
+    #     qpid_mock.Message = Message
+    #     qpid_mock.Connection().session().senders = [self.sender_mock]
+    #     qpid_mock.Connection().session().next_receiver.return_value = self.receiver_mock
+    #
+    #     result = self.momrpc.get_trigger_id(mom_id)
+    #
+    #     self.assertEqual(result["trigger_id"], self.trigger_id)
+    #     self.assertEqual(result["status"], "OK")
+
+    def test_get_project_details_logs_before_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_project_details
+
+        mom_id = 6789
+
+        self.momrpc.get_project_details(mom_id)
+
+        self.logger_mock.info.assert_any_call("Requesting GetProjectDetails for mom_id: %s", mom_id)
+
+    def test_get_project_details_logs_after_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_project_details
+
+        mom_id = 6789
+
+        result = self.momrpc.get_project_details(mom_id)
+
+        self.logger_mock.info.assert_any_call("Received project_details: %s", result)
+
+    def test_get_project_details_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_project_details
+
+        mom_id = 6789
+
+        result = self.momrpc.get_project_details(mom_id)
+
+        self.assertEqual(result["author_email"], self.author_email)
+        self.assertEqual(result["pi_email"], self.pi_email)
+
+    def test_get_project_priorities_for_objects_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_project_priorities_for_objects
+
+        result = self.momrpc.get_project_priorities_for_objects(self.test_id)
+
+        self.assertEquals(1, len(list(result.keys())))
+        self.assertEquals(self.test_id, list(result.keys())[0])
+        self.assertEqual(self.test_priority, result[self.test_id])
+
+    def test_get_time_restrictions_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_time_restrictions
+
+        result = self.momrpc.get_trigger_time_restrictions(self.test_id)
+
+        self.assertEqual(result["minStartTime"], self.min_start_time)
+        self.assertEqual(result["maxEndTime"], self.max_end_time)
+        self.assertEqual(result["minDuration"], self.min_duration)
+        self.assertEqual(result["maxDuration"], self.max_duration)
+
+    def test_get_station_selection_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_station_selection
+
+        result = self.momrpc.get_station_selection(self.test_id)
+
+        self.assertEqual(result[0]["resourceGroup"], self.resourceGroup)
+        self.assertEqual(result[0]["min"], self.rg_min)
+        self.assertEqual(result[0]["max"], self.rg_max)
+
+    def test_get_trigger_quota_query(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_quota
+
+        result = self.momrpc.get_trigger_quota(self.test_id)
+
+        self.assertEqual(result["used_triggers"], self.used_triggers)
+        self.assertEqual(result["allocated_triggers"], self.allocated_triggers)
+
+    def test_update_trigger_quota(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_quota    # returns get quota after update
+
+        result = self.momrpc.update_trigger_quota(self.test_id)
+
+        self.assertEqual(result["used_triggers"], self.used_triggers)
+        self.assertEqual(result["allocated_triggers"], self.allocated_triggers)
+
+    def test_cancel_trigger(self):
+        self.receiver_mock.receive.return_value = self.qpid_message_get_trigger_quota    # returns get quota after update
+
+        result = self.momrpc.cancel_trigger(self.test_id, 'Because I say so')
+
+        self.assertEqual(result["used_triggers"], self.used_triggers)
+        self.assertEqual(result["allocated_triggers"], self.allocated_triggers)
+
+class TestMoMDatabaseWrapper(unittest.TestCase):
+    database_credentials = Credentials()
+    database_credentials.host = "localhost"
+    database_credentials.user = "root"
+    database_credentials.database = "testdb"
+    database_credentials.password = None
+    database_credentials.config = {"useradministration_database": "useradministration",
+                                   "momprivilege_database": "momprivilege"}
+
+    project_name = "project name"
+    folder = "/project/folder1/folder2"
+
+    user_name = "user name"
+    meta_data = "meta data"
+    host_name = "host name"
+    job_type = "observation"
+    status = "opened"
+
+    mom_id = 84903
+    trigger_id = 294093
+
+    project_priority = 42
+
+    def setUp(self):
+        logger_patcher = mock.patch('lofar.mom.momqueryservice.momqueryservice.logger')
+        self.addCleanup(logger_patcher.stop)
+        self.logger_mock = logger_patcher.start()
+
+        mysql_patcher = mock.patch('lofar.mom.momqueryservice.momqueryservice.connector')
+        self.addCleanup(mysql_patcher.stop)
+        self.mysql_mock = mysql_patcher.start()
+
+        self.mom_database_wrapper = MoMDatabaseWrapper(self.database_credentials)
+
+    def test_is_user_operator_logs_start_of_query(self):
+        self.mom_database_wrapper.is_user_operator(self.user_name)
+
+        self.logger_mock.info.assert_any_call("is_user_operator for user name %s", self.user_name)
+
+    def test_is_user_operator_true_logs_end_of_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = \
+            [{'1': 1}]
+
+        self.mom_database_wrapper.is_user_operator(self.user_name)
+
+        self.logger_mock.info.assert_any_call("%s is %san operator.", self.user_name, "")
+
+    def test_is_user_operator_false_logs_end_of_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        self.mom_database_wrapper.is_user_operator(self.user_name)
+
+        self.logger_mock.info.assert_any_call("%s is %san operator.", self.user_name, "not ")
+
+    def test_is_user_operator_return_true_when_query_returns_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = \
+            [{'1': 1}]
+
+        return_value = self.mom_database_wrapper.is_user_operator(
+            self.user_name)
+
+        self.assertTrue(return_value)
+
+    def test_is_user_operator_return_false_when_query_returns_no_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        return_value = self.mom_database_wrapper.is_user_operator(self.user_name)
+
+        self.assertFalse(return_value)
+
+    def test_is_project_active_logs_start_of_query(self):
+        self.mom_database_wrapper.is_project_active(self.project_name)
+
+        self.logger_mock.info.assert_any_call("is_project_active for project name: %s", self.project_name)
+
+    def test_is_project_active_logs_end_of_query(self):
+        is_active = False
+
+        self.mom_database_wrapper.is_project_active(self.project_name)
+
+        self.logger_mock.info.assert_any_call("is_project_active for project (%s): %s", self.project_name, is_active)
+
+    def test_is_project_active_return_true_when_query_returns_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'1': 1}]
+
+        return_value = self.mom_database_wrapper.is_project_active(self.project_name)
+
+        self.assertTrue(return_value)
+
+    def test_is_project_active_return_false_when_query_returns_no_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        return_value = self.mom_database_wrapper.is_project_active(self.project_name)
+
+        self.assertFalse(return_value)
+
+    def test_folder_exists_logs_start_of_query(self):
+        self.mom_database_wrapper.folder_exists(self.folder)
+
+        self.logger_mock.info.assert_any_call("folder_exists for folder: %s", self.folder)
+
+    def test_folder_exists_logs_stop_of_query(self):
+        exists = False
+
+        self.mom_database_wrapper.folder_exists(self.folder)
+
+        self.logger_mock.info.assert_any_call("folder_exists for folder (%s): %s", self.folder, exists)
+
+    def test_folder_exists_returns_true_when_query_returns_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'1': 1}]
+
+        return_value = self.mom_database_wrapper.folder_exists(self.folder)
+
+        self.assertTrue(return_value)
+
+    def test_folder_exists_returns_false_when_query_returns_no_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        return_value = self.mom_database_wrapper.folder_exists(self.folder)
+
+        self.assertFalse(return_value)
+
+    def test_folder_exists_raises_ValueError_on_empty_folder_path(self):
+        empty_path = ""
+
+        with self.assertRaises(ValueError) as exception:
+            self.mom_database_wrapper.folder_exists(empty_path)
+
+        self.assertEqual(str(exception.exception), "Folder path () does not start with a /")
+
+    def test_folder_exists_raises_ValueError_on_folder_path_with_no_parent(self):
+        no_parent_path = "/"
+
+        with self.assertRaises(ValueError) as exception:
+            self.mom_database_wrapper.folder_exists(no_parent_path)
+
+        self.assertEqual(str(exception.exception), "Folder path (/) should minimally have a project")
+
+    def test_authorized_add_with_status_logs_start_of_query(self):
+        self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name, self.job_type,
+                                                             self.status)
+
+        self.logger_mock.info.assert_any_call(
+            "authorized_add_with_status for user_name: %s project_name: %s job_type: %s status: %s",
+            self.user_name, self.project_name, self.job_type, self.status)
+
+    def test_authorized_add_with_status_logs_stop_of_query(self):
+        authorized = False
+
+        self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name, self.job_type,
+                                                             self.status)
+
+        self.logger_mock.info.assert_any_call(
+            "authorized_add_with_status for user_name: %s project_name: %s job_type: %s status: %s result: %s",
+            self.user_name, self.project_name, self.job_type, self.status, authorized)
+
+    def test_authorized_add_with_status_returns_true_when_query_returns_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'1': 1}]
+
+        return_value = self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                            self.job_type, self.status)
+        self.assertTrue(return_value)
+
+    def test_authorized_add_with_status_returns_false_when_query_returns_no_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        return_value = self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                            self.job_type, self.status)
+
+        self.assertFalse(return_value)
+
+    def test_authorized_add_with_status_throws_ValueError_when_status_is_not_approved_or_opened(self):
+        with self.assertRaises(ValueError) as exception:
+            self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                 self.job_type, "aborted")
+
+        self.assertEqual(str(exception.exception), "status should be either 'opened' or 'approved'")
+
+    def test_authorized_add_with_status_throws_ValueError_when_job_type_is_not_observation_or_pipeline_ingest(self):
+        with self.assertRaises(ValueError) as exception:
+            self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                 "measurment", self.status)
+
+        self.assertEqual(str(exception.exception), "job_type should be either 'observation', 'ingest' or 'pipeline'")
+
+    def test_allows_triggers_logs_start_of_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'allowtriggers': True}]
+
+        self.mom_database_wrapper.allows_triggers(self.project_name)
+
+        self.logger_mock.info.assert_any_call("allows_triggers for project_name: %s", self.project_name)
+
+    def test_allows_triggers_logs_end_of_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'allowtriggers': True}]
+
+        result = self.mom_database_wrapper.allows_triggers(self.project_name)
+
+        self.logger_mock.info.assert_any_call(
+            "allows_triggers for project_name (%s) result: %s", self.project_name, result)
+
+    def test_allows_triggers_returns_throws_exception_when_query_returns_no_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        with self.assertRaises(ValueError) as exception:
+            self.mom_database_wrapper.allows_triggers(self.project_name)
+
+        self.assertEqual(str(exception.exception), "project name (%s) not found in MoM database" % self.project_name)
+
+    def test_allows_triggers_returns_true_when_query_returns_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'allowtriggers': True}]
+
+        return_value = self.mom_database_wrapper.allows_triggers(self.project_name)
+
+        self.assertTrue(return_value)
+
+    def test_get_project_priority_logs_start_of_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'priority': 1000}]
+
+        self.mom_database_wrapper.get_project_priority(self.project_name)
+
+        self.logger_mock.info.assert_any_call("get_project_priority for project_name: %s", self.project_name)
+
+    def test_get_project_priority_logs_end_of_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'priority': 1000}]
+
+        return_value = self.mom_database_wrapper.get_project_priority(self.project_name)
+
+        self.logger_mock.info.assert_any_call(
+            "get_project_priority for project_name (%s): %s", self.project_name, return_value)
+
+    def test_get_project_priority_returns_priority_when_query_returns_a_row(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [{'priority': 1000}]
+
+        return_value = self.mom_database_wrapper.get_project_priority(self.project_name)
+
+        self.assertEqual(return_value, 1000)
+
+    def test_get_project_priority_throws_exception_when_query_returns_no_row(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        with self.assertRaises(ValueError) as exception:
+            self.mom_database_wrapper.get_project_priority(self.project_name)
+
+        self.assertEqual(str(exception.exception), "project name (%s) not found in MoM database" % self.project_name)
+
+    def test_add_trigger_logs_start_of_query(self):
+        self.mysql_mock.connect().cursor().lastrowid = 34
+
+        self.mom_database_wrapper.add_trigger(self.user_name, self.host_name, self.project_name, self.meta_data)
+
+        self.logger_mock.info.assert_any_call(
+            "add_trigger for user_name: %s, host_name: %s, project_name: %s, meta_data: %s",
+            self.user_name, self.host_name, self.project_name, self.meta_data)
+
+    def test_add_trigger_logs_end_of_query(self):
+        self.mysql_mock.connect().cursor().lastrowid = 34
+
+        result = self.mom_database_wrapper.add_trigger(
+            self.user_name, self.host_name, self.project_name, self.meta_data)
+
+        self.logger_mock.info.assert_any_call(
+            "add_trigger for user_name(%s), host_name(%s), project_name(%s), meta_data(%s): %s",
+            self.user_name, self.host_name, self.project_name, self.meta_data, result)
+
+    def test_add_trigger_returns_row_id_from_query(self):
+        self.mysql_mock.connect().cursor().lastrowid = 34
+
+        result = self.mom_database_wrapper.add_trigger(
+            self.user_name, self.host_name, self.project_name, self.meta_data)
+
+        self.assertEqual(result, 34)
+
+    def test_get_trigger_id_logs_start_of_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = \
+            [{'misc': '{"trigger_id": ' + str(self.trigger_id) + '}'}]
+
+        self.mom_database_wrapper.get_trigger_id(self.mom_id)
+
+        self.logger_mock.info.assert_any_call("get_trigger_id for mom_id: %s", self.mom_id)
+
+    def test_get_trigger_id_logs_end_of_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = \
+            [{'misc': '{"trigger_id": ' + str(self.trigger_id) + '}'}]
+
+        self.mom_database_wrapper.get_trigger_id(self.mom_id)
+
+        self.logger_mock.info.assert_any_call("get_trigger_id for mom_id (%s): %s", self.mom_id, self.trigger_id)
+
+    def test_get_trigger_id_returns_row_id_from_query(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = \
+            [{'misc': '{"trigger_id": ' + str(self.trigger_id) + '}'}]
+
+        result = self.mom_database_wrapper.get_trigger_id(self.mom_id)
+
+        self.assertEqual(result, self.trigger_id)
+
+    def test_get_triggers_query(self):
+        user_name = 'user_name'
+        result = \
+        [
+            {
+                'mom_id': self.mom_id,
+                'projectname': self.project_name,
+                'arrivaltime': datetime.strptime('2017-02-24 15:14:05', '%Y-%m-%d %H:%M:%S'),
+                'type': self.job_type,
+                'code': self.status,
+                'momurl_id': self.mom_id,
+                'id': '1'
+            },
+            {
+                'mom_id': self.mom_id,
+                'projectname': self.project_name,
+                'arrivaltime': datetime.strptime('2017-02-24 16:14:05', '%Y-%m-%d %H:%M:%S'),
+                'type': self.job_type,
+                'code': self.status,
+                'momurl_id': self.mom_id,
+                'id': '2'
+        }
+        ]
+
+        self.mysql_mock.connect().cursor().fetchall.return_value = result
+
+        return_value = self.mom_database_wrapper.get_triggers(
+            user_name)
+
+        self.assertEqual(len(return_value), len(multiple_triggers_result))
+
+    def test_get_trigger_spec_no_user_name(self):
+        user_name = None
+        trigger_id = '307'
+
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.get_trigger_spec(
+                user_name, trigger_id)
+
+    def test_get_trigger_spec_no_trigger_id(self):
+        user_name = 'user_name'
+        trigger_id = None
+
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.get_trigger_spec(
+                user_name, trigger_id)
+
+    def test_get_trigger_spec(self):
+        user_name = 'user_name'
+        trigger_id = '307'
+
+        self.mysql_mock.connect().cursor().fetchall.return_value = \
+            {0: {'metadata': trigger_specification}}
+
+        return_value = self.mom_database_wrapper.get_trigger_spec(
+            user_name, trigger_id)
+
+        self.assertEqual(len(return_value), len(trigger_specification))
+
+    def test_get_project_details_logs_start_of_query(self):
+        details_result = [{"name": "Contact author", "email": "author@example.com"},
+                          {"name": "Pi", "email": "pi@example.com"}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        self.mom_database_wrapper.get_project_details(self.mom_id)
+
+        self.logger_mock.info.assert_any_call("get_project_details for mom_id: %s", self.mom_id)
+
+    def test_get_project_details_logs_end_of_query(self):
+        expected_result = {"pi_email": "pi@example.com", "author_email": "author@example.com"}
+        details_result = [{"name": "Contact author", "email": "author@example.com"},
+                          {"name": "Pi", "email": "pi@example.com"}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        self.mom_database_wrapper.get_project_details(self.mom_id)
+
+        self.logger_mock.info.assert_any_call("get_project_details for mom_id (%s): %s", self.mom_id, expected_result)
+
+    def test_get_project_details_returns_details(self):
+        expected_result = {"pi_email": "pi@example.com", "author_email": "author@example.com"}
+        details_result = [{"name": "Contact author", "email": "author@example.com"},
+                          {"name": "Pi", "email": "pi@example.com"}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        result = self.mom_database_wrapper.get_project_details(self.mom_id)
+
+        self.assertEqual(result, expected_result)
+
+    def test_get_project_priorities_for_objects_returns_priorities(self):
+        expected_result = {self.mom_id: self.project_priority}
+        details_result = [{"project_priority": self.project_priority, "object_mom2id": self.mom_id}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        result = self.mom_database_wrapper.get_project_priorities_for_objects(self.mom_id)
+
+        self.assertEqual(result, expected_result)
+
+    def test_get_station_selection_returns_info_from_misc_field(self):
+        resource_group = "SuperTerp"
+        rg_min = 1
+        rg_max = 3
+        station_selection = [{"resourceGroup": resource_group, "min": rg_min, "max": rg_max}]
+
+        expected_result = station_selection
+        details_result = [{"mom2id": self.mom_id, "mom2objecttype": self.job_type,
+                           "misc": json.dumps({"stationSelection": station_selection})}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        result = self.mom_database_wrapper.get_station_selection(self.mom_id)
+        self.assertEqual(result, expected_result)
+
+    def test_get_station_selection_on_empty_query_result(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        self.assertIsNone(self.mom_database_wrapper.get_station_selection(1234))
+
+    def test_get_station_selection_if_station_selection_not_present_in_misc(self):
+        details_result = [{"mom2id": self.mom_id, "mom2objecttype": self.job_type,
+                           "misc": json.dumps({"timeWindow": {'minDuration': 300, 'maxDuration': 300}})}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        self.assertIsNone(self.mom_database_wrapper.get_station_selection(1234))
+
+    def test_get_time_restrictions_returns_misc_field_info_from_query_result(self):
+        min_start_time = "2017-01-01T12:00:00"
+        max_end_time = "2017-01-04T01:00:00"
+        min_duration = 300
+        max_duration = 600.1
+
+        timewindow = {"minStartTime": min_start_time,
+                      "maxEndTime": max_end_time,
+                      "minDuration": min_duration,
+                      "maxDuration": max_duration}
+        details_result = [{"mom2id": self.mom_id, "mom2objecttype": self.job_type,
+                           "misc": json.dumps({"timeWindow": timewindow, "trigger_id": self.trigger_id})}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        result = self.mom_database_wrapper.get_trigger_time_restrictions(self.mom_id)
+
+        self.assertEqual(result['trigger_id'], self.trigger_id)
+        self.assertEqual(result['minStartTime'], min_start_time.replace('T', ' '))
+        self.assertEqual(result['maxEndTime'], max_end_time.replace('T', ' '))
+        self.assertEqual(result['minDuration'], timedelta(seconds = min_duration))
+        self.assertEqual(result['maxDuration'], timedelta(seconds = max_duration))
+
+    def test_get_time_restrictions_returns_None_if_no_timewindow(self):
+        details_result = [{"mom2id": self.mom_id, "mom2objecttype": self.job_type,
+                           "misc": json.dumps({"trigger_id": self.trigger_id})}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        result = self.mom_database_wrapper.get_trigger_time_restrictions(self.mom_id)
+
+        self.assertEqual(result['trigger_id'], self.trigger_id)
+        self.assertEqual(result['minStartTime'], None)
+        self.assertEqual(result['maxEndTime'], None)
+        self.assertEqual(result['minDuration'], None)
+        self.assertEqual(result['maxDuration'], None)
+
+    def test_get_time_restrictions_on_empty_query_result(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+
+        expected_sane_default = {'minStartTime': None,
+                                 'minDuration': None,
+                                 'maxDuration': None,
+                                 'maxEndTime': None,
+                                 'trigger_id': None}
+        self.assertEqual(expected_sane_default, self.mom_database_wrapper.get_trigger_time_restrictions(1234))
+
+    def test_get_time_restrictions_throws_NotImplementedError_when_misc_has_timeWindow_but_no_trigger_id(self):
+        min_start_time = "2017-01-01T12:00:00"
+        max_end_time = "2017-01-04T01:00:00"
+        min_duration = 300
+        max_duration = 600
+
+        timewindow = {"minStartTime": min_start_time,
+                      "maxEndTime": max_end_time,
+                      "minDuration": min_duration,
+                      "maxDuration": max_duration}
+
+        details_result = [{"mom2id": self.mom_id, "mom2objecttype": self.job_type,
+                           "misc": json.dumps({"timeWindow": timewindow})}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        with self.assertRaises(NotImplementedError) as ex:
+            self.mom_database_wrapper.get_trigger_time_restrictions(self.mom_id)
+            self.assertEqual(str(ex.exception), "TimeWindow specified for a non-triggered observation %s" % self.mom_id)
+
+    def test_get_trigger_quota_throws_ValueError_if_query_returns_no_rows(self):
+        details_result = []
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.get_trigger_quota(1234)
+
+    def test_get_trigger_quota_returns_values_from_query_result(self):
+        used_t = 5
+        max_t = 10
+        details_result = [{"used":used_t, "allocation": max_t}]
+        expected_result = (used_t, max_t)
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        result = self.mom_database_wrapper.get_trigger_quota(1234)
+        self.assertEqual(result, expected_result)
+
+    def test_cancel_trigger_throws_ValueError_if_update_does_not_affect_rows(self):
+        self.mysql_mock.connect().cursor().rowcount = 0
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.cancel_trigger(1234, 'no reason')
+
+    def test_cancel_trigger_does_not_raise_exception_if_queries_affect_rows(self):
+        self.mysql_mock.connect().cursor().rowcount = 1
+        self.mom_database_wrapper.cancel_trigger(1234, 'no reason')
+
+    def test_update_trigger_quota_throws_ValueError_if_select_query_returns_empty_result(self):
+        # select active trigger count
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.update_trigger_quota('myproject')
+
+    def test_update_trigger_quota_throws_ValueError_if_update_query_cannot_modify_any_rows(self):
+        # update resource use
+        self.mysql_mock.connect().cursor().fetchall.return_value = [7]    # let select pass, to see if update fails
+        self.mysql_mock.connect().cursor().rowcount = 0
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.update_trigger_quota('myproject')
+
+    def test_update_trigger_quota_does_not_raise_exception_if_select_is_not_empty_and_update_affected_rows(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = [7]    # let select pass, to see if update fails
+        self.mysql_mock.connect().cursor().rowcount = 1
+        self.mom_database_wrapper.update_trigger_quota('myproject')
+
+    def test_get_storagemanager_returns_value_from_query_result(self):
+        value = "d.y.s.c.o."
+        self.mysql_mock.connect().cursor().fetchall.return_value = \
+            [{'misc': '{"storagemanager": \"' + value + '\"}'}]
+        result = self.mom_database_wrapper.get_storagemanager(self.mom_id)
+        self.assertEqual(result, value)
+
+    def test_get_storagemanager_on_empty_query_result(self):
+        self.mysql_mock.connect().cursor().fetchall.return_value = []
+        self.assertIsNone(self.mom_database_wrapper.get_storagemanager(1234))
+
+    def test_get_storagemanager_returns_None_if_station_selection_not_present_in_misc(self):
+        details_result = [{"misc": json.dumps({"timeWindow": {'minDuration': 300, 'maxDuration': 300}})}]
+        self.mysql_mock.connect().cursor().fetchall.return_value = details_result
+
+        self.assertIsNone(self.mom_database_wrapper.get_storagemanager(1234))
+
+@unittest.skip("Skipping integration test")
+class IntegrationTestMoMDatabaseWrapper(unittest.TestCase):
+    database_credentials = Credentials()
+    database_credentials.host = "localhost"
+    database_credentials.user = "root"
+    database_credentials.database = "mom"
+    database_credentials.password = None
+    database_credentials.config = {"useradministration_database": "useradministration",
+                                   "momprivilege_database": "momprivilege"}
+
+    project_name = "project name"
+    folder = "/project/folder1/folder2"
+
+    user_name = "lofar"
+    job_type = "observation"
+    status = "opened"
+
+    trigger_id = 1002
+
+    def setUp(self):
+        logger.info('setting up test MoM database...')
+
+        self.mysqld = Mysqld()    # for a fresh one, use: self.mysqld = testing.mysqld.Mysqld()
+
+        # set up fresh connection to the mom (!) database.
+        self.connection = connector.connect(**self.mysqld.dsn())
+        self.connection.cursor().execute('USE mom')    # Attention: the dsn actually points to a different db
+        self.connection.commit()
+
+        # create db wrapper for tests
+        self.database_credentials.port = self.mysqld.dsn()['port']
+        self.mom_database_wrapper = MoMDatabaseWrapper(self.database_credentials)
+
+        logger.info('...finished setting up test MoM database')
+
+    def tearDown(self):
+        self.connection.close()
+        self.mysqld.stop()
+
+    def execute(self, query, fetch = False):
+        cursor = self.connection.cursor(dictionary = True)
+        cursor.execute(query)
+        ret = None
+        if fetch:
+            ret = cursor.fetchall()
+        self.connection.commit()
+        cursor.close()
+        return ret
+
+    def test_is_project_active_returns_false_on_empty_mom2object_table(self):
+        self.assertFalse(self.mom_database_wrapper.is_project_active("project_name"))
+
+    def test_is_project_active_returns_true_when_project_with_correct_name_and_status_is_available(self):
+        self.execute("insert into mom2object values(169900, NULL, NULL, 183526, 'PROJECT', 'LC0_011', "
+                     "'Pulsar timing with LOFAR', NULL, 966855, NULL, NULL, 0, 0, 0)")
+        self.execute("insert into mom2objectstatus values(966855, 'Pizzo, Dr. Roberto Francesco', "
+                     "'Administrative, LTA User, manager, Operator, Prospective, Review Manager, Reviewer, Scientist, "
+                     "System Scientist, Telescope Astronomer', 531, 7, 169900, 0, '2012-12-18 09:47:50', 0)")
+
+        self.assertTrue(self.mom_database_wrapper.is_project_active("LC0_011"))
+
+    def test_folder_exists_returns_false_on_empty_table(self):
+        self.assertFalse(self.mom_database_wrapper.folder_exists("/project/folder1/folder2"))
+
+    def test_folder_exists_returns_true_when_folder_exists(self):
+        self.execute("insert into mom2object values(1, NULL, NULL, 11, 'PROJECT', 'project', "
+                     "'Pulsar timing with LOFAR', NULL, 966855, NULL, NULL, 0, 0, 0)")
+        self.execute("insert into mom2object values(2, 1, NULL, 22, 'FOLDER', 'folder1', "
+                     "'Pulsar timing with LOFAR', NULL, 966855, NULL, NULL, 0, 0, 0)")
+        self.execute("insert into mom2object values(3, 2, NULL, 33, 'FOLDER', 'folder2', "
+                     "'Pulsar timing with LOFAR', NULL, 966855, NULL, NULL, 0, 0, 0)")
+
+        self.assertTrue(self.mom_database_wrapper.folder_exists(self.folder))
+
+    def test_folder_exists_returns_true_when_folder_exists_and_path_ends_on_forward_slash(self):
+        self.execute("insert into mom2object values(1, NULL, NULL, 11, 'PROJECT', 'project', "
+                     "'Pulsar timing with LOFAR', NULL, 966855, NULL, NULL, 0, 0, 0)")
+        self.execute("insert into mom2object values(2, 1, NULL, 22, 'FOLDER', 'folder1', "
+                     "'Pulsar timing with LOFAR', NULL, 966855, NULL, NULL, 0, 0, 0)")
+        self.execute("insert into mom2object values(3, 2, NULL, 33, 'FOLDER', 'folder2', "
+                     "'Pulsar timing with LOFAR', NULL, 966855, NULL, NULL, 0, 0, 0)")
+
+        self.assertTrue(self.mom_database_wrapper.folder_exists(self.folder))
+
+    def test_authorized_add_with_status_returns_false_on_empty_db(self):
+        self.assertFalse(self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                              self.job_type, self.status))
+
+    def test_authorized_add_with_status_returns_true_on_when_rights_are_on_system_role(self):
+        # insert user
+        self.execute("insert into useradministration.useraccount "
+                     "values(1, 1, '%s', '26dcf77e2de89027e8895baea8e45057', 'sNgmwwN7fk')"
+                     % self.user_name)
+        # setup status
+        self.execute("insert into status values(101, 'opened', 'OBSERVATION', '')")
+        self.execute("insert into status values(104, 'approved', 'OBSERVATION', "
+                     "'The specification is in accordance with wishes of the PI.')")
+        # setup status transitions
+        self.execute("insert into momprivilege.statustransition values(1003, 0, 101)")
+        self.execute("insert into momprivilege.statustransition values(1059, 101, 104)")
+        # setup transition role
+        self.execute("insert into momprivilege.statustransitionrole "
+                     "values(1, 1003, 9, 'nl.astron.useradministration.data.entities.SystemRole')")
+        self.execute("insert into momprivilege.statustransitionrole "
+                     "values(2, 1059, 9, 'nl.astron.useradministration.data.entities.SystemRole')")
+        # user account system role
+        self.execute("insert into useradministration.useraccountsystemrole values(533, 1, 9, 0)")
+
+        self.assertTrue(self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                             'observation', "approved"))
+        self.assertTrue(self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                             'observation', "opened"))
+
+    def test_authorized_add_with_status_returns_true_on_when_rights_are_on_project_role(self):
+        # insert user
+        self.execute("insert into useradministration.useraccount "
+                     "values(1, 1, '%s', '26dcf77e2de89027e8895baea8e45057', 'sNgmwwN7fk')"
+                     % self.user_name)
+        # setup status
+        self.execute("insert into status values(101, 'opened', 'OBSERVATION', '')")
+        self.execute("insert into status values(104, 'approved', 'OBSERVATION', "
+                     "'The specification is in accordance with wishes of the PI.')")
+        # setup status transitions
+        self.execute("insert into momprivilege.statustransition values(1003, 0, 101)")
+        self.execute("insert into momprivilege.statustransition values(1059, 101, 104)")
+        # setup transition role
+        self.execute("insert into momprivilege.statustransitionrole "
+                     "values(1, 1003, 1, 'nl.astron.mom2.data.entities.ProjectRole')")
+        self.execute("insert into momprivilege.statustransitionrole "
+                     "values(2, 1059, 1, 'nl.astron.mom2.data.entities.ProjectRole')")
+        # setup project role
+        self.execute("insert into projectrole values(1, 'Pi', NULL)")
+        # setup member project role
+        self.execute("insert into memberprojectrole values(1, 1, 0, 1)")
+        # setup registered member
+        self.execute("insert into registeredmember values(1, 1, 1)")
+        # setup member
+        self.execute("insert into member values(1, 1, 0)")
+        # setup project
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'PROJECT', '%(project_name)s', 'test-lofar', "
+                     "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+
+        self.assertTrue(self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                             'observation', 'approved'))
+        self.assertTrue(self.mom_database_wrapper.authorized_add_with_status(self.user_name, self.project_name,
+                                                                             'observation', 'opened'))
+
+    def test_allows_triggers_returns_raises_exception_on_empty_db(self):
+        with self.assertRaises(ValueError) as exception:
+            self.assertFalse(self.mom_database_wrapper.allows_triggers(self.project_name))
+
+        self.assertEqual(str(exception.exception), "project name (%s) not found in MoM database" % self.project_name)
+
+    def test_allows_triggers_returns_true_when_project_allows_triggers(self):
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'PROJECT', '%(project_name)s', 'test-lofar', "
+                     "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        self.execute("insert into project values(1, 1, '2012-09-14', TRUE, 1000)")
+
+        self.assertTrue(self.mom_database_wrapper.allows_triggers(self.project_name))
+
+    def test_allows_triggers_returns_false_when_project_does_not_allow_triggers(self):
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'PROJECT', '%(project_name)s', 'test-lofar', "
+                     "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        self.execute("insert into project values(1, 1, '2012-09-14', FALSE, 1000)")
+
+        self.assertFalse(self.mom_database_wrapper.allows_triggers(self.project_name))
+
+    def test_get_project_priority_raises_exception_on_empty_database(self):
+        with self.assertRaises(ValueError) as exception:
+            self.mom_database_wrapper.get_project_priority(self.project_name)
+
+        self.assertEqual(str(exception.exception), "project name (%s) not found in MoM database" % self.project_name)
+
+    def test_get_project_priority_returns_priority_of_project(self):
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'PROJECT', '%(project_name)s', 'test-lofar', "
+                     "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        self.execute("insert into project values(1, 1, '2012-09-14', FALSE, 5000)")
+
+        priority = self.mom_database_wrapper.get_project_priority(self.project_name)
+
+        self.assertEqual(priority, 5000)
+
+    def test_add_trigger_returns_row_id_1_on_empty_table(self):
+        self.execute("insert into useradministration.useraccount "
+                     "values(1, 1, '%s', '26dcf77e2de89027e8895baea8e45057', 'sNgmwwN7fk')"
+                     % self.user_name)
+        result = self.mom_database_wrapper.add_trigger(self.user_name, "host name", "project name", "meta data")
+
+        self.assertEqual(result, 1)
+
+    def test_add_trigger_returns_row_id_2_on_insert_delete_insert_on_empty_database(self):
+        # It is (maybe) not likely that triggers will be deleted but at least the code can handle it
+        self.execute("insert into useradministration.useraccount "
+                     "values(1, 1, '%s', '26dcf77e2de89027e8895baea8e45057', 'sNgmwwN7fk')"
+                     % self.user_name)
+
+        self.mom_database_wrapper.add_trigger(self.user_name, "host name", "project name", "meta data")
+        self.execute("delete from lofar_trigger "
+                     "where id = 1")
+        result = self.mom_database_wrapper.add_trigger(self.user_name, "host name", "project name", "meta data")
+
+        self.assertEqual(result, 2)
+
+    def test_get_trigger_id_returns_None_on_empty_database(self):
+        result = self.mom_database_wrapper.get_trigger_id("1")
+
+        self.assertEqual(result, None)
+
+    def test_get_trigger_id_returns_id_for_lofar_observation(self):
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', "
+                     "'test-lofar', NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 1, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, '{\"trigger_id\": %(trigger_id)s}')" % {"trigger_id": self.trigger_id})
+
+        result = self.mom_database_wrapper.get_trigger_id("2")
+
+        self.assertEqual(result, self.trigger_id)
+
+    def test_get_trigger_id_returns_none_for_lofar_observation_with_empty_misc(self):
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', "
+                     "'test-lofar', NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 2, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, '')")
+
+        result = self.mom_database_wrapper.get_trigger_id("2")
+
+        self.assertEqual(result, None)
+
+    def test_get_trigger_id_returns_none_for_lofar_observation_with_empty_json(self):
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', "
+                     "'test-lofar', NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 2, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, '{}')")
+
+        result = self.mom_database_wrapper.get_trigger_id("2")
+
+        self.assertEqual(result, None)
+
+    def test_get_trigger_id_returns_id_for_lofar_pipeline(self):
+        self.execute("insert into mom2object values(1, 104711, 4, 2, 'CALIBRATION_PIPELINE', 'Target Pipeline 1.3', "
+                     "'Target Pipeline 1.3 [1.P3]', 1, 1722446, 'mom_msss_117430.1.P3', 'M117434,M117435', 0, 117430,"
+                     " 0)")
+        # id, mom2objectid, starttime, endtime, pipeline_id, pending, template, runtimeDirectory, resultDirectory, workingDirectory, parset, nr_output_correlated, nr_output_beamformed, nr_output_instrument_model, nr_output_skyimage, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_instrument_model_valid, nr_output_skyimage_valid, feedback, demixing_parameters_id, bbs_parameters_id, duration, storage_cluster_id, processing_cluster_id, misc
+        self.execute("insert into lofar_pipeline values(1761, 1, NULL, NULL, 63722, 0, "
+                     "'Calibration Pipeline Calibrator', NULL, NULL, NULL, 'parset', 0, NULL, 244, NULL, 0, 0, NULL, 0,"
+                     " NULL, 3071, 3071, NULL, NULL, NULL, '{\"trigger_id\": %(trigger_id)s}')"
+                     % {"trigger_id": self.trigger_id})
+
+        result = self.mom_database_wrapper.get_trigger_id("2")
+
+        self.assertEqual(result, self.trigger_id)
+
+    def test_get_project_details_returns_empty_list_on_empty_database(self):
+        result = self.mom_database_wrapper.get_project_details(2334)
+
+        self.assertEqual(result, {"pi_email": "", "author_email": ""})
+
+    def test_get_project_details_returns_correct_emails_with_filled_database(self):
+        self.execute("insert into mom2object "
+                     "values(111, NULL, NULL, 2334, 'PROJECT', 'CEP4tests', 'Project for CEP4 tests', "
+                     "NULL, 1725713, NULL, NULL, 0, NULL, NULL);")
+
+        self.execute("insert into member "
+                     "values(1, 111, 0);")
+        self.execute("insert into member "
+                     "values(2, 111, 0);")
+
+        self.execute("insert into registeredmember "
+                     "values(1, 1, 1);")
+        self.execute("insert into registeredmember "
+                     "values(2, 2, 2);")
+
+        self.execute("insert into useradministration.useraccount "
+                     "values(1, 1, 'user1', '26dcf77e2de89027e8895baea8e45057', 'sNgmwwN7fk');")
+        self.execute("insert into useradministration.useraccount "
+                     "values(2, 2, 'user2', '26dcf77e2de89027e8895baea8e45057', 'sNgmwwN7fk');")
+
+        self.execute("insert into useradministration.user "
+                     "values(1, 'ir.', 'pi', 'user', 'pi@example.com', 797, NULL, NULL);")
+        self.execute("insert into useradministration.user "
+                     "values(2, 'ir.', 'author', 'user', 'author@example.com', 797, NULL, NULL);")
+
+        self.execute("insert into projectrole values(1, 'Pi', NULL);")
+        self.execute("insert into projectrole values(4, 'Contact author', NULL);")
+
+        self.execute("insert into memberprojectrole values(1, 1, 0, 1);")
+        self.execute("insert into memberprojectrole values(2, 2, 0, 4);")
+
+        result = self.mom_database_wrapper.get_project_details(2334)
+
+        self.assertEqual(result, {"pi_email": "pi@example.com", "author_email": "author@example.com"})
+
+    def test_get_object_details_returns_empty_dict_on_empty_database(self):
+
+            result = self.mom_database_wrapper.getObjectDetails(1234)
+            self.assertEqual(result, {})
+
+    def test_get_object_details_returns_correct_details(self):
+
+        oid = 2345
+        statusid = 101
+        status = 'opened'
+        pname = 'myproject_' + str(1)
+
+        self.execute("insert into mom2object values(%s, NULL, NULL, %s, 'PROJECT', '%s', 'x', "
+                     "NULL, %s, NULL, NULL, 0, 0, 0)"
+                     % (1, 1, pname, statusid))
+
+        self.execute("insert into project values(%s, %s, '2012-09-14', FALSE, 0)"
+                     % (1, 1))
+
+        self.execute("insert into mom2object values(%s, NULL, NULL, %s , 'OBSERVATION', 'x', "
+                     "'x', %s, %s, 'x', 'x', 0, NULL,"
+                     " 0)"
+                     % (2, oid, 1, statusid))
+
+        self.execute("insert into status values(%s, '%s', 'OBSERVATION', %s)" % (statusid, status, statusid))
+
+        self.execute("insert into mom2objectstatus values(%s, 'PI','LTA User', %s, %s, %s, 0, '2012-12-18 09:47:50', 0)"
+                     % (statusid, statusid, statusid, oid))
+
+        result = self.mom_database_wrapper.getObjectDetails(oid)
+
+        self.assertTrue(str(oid) in list(result.keys()))
+        self.assertEqual(result[str(oid)]['object_mom2id'], oid)
+        self.assertEqual(result[str(oid)]['object_status'], status)
+        self.assertEqual(result[str(oid)]['project_name'], pname)
+
+    def test_get_project_priorities_for_objects_returns_correct_priorities(self):
+        object_ids = [3344, 1234, 7654]
+        project_prios = [42, 24, 12]
+
+        # add separate projects with a pipeline each:
+        for oid in object_ids:
+            i = object_ids.index(oid)
+            prio = project_prios[i]
+
+            eid = i + 1
+
+            self.execute("insert into mom2object values(%s, NULL, NULL, %s, 'PROJECT', '%s', 'x', "
+                         "NULL, 0, NULL, NULL, 0, 0, 0)"
+                         % (eid, eid, 'myproject_' + str(i)))
+
+            self.execute("insert into project values(%s, %s, '2012-09-14', FALSE, %s)"
+                         % (eid, eid, prio))    # unique id in project table, refer to mom2object of our project
+
+            self.execute("insert into mom2object values(%s, NULL, NULL, %s , 'PIPELINE', 'x', "
+                         "'x', %s, NULL, 'x', 'x', 0, NULL,"
+                         " 0)"
+                         % (eid + 100, oid, eid))    # unique id for the pipeline, refer to project id
+
+        return_value = self.mom_database_wrapper.get_project_priorities_for_objects(object_ids)
+
+        for oid in object_ids:
+            expected_prio = project_prios[object_ids.index(oid)]
+            prio = return_value[oid]
+            self.assertEqual(prio, expected_prio)
+
+    def test_get_project_priorities_for_objects_returns_empty_dict_on_empty_database(self):
+
+        return_value = self.mom_database_wrapper.get_project_priorities_for_objects("1234")
+        self.assertEqual(return_value, {})
+
+    def test_get_project_priorities_for_objects_returns_only_priorities_of_existing_objects(self):
+
+        object_ids = [380, 747]
+        extra_id = 787
+        project_prios = [5, 6]
+
+        # add separate projects with a pipeline each:
+        for oid in object_ids:
+            i = object_ids.index(oid)
+            prio = project_prios[i]
+
+            eid = i + 1
+
+            self.execute("insert into mom2object values(%s, NULL, NULL, %s, 'PROJECT', '%s', 'x', "
+                         "NULL, 0, NULL, NULL, 0, 0, 0)"
+                         % (eid, eid, 'myproject_' + str(i)))
+
+            self.execute("insert into project values(%s, %s, '2012-09-14', FALSE, %s)"
+                         % (eid, eid, prio))    # unique id in project table, refer to mom2object of our project
+
+            self.execute("insert into mom2object values(%s, NULL, NULL, %s , 'PIPELINE', 'x', "
+                         "'x', %s, NULL, 'x', 'x', 0, NULL,"
+                         " 0)"
+                         % (eid + 100, oid, eid))    # unique id for the pipeline, refer to project id
+
+        return_value = self.mom_database_wrapper.get_project_priorities_for_objects(object_ids + [extra_id])
+
+        for oid in object_ids:
+            self.assertTrue(oid in list(return_value.keys()))
+        self.assertFalse(extra_id in list(return_value.keys()))
+
+    def test_get_time_restrictions_throws_ValueError_on_empty_database(self):
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.get_trigger_time_restrictions(1234)
+
+    def test_get_time_restrictions_throws_ValueError_if_no_time_restrictions_in_database(self):
+
+        self.execute(
+            "insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', 'test-lofar', "
+            "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 1, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, NULL)")
+
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.get_trigger_time_restrictions(2)
+
+    def test_get_time_restrictions_returns_correct_time_restrictions(self):
+        min_start_time = "2017-01-01"
+        max_end_time = "2017-01-02"
+        min_duration = 300
+        max_duration = 600
+
+        self.execute(
+            "insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', 'test-lofar', "
+            "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 1, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, %s, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, '{\"timeWindow\":{\"minStartTime\": \"%s\", \"maxEndTime\": \"%s\", \"minDuration\": %s, "
+                     "\"maxDuration\": %s}}')"
+                     % (min_duration, min_start_time, max_end_time, min_duration, max_duration))
+
+        result = self.mom_database_wrapper.get_trigger_time_restrictions(2)
+
+        self.assertEqual(result["minStartTime"], min_start_time)
+        self.assertEqual(result["maxEndTime"], max_end_time)
+        self.assertEqual(result["minDuration"], min_duration)
+        self.assertEqual(result["maxDuration"], max_duration)
+
+    def test_get_time_restrictions_returns_mom_duration_if_misc_empty(self):
+        duration = 300
+
+        self.execute(
+            "insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', 'test-lofar', "
+            "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 1, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, %s, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, NULL)" % duration)
+
+        result = self.mom_database_wrapper.get_trigger_time_restrictions(2)
+
+        self.assertEqual(result["minDuration"], duration)
+        self.assertEqual(result["maxDuration"], duration)
+
+    def test_get_station_selection_throws_ValueError_on_empty_database(self):
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.get_station_selection(1234)
+
+    def test_get_station_selection_throws_ValueError_if_not_present_in_misc(self):
+
+        self.execute(
+            "insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', 'test-lofar', "
+            "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 1, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, '{\"timeWindow\":{\"minDuration\": 300, \"maxDuration\": 600}}')")
+
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.get_station_selection(1234)
+
+    def test_get_station_selection_returns_correct_station_selection(self):
+        resource_group = "SuperTerp"
+        rg_min = 4
+        rg_max = 9
+        resource_group2 = "CS001"
+        rg_min2 = 1
+
+        self.execute(
+            "insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', 'test-lofar', "
+            "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 1, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, '{\"stationSelection\": [{\"resourceGroup\": \"%s\", \"min\": %s, \"max\": %s}, "
+                     "{\"resourceGroup\": \"%s\", \"min\": %s}]}')" % (resource_group, rg_min, rg_max,
+                                                                       resource_group2, rg_min2))
+
+        result = self.mom_database_wrapper.get_station_selection(2)
+
+        self.assertEqual(result[0]["resourceGroup"], resource_group)
+        self.assertEqual(result[0]["min"], rg_min)
+        self.assertEqual(result[0]["max"], rg_max)
+        self.assertEqual(result[1]["resourceGroup"], resource_group2)
+        self.assertEqual(result[1]["min"], rg_min2)
+    def test_get_trigger_quota_throws_ValueError_on_empty_database(self):
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.get_trigger_quota(self.project_name)
+
+    def test_get_trigger_quota_returns_correct_quota(self):
+        used = 5
+        allocation = 10
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'PROJECT', '%(project_name)s', 'test-lofar', "
+                     "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        self.execute("INSERT INTO resourcetype (id, name, type) VALUES (1, 'Lofar Triggers','LOFAR_TRIGGERS');")
+        self.execute("insert into resource (resourcetypeid, projectid, used, allocation) "
+                     "values(1, 2, %s, %s)" % (used, allocation))
+
+        used_t, max_t = self.mom_database_wrapper.get_trigger_quota(self.project_name)
+        self.assertEqual(used_t, used)
+        self.assertEqual(allocation, max_t)
+
+    def test_cancel_trigger_throws_ValueError_on_empty_database(self):
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.cancel_trigger(self.trigger_id, 'because I can')
+
+    def test_cancel_trigger_cancels_trigger(self):
+        self.execute("insert into useradministration.useraccount "
+                          "values(1, 1, '%s', '26dcf77e2de89027e8895baea8e45057', 'sNgmwwN7fk')" % self.user_name)
+        self.execute("insert into lofar_trigger (id, username, hostname, projectname, metadata) "
+                     "values (%s, '%s', 'host', 'myproject', 'meta')" % (self.trigger_id, self.user_name))
+
+        reason = 'because I can'
+        self.mom_database_wrapper.cancel_trigger(self.trigger_id, reason)
+
+        result = self.execute("SELECT cancelled, cancelled_at, cancelled_reason "
+                     "FROM lofar_trigger WHERE id = %s" % self.trigger_id, fetch = True)
+
+        self.assertEqual(result[0]['cancelled'], 1)
+        self.assertTrue(type(result[0]['cancelled_at']) is datetime)
+        self.assertEqual(result[0]['cancelled_reason'], reason)
+
+    def test_update_trigger_quota_throws_ValueError_on_empty_database(self):
+        with self.assertRaises(ValueError):
+            self.mom_database_wrapper.update_trigger_quota(self.project_name)
+
+    def test_update_trigger_quota_updates_trigger_quota(self):
+        # add project with trigger resource:
+        used = 5
+        self.execute("insert into mom2object values(1, NULL, NULL, 2, 'PROJECT', '%(project_name)s', 'test-lofar', "
+                     "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        self.execute("INSERT INTO resourcetype (id, name, type) VALUES (1, 'Lofar Triggers','LOFAR_TRIGGERS');")
+        self.execute("insert into resource (resourcetypeid, projectid, used, allocation) "
+                     "values(1, 2, %s, 10)" % used)
+
+        # add 3 triggers:
+        self.execute("insert into useradministration.useraccount "
+                     "values(1, 1, '%s', '26dcf77e2de89027e8895baea8e45057', 'sNgmwwN7fk')" % self.user_name)
+        self.execute("insert into lofar_trigger (id, username, hostname, projectname, metadata) "
+                     "values (%s, '%s', 'host', '%s', 'meta')" % (self.trigger_id, self.user_name, self.project_name))
+        self.execute("insert into lofar_trigger (id, username, hostname, projectname, metadata) "
+                     "values (%s, '%s', 'host', '%s', 'meta')" % (self.trigger_id + 1, self.user_name, self.project_name))
+        self.execute("insert into lofar_trigger (id, username, hostname, projectname, metadata) "
+                     "values (%s, '%s', 'host', '%s', 'meta')" % (self.trigger_id + 2, self.user_name, self.project_name))
+
+        # check initial value
+        used_t, max_t = self.mom_database_wrapper.get_trigger_quota(self.project_name)
+        self.assertEqual(used_t, used)
+
+        # call update
+        self.mom_database_wrapper.update_trigger_quota(self.project_name)
+
+        # check updated value
+        used_t, max_t = self.mom_database_wrapper.get_trigger_quota(self.project_name)
+        self.assertEqual(used_t, 3)
+
+        # cancel one trigger, to see if flagged triggers are not considered in use any more
+        self.mom_database_wrapper.cancel_trigger(self.trigger_id + 1, 'Because.')
+
+        # call update
+        self.mom_database_wrapper.update_trigger_quota(self.project_name)
+
+        # check updated value
+        used_t, max_t = self.mom_database_wrapper.get_trigger_quota(self.project_name)
+        self.assertEqual(used_t, 2)
+
+    def test_get_storagemanager_returns_correct_value_from_db(self):
+        value = "d.y.s.c.o."
+        self.execute(
+            "insert into mom2object values(1, NULL, NULL, 2, 'LOFAR_OBSERVATION', '%(project_name)s', 'test-lofar', "
+            "NULL, 1704653, NULL, NULL, 0, 0, 0)" % {"project_name": self.project_name})
+        # id, mom2objectid, observation_id, instrument, user_specification_id, system_specification_id, default_template, tbb_template, tbb_piggyback_allowed, parset, nr_output_correlated, nr_output_beamformed, nr_output_coherent_stokes, nr_output_incoherent_stokes, nr_output_flyseye, nr_output_correlated_valid, nr_output_beamformed_valid, nr_output_coherent_stokes_valid, nr_output_incoherent_stokes_valid, nr_output_flyseye_valid, feedback, aartfaac_piggyback_allowed, storage_cluster_id, processing_cluster_id, nico_testing
+        self.execute("insert into lofar_observation values(83, 1, NULL, 'Interferometer', 47, 48, NULL, NULL, 0,"
+                     " NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)")
+        # id, type, correlated_data, filtered_data, beamformed_data, coherent_stokes_data, incoherent_stokes_data, antenna, clock_mode, instrument_filter, integration_interval, channels_per_subband, cn_integration_steps, pencilbeams_flyseye, pencilbeams_nr_pencil_rings, pencilbeams_ring_size, stokes_selection, stokes_integrate_channels, stokes_integration_steps, station_set, timeframe, starttime, endtime, spec_duration, coherent_dedisperse_channels, dispersion_measure, subbands_per_file_cs, subbands_per_file_bf, collapsed_channels_cs, collapsed_channels_is, downsampling_steps_cs, downsampling_steps_is, which_cs, which_is, bypass_pff, enable_superterp, flyseye, tab_nr_rings, tab_ring_size, bits_per_sample, misc
+        self.execute("insert into lofar_observation_specification values(47, 'USER', 1, 0, 0, 0, 0, 'HBA Dual', "
+                     "'160 MHz', '170-230 MHz', 1, NULL, NULL, 0, NULL, NULL, NULL, 0, NULL, 'Custom', NULL, NULL, "
+                     "NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, "
+                     "16, '{\"storagemanager\":\"%s\"')" % value)
+
+        result = self.mom_database_wrapper.get_storagemanager(2)
+        self.assertEqual(result, value)
+
+if __name__ == "__main__":
+    logging.basicConfig(format = '%(asctime)s %(levelname)s %(message)s', level = logging.INFO)
+    unittest.main()
diff --git a/SAS/MoM/MoMQueryService/test/t_momqueryservice.run b/SAS/MoM/MoMQueryService/test/t_momqueryservice.run
new file mode 100755
index 0000000000000000000000000000000000000000..0e4120028ae4d3a46a2d22d07884ccfbaa911a4c
--- /dev/null
+++ b/SAS/MoM/MoMQueryService/test/t_momqueryservice.run
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# Run the unit test
+source python-coverage.sh
+python_coverage_test "MoMQueryService/*" t_momqueryservice.py
diff --git a/SAS/MoM/MoMQueryService/test/t_momqueryservice.sh b/SAS/MoM/MoMQueryService/test/t_momqueryservice.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cd4cc2f294db2ecdd82faa9d95966e5f313c65ec
--- /dev/null
+++ b/SAS/MoM/MoMQueryService/test/t_momqueryservice.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+./runctest.sh t_momqueryservice
diff --git a/SAS/OTDB/test/t_getTreeGroup.py b/SAS/OTDB/test/t_getTreeGroup.py
index 8d3e83db7ff3b6c4c602a273e91ecf1002f74cc9..3c1f3e8829e8a0b13c720583b809cc95a64bf474 100644
--- a/SAS/OTDB/test/t_getTreeGroup.py
+++ b/SAS/OTDB/test/t_getTreeGroup.py
@@ -40,8 +40,9 @@ When cluster argument is e.g. 'CEP2' all CEP2 PIPELINES are returned.
 When cluster argument is e.g. '!CEP2' all trees EXCEPT the CEP2 PIPELINES are returned
 """
 
-import sys, pg
+import sys
 import logging
+import psycopg2
 
 logging.basicConfig(stream=sys.stdout, level=logging.WARNING)
 logger = logging.getLogger(__name__)
@@ -69,7 +70,9 @@ def getTreeGroup(dbconnection, grouptype, period, cluster):
     Do the database call and sort the result.
     """
     # Try to get the specification information
-    return sorted(dbconnection.query("select treeid from getTreeGroup(%d, %d, '%s')" % (grouptype, period, cluster)).getresult())
+    cur = dbconnection.cursor()
+    cur.execute("select treeid from getTreeGroup(%d, %d, '%s')" % (grouptype, period, cluster))
+    return sorted(cur.fetchall())
 
 if __name__ == "__main__":
     if len(sys.argv) != 4:
@@ -80,7 +83,7 @@ if __name__ == "__main__":
     hostname = sys.argv[2]
     database = sys.argv[3]
 
-    otdb_connection = pg.connect(user=username, host=hostname, dbname=database)
+    otdb_connection = psycopg2.connect(user=username, host=hostname, dbname=database)
 
     try:
         success = True
diff --git a/SAS/QPIDInfrastructure/bin/CMakeLists.txt b/SAS/QPIDInfrastructure/bin/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cf062009e8be156d0b5dfe65dc7269b7cc3025bb
--- /dev/null
+++ b/SAS/QPIDInfrastructure/bin/CMakeLists.txt
@@ -0,0 +1,10 @@
+# $Id: CMakeLists.txt 32341 2015-08-28 11:59:26Z schaap $
+
+lofar_add_bin_scripts(addtoQPIDDB.py
+                      populateDB.sh
+                      compareQPIDwithDB.py
+                      configQPIDfromDB.py
+                      gatherfrombrokers.sh
+                      route_to_struct.py)
+
+install_files(/share/qpidinfrastructure/sql qpidinfra_dump.sql)
diff --git a/SAS/QPIDInfrastructure/bin/addtoQPIDDB.py b/SAS/QPIDInfrastructure/bin/addtoQPIDDB.py
new file mode 100755
index 0000000000000000000000000000000000000000..0e38b0d9d9219e9f19bc4839f98cc9090666cf34
--- /dev/null
+++ b/SAS/QPIDInfrastructure/bin/addtoQPIDDB.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python3
+
+import sys
+from lofar.qpidinfrastructure.QPIDDB import qpidinfra
+from lofar.common import dbcredentials
+
+from optparse import OptionParser
+
+if __name__ == '__main__':
+    parser = OptionParser('%prog [options]',
+             description='Add items to the QPIDinfra database from the commandline')
+    parser.add_option('-b', '--broker', dest='broker', type='string', default=None, help='Address of the qpid broker (required)')
+    parser.add_option('-f', '--federation', dest='federation' , type='string', default=None, help='Address of the federated broker')
+    parser.add_option('-q', '--queue', dest='queue', type='string', default=None, help='Name of the queue on the broker')
+    parser.add_option('-e', '--exchange', dest='exchange', type='string', default=None, help='Name of the exchange on the broker')
+    parser.add_option('-k', '--routingkey', dest='routingkey', type='string', default='#', help='(Federation) routing key')
+    parser.add_option('-d', '--dynamic', dest='dynamic', action="store_true", default=False, help='Create a dynamic route')
+    parser.add_option('--bind', dest='bind', action="store_true", default=False, help='bind given exchange (with -e) to given queue (with -q) with given routing key (with -k)')
+    parser.add_option_group(dbcredentials.options_group(parser, "qpidinfra"))
+
+    (options, args) = parser.parse_args()
+
+    if (len(sys.argv)<2):
+        parser.print_help()
+        sys.exit(0)
+
+    dbcreds = dbcredentials.parse_options(options)
+    QPIDinfra = qpidinfra(dbcreds)
+
+    if (options.broker==None):
+        parser.print_help()
+        sys.exit(1)
+
+    else:
+        QPIDinfra.addhost(options.broker)
+
+    if (options.queue):
+        QPIDinfra.addqueue(options.queue)
+        QPIDinfra.bindqueuetohost(options.queue,options.broker)
+
+    if (options.exchange):
+        QPIDinfra.addexchange(options.exchange)
+        QPIDinfra.bindexchangetohost(options.exchange,options.broker)
+
+    if (options.bind):
+        if options.exchange == None or options.queue == None or options.broker == None:
+            print()
+            print('ERROR: When binding an exchange to a queue, you need to specify options: -e, -q, -k, -b')
+            print()
+            parser.print_help()
+            sys.exit(1)
+
+        #queue and exchange were already added to db above.
+        #here, just add the qpid-bind link
+        QPIDinfra.bindexchangetoqueueonhost(options.exchange,options.queue,options.broker,options.routingkey)
+
+    if (options.federation):
+        QPIDinfra.addhost(options.federation)
+        if (options.queue):
+            QPIDinfra.addqueue(options.queue) # should be superfluous
+            exchange=''
+            if (options.exchange):
+                QPIDinfra.addexchange(options.exchange)
+                exchange=options.exchange
+
+            QPIDinfra.bindqueuetohost(options.queue,options.federation)
+            QPIDinfra.setqueueroute(options.queue,options.broker,options.federation,exchange)
+        else:
+            if (options.exchange):
+                QPIDinfra.addexchange(options.exchange) # should be superfluous
+                QPIDinfra.bindexchangetohost(options.exchange,options.federation)
+                QPIDinfra.setexchangeroute(options.exchange,options.routingkey,options.broker,options.federation,dynamic=options.dynamic)
+            else:
+                raise Exception("federation can only be setup with a queue or an exchange")
diff --git a/SAS/QPIDInfrastructure/bin/compareQPIDwithDB.py b/SAS/QPIDInfrastructure/bin/compareQPIDwithDB.py
new file mode 100755
index 0000000000000000000000000000000000000000..78f74cd99ce5a1589884f1d7c2ca517ecd227125
--- /dev/null
+++ b/SAS/QPIDInfrastructure/bin/compareQPIDwithDB.py
@@ -0,0 +1,100 @@
+#!/usr/bin/env python3
+
+from lofar.qpidinfrastructure.QPIDDB import qpidinfra
+from lofar.common import dbcredentials
+
+S_INDB = 1
+S_ONQPID = 2
+
+class host:
+    def __init__(self):
+        self.queues={}
+        self.exchanges={}
+        self.queueroutes={}
+        self.exchangeroutes={}
+
+    def __repr__(self):
+        return "<host: queues: '%s' exchanges '%s' queueroutes '%s' exchangeroutes '%s' >" \
+                %(self.queues.__repr__(), self.exchanges.__repr__(), self.queueroutes.__repr__(),\
+                self.exchangeroutes.__repr__() )
+
+    def __str__(self):
+        return "HOST: queues=%s exchanges=%s queueroutes=%s exchangeroutes=%s\n" \
+                %(self.queues, self.exchanges, self.queueroutes, self.exchangeroutes)
+
+    def tag(self,item,index,state):
+        item[index]=item.get(index,0) | state
+
+    def untag(self,item,index,state):
+        self.queue[index]=item.get(index,0) & ~state
+
+    def tagqueue(self,queue,state):
+        self.tag(self.queues,queue,state)
+
+    def untagqueue(self,queue,state):
+        self.untag(self.queues,queue,state)
+
+    def tagexchange(self,exchange,state):
+        self.tag(self.exchanges,exchange,state)
+
+    def untagexchange(self,exchange,state):
+        self.untag(self.exchanges,exchange,state)
+
+    def tagqueueroute(self,tohost,queue,state):
+        index=tohost+':'+queue
+        self.tag(self.queueroutes,index,state)
+
+    def untagqueueroute(self,tohost,queue,state):
+        index=tohost+':'+queue
+        self.untag(self.queueroutes,index,state)
+
+    def tagexchangeroute(self,tohost,exchange,key,state):
+        index=tohost+':'+exchange+':'+key
+        self.tag(self.exchangeroutes,index,state)
+
+    def untagexchangeroute(self,tohost,exchange,key,state):
+        index=tohost+':'+exchange+':'+key
+        self.untag(self.exchangeroutes,index,state)
+
+Hosts={}
+
+DEFINED=1
+SEEN=2
+
+
+def Host(hostname):
+    if hostname not in Hosts:
+        Hosts[hostname]=host()
+    return Hosts[hostname]
+
+
+
+def qpidconfig_add_queue(settings):
+    Host(settings['hostname']).tagqueue(settings['queuename'],DEFINED)
+
+def qpidconfig_add_topic(settings):
+    Host(settings['hostname']).tagexchange(settings['exchangename'],DEFINED)
+
+def qpidroute_add(settings):
+    Host(settings['fromhost']).tagexchangeroute(settings['tohost'],settings['exchangename'],settings['routingkey'],DEFINED)
+
+def qpidQroute_add(settings):
+    Host(settings['fromhost']).tagqueueroute(settings['tohost'],settings['queuename'],DEFINED)
+
+
+dbcreds = dbcredentials.DBCredentials().get("qpidinfra")
+QPIDinfra = qpidinfra(dbcreds)
+
+
+QPIDinfra.perqueue(qpidconfig_add_queue)
+QPIDinfra.perexchange(qpidconfig_add_topic)
+QPIDinfra.perfederationexchange(qpidroute_add)
+QPIDinfra.perfederationqueue(qpidQroute_add)
+
+print(Hosts)
+print(" - ")
+print("Done.")
+print(" ------------------------------------------")
+print("QPIDinfra config fetched from DB")
+print("Next step: retrieve config from brokers. TBD.")
+print(" ------------------------------------------")
diff --git a/SAS/QPIDInfrastructure/bin/configQPIDfromDB.py b/SAS/QPIDInfrastructure/bin/configQPIDfromDB.py
new file mode 100755
index 0000000000000000000000000000000000000000..e140f0d1c55d66988be704609144f324d815b0ac
--- /dev/null
+++ b/SAS/QPIDInfrastructure/bin/configQPIDfromDB.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+
+from lofar.qpidinfrastructure.QPIDDB import qpidinfra
+from lofar.common import dbcredentials
+
+def qpidconfig_add_queue(settings):
+    print(("qpid-config -b %s add queue %s --durable" %(settings['hostname'],settings['queuename'])))
+
+def qpidconfig_add_topic(settings):
+    print(("qpid-config -b %s add exchange topic %s --durable" %(settings['hostname'],settings['exchangename'])))
+
+def qpidroute_add(settings):
+    cmd = "dynamic" if settings['dynamic'] else "route"
+
+    print(("qpid-route -d route del %s %s %s \'%s\' " %(settings['tohost'],settings['fromhost'],settings['exchangename'],settings['routingkey'])))
+    print(("qpid-route -d dynamic del %s %s %s" %(settings['tohost'],settings['fromhost'],settings['exchangename'])))
+
+    if settings['dynamic']:
+        print(("qpid-route -d dynamic add %s %s %s" %(settings['tohost'],settings['fromhost'],settings['exchangename'])))
+    else:
+        print(("qpid-route -d route add %s %s %s \'%s\' " %(settings['tohost'],settings['fromhost'],settings['exchangename'],settings['routingkey'])))
+
+def qpidQroute_add(settings):
+    print(("qpid-route -d queue del %s %s '%s' '%s'" %(settings['tohost'],settings['fromhost'],settings['exchangename'],settings['queuename'])))
+    print(("qpid-route -d queue add %s %s '%s' '%s'" %(settings['tohost'],settings['fromhost'],settings['exchangename'],settings['queuename'])))
+
+def qpidconfig_add_binding(settings):
+    print(("qpid-config --durable -b %s bind %s %s %s" %(settings['hostname'],settings['exchangename'],settings['queuename'],settings['routingkey'])))
+
+dbcreds = dbcredentials.DBCredentials().get("qpidinfra")
+QPIDinfra = qpidinfra(dbcreds)
+QPIDinfra.perqueue(qpidconfig_add_queue)
+QPIDinfra.perexchange(qpidconfig_add_topic)
+QPIDinfra.perfederationexchange(qpidroute_add)
+QPIDinfra.perfederationqueue(qpidQroute_add)
+QPIDinfra.perqpidbinding(qpidconfig_add_binding)
+
diff --git a/SAS/QPIDInfrastructure/bin/gatherfrombrokers.sh b/SAS/QPIDInfrastructure/bin/gatherfrombrokers.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a40c31c46fba7ddfce84dea889c768f5c5afee10
--- /dev/null
+++ b/SAS/QPIDInfrastructure/bin/gatherfrombrokers.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+
+# insert mcu005 exchanges
+
+#for i in $(qpid-stat -e -b mcu005.control.lofar |grep lofar |awk ' { print $1 } ') 
+#do
+#    echo ./AddHostToQPIDDB.py -b mcu005.control.lofar -e $i
+#    ./AddHostToQPIDDB.py -b mcu005.control.lofar -e $i
+#done
+
+for host in lhn001.cep2.lofar ccu001.control.lofar mcu001.control.lofar lcs023.control.lofar sas001.control.lofar locus{001..094}.cep2.lofar
+do
+    for i in $(qpid-stat -q -b $host |grep -v '_' |grep "task\|mom" |awk ' { print $1 } ') 
+    do
+	echo ./addtoQPIDDB.py -b $host -q $i
+	./addtoQPIDDB.py -b $host -q $i
+    done
+done
diff --git a/SAS/QPIDInfrastructure/bin/populateDB.sh b/SAS/QPIDInfrastructure/bin/populateDB.sh
new file mode 100755
index 0000000000000000000000000000000000000000..04703550a599a908be072bc89f146d4a1dccee4b
--- /dev/null
+++ b/SAS/QPIDInfrastructure/bin/populateDB.sh
@@ -0,0 +1,175 @@
+#!/bin/bash
+#
+# To DB first, wipe, use
+#
+# psql -U postgres -h sasdb --dbname=qpidinfra --file=$LOFARROOT/share/qpidinfrastructure/sql/qpidinfradb.sql
+#
+
+
+# -----------------------------------------
+#   Configuration
+# -----------------------------------------
+
+# Whether to modify production (true) or test (false)
+if [ "$LOFARENV" == "PRODUCTION" ]; then
+  PROD=true
+  PREFIX=
+elif [ "$LOFARENV" == "TEST" ]; then
+  PROD=false
+  PREFIX="test."
+else
+  PROD=false
+  PREFIX="devel."
+fi
+
+
+# Host names to use
+if $PROD; then
+  echo "----------------------------------------------"
+  echo "Populating database for PRODUCTION environment"
+  echo ""
+  echo "Press ENTER to continue, or ^C to abort"
+  echo "----------------------------------------------"
+  read
+
+  CCU=ccu001.control.lofar
+  MCU=mcu001.control.lofar
+  SCU=scu001.control.lofar
+  LEXAR=lexar003.offline.lofar
+
+  MOM_SYSTEM=lcs023.control.lofar
+  MOM_INGEST=lcs029.control.lofar
+else
+  CCU=ccu199.control.lofar
+  MCU=mcu199.control.lofar
+  SCU=scu199.control.lofar
+  LEXAR=lexar004.offline.lofar
+
+  MOM_SYSTEM=lcs028.control.lofar
+  MOM_INGEST=lcs028.control.lofar
+fi
+
+
+# -----------------------------------------
+#   Cobalt DataTapping (piggy-backing)
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.datatap.command  # COBALT piggy-backing request-reply
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.datatap.notification  # notification who has been granted COBALT piggy-backing
+
+# -----------------------------------------
+#   MessageRouter -> MoM
+# -----------------------------------------
+
+#addtoQPIDDB.py --broker $CCU --queue ${PREFIX}mom.task.feedback.dataproducts --federation $MOM_SYSTEM
+#addtoQPIDDB.py --broker $CCU --queue ${PREFIX}mom.task.feedback.processing --federation $MOM_SYSTEM
+#addtoQPIDDB.py --broker $CCU --queue ${PREFIX}mom.task.feedback.state --federation $MOM_SYSTEM
+
+# -----------------------------------------
+#   Feedback COBALT/CEP4 -> MAC
+# -----------------------------------------
+addtoQPIDDB.py --broker $CCU --queue ${PREFIX}mac.task.feedback.state
+addtoQPIDDB.py --broker $MCU --queue ${PREFIX}otdb.task.feedback.dataproducts
+addtoQPIDDB.py --broker $MCU --queue ${PREFIX}otdb.task.feedback.processing
+
+# -----------------------------------------
+#   MACScheduler -> MessageRouter -> MoM
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $MCU --queue ${PREFIX}lofar.task.specification.system --federation $CCU
+addtoQPIDDB.py --broker $CCU --queue ${PREFIX}mom.task.specification.system --federation $MOM_SYSTEM
+
+# -----------------------------------------
+#   MoM <-> MoM-OTDB-Adapter
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $CCU --queue mom.command --federation $MOM_SYSTEM
+addtoQPIDDB.py --broker $CCU --queue mom.importxml --federation $MOM_SYSTEM
+addtoQPIDDB.py --broker $MOM_SYSTEM --queue mom-otdb-adapter.importxml --federation $CCU
+
+# -----------------------------------------
+#   MoM Services
+# -----------------------------------------
+addtoQPIDDB.py --broker $MOM_SYSTEM --exchange ${PREFIX}lofar.mom.bus
+addtoQPIDDB.py --broker $MOM_INGEST --exchange ${PREFIX}lofar.mom.bus
+addtoQPIDDB.py --broker $MOM_SYSTEM --exchange ${PREFIX}lofar.mom.command
+addtoQPIDDB.py --broker $MOM_SYSTEM --exchange ${PREFIX}lofar.mom.notification
+
+# MoM queues that are unused functionally but still opened
+addtoQPIDDB.py --broker $MOM_SYSTEM --queue ${PREFIX}mom.task.feedback.dataproducts
+addtoQPIDDB.py --broker $MOM_SYSTEM --queue ${PREFIX}mom.task.feedback.processing
+
+# -----------------------------------------
+#   MoM Services <-> ResourceAssignment
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.mom.bus --federation $MOM_SYSTEM
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.mom.command --federation $MOM_SYSTEM
+addtoQPIDDB.py --broker $MOM_SYSTEM --exchange ${PREFIX}lofar.mom.notification --federation $SCU
+
+# -----------------------------------------
+#   Ingest
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $LEXAR --exchange ${PREFIX}lofar.lta.ingest.command
+addtoQPIDDB.py --broker $LEXAR --exchange ${PREFIX}lofar.lta.ingest.notification
+addtoQPIDDB.py --broker $LEXAR --queue ${PREFIX}lofar.lta.ingest.jobs
+addtoQPIDDB.py --broker $LEXAR --queue ${PREFIX}lofar.lta.ingest.jobs.for_transfer
+addtoQPIDDB.py --broker $LEXAR --queue ${PREFIX}lofar.lta.ingest.notification.jobmanager
+addtoQPIDDB.py --broker $LEXAR --bind --exchange ${PREFIX}lofar.lta.ingest.notification --queue ${PREFIX}lofar.lta.ingest.notification.momingestadapter --routingkey LTAIngest.#
+addtoQPIDDB.py --broker $LEXAR --bind --exchange ${PREFIX}lofar.lta.ingest.notification --queue ${PREFIX}lofar.lta.ingest.notification.jobmanager --routingkey LTAIngest.#
+
+
+# -----------------------------------------
+#   ResourceAssignment
+# -----------------------------------------
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.ra.command
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.ra.notification
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.otdb.command
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.otdb.notification
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.dm.command
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.dm.notification
+
+# -----------------------------------------
+#   QA
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.qa.notification
+addtoQPIDDB.py --broker $SCU --queue ${PREFIX}lofar.otdb.notification.for.qa_service
+
+
+# -----------------------------------------
+#   Specification & Trigger Services
+# -----------------------------------------
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.spec.command
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.spec.notification
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.trigger.command
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.trigger.notification
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.mac.command
+addtoQPIDDB.py --broker $SCU --exchange ${PREFIX}lofar.mac.notification
+
+# -----------------------------------------
+#   Specification -> MoM
+# -----------------------------------------
+addtoQPIDDB.py --broker $SCU --queue mom.importxml --federation $MOM_SYSTEM
+
+# -----------------------------------------
+#   Ingest -> SCU
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $LEXAR --exchange ${PREFIX}lofar.lta.ingest.notification --federation $SCU
+
+# -----------------------------------------
+#   Ingest -> ResourceAssignment @ SCU
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $SCU --queue ${PREFIX}lofar.lta.ingest.notification.autocleanupservice
+addtoQPIDDB.py --broker $SCU --bind --exchange ${PREFIX}lofar.lta.ingest.notification --queue ${PREFIX}lofar.lta.ingest.notification.autocleanupservice --routingkey LTAIngest.#
+
+# -----------------------------------------
+#   Ingest -> LTA-storage-overview @ SCU
+# -----------------------------------------
+
+addtoQPIDDB.py --broker $LEXAR --queue ${PREFIX}lofar.lta.ingest.notification.for.ltastorageoverview
+addtoQPIDDB.py --broker $LEXAR --bind --exchange ${PREFIX}lofar.lta.ingest.notification --queue ${PREFIX}lofar.lta.ingest.notification.for.ltastorageoverview --routingkey LTAIngest.#
+
diff --git a/SAS/QPIDInfrastructure/bin/qpidinfra_dump.sql b/SAS/QPIDInfrastructure/bin/qpidinfra_dump.sql
new file mode 100644
index 0000000000000000000000000000000000000000..c68605aa90a8d842d030202e13d61d1894817698
--- /dev/null
+++ b/SAS/QPIDInfrastructure/bin/qpidinfra_dump.sql
@@ -0,0 +1,1002 @@
+--
+-- PostgreSQL database dump
+--
+
+SET statement_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SET check_function_bodies = false;
+SET client_min_messages = warning;
+
+--
+-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: 
+--
+
+CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
+
+
+--
+-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: 
+--
+
+COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
+
+
+SET search_path = public, pg_catalog;
+
+SET default_tablespace = '';
+
+SET default_with_oids = false;
+
+--
+-- Name: exchangeroutes; Type: TABLE; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+CREATE TABLE exchangeroutes (
+    erouteid integer NOT NULL,
+    fromhost bigint NOT NULL,
+    tohost bigint NOT NULL,
+    eid bigint NOT NULL,
+    routingkey character varying(512) NOT NULL
+);
+
+
+ALTER TABLE public.exchangeroutes OWNER TO peterzon;
+
+--
+-- Name: exchangeroutes_erouteid_seq; Type: SEQUENCE; Schema: public; Owner: peterzon
+--
+
+CREATE SEQUENCE exchangeroutes_erouteid_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.exchangeroutes_erouteid_seq OWNER TO peterzon;
+
+--
+-- Name: exchangeroutes_erouteid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: peterzon
+--
+
+ALTER SEQUENCE exchangeroutes_erouteid_seq OWNED BY exchangeroutes.erouteid;
+
+
+--
+-- Name: exchanges; Type: TABLE; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+CREATE TABLE exchanges (
+    exchangeid integer NOT NULL,
+    exchangename character varying(512) NOT NULL
+);
+
+
+ALTER TABLE public.exchanges OWNER TO peterzon;
+
+--
+-- Name: exchanges_exchangeid_seq; Type: SEQUENCE; Schema: public; Owner: peterzon
+--
+
+CREATE SEQUENCE exchanges_exchangeid_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.exchanges_exchangeid_seq OWNER TO peterzon;
+
+--
+-- Name: exchanges_exchangeid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: peterzon
+--
+
+ALTER SEQUENCE exchanges_exchangeid_seq OWNED BY exchanges.exchangeid;
+
+
+--
+-- Name: hosts; Type: TABLE; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+CREATE TABLE hosts (
+    hostid integer NOT NULL,
+    hostname character varying(512) NOT NULL
+);
+
+
+ALTER TABLE public.hosts OWNER TO peterzon;
+
+--
+-- Name: hosts_hostid_seq; Type: SEQUENCE; Schema: public; Owner: peterzon
+--
+
+CREATE SEQUENCE hosts_hostid_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.hosts_hostid_seq OWNER TO peterzon;
+
+--
+-- Name: hosts_hostid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: peterzon
+--
+
+ALTER SEQUENCE hosts_hostid_seq OWNED BY hosts.hostid;
+
+
+--
+-- Name: persistentexchanges; Type: TABLE; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+CREATE TABLE persistentexchanges (
+    pexid integer NOT NULL,
+    eid bigint NOT NULL,
+    hid bigint NOT NULL
+);
+
+
+ALTER TABLE public.persistentexchanges OWNER TO peterzon;
+
+--
+-- Name: persistentexchanges_pexid_seq; Type: SEQUENCE; Schema: public; Owner: peterzon
+--
+
+CREATE SEQUENCE persistentexchanges_pexid_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.persistentexchanges_pexid_seq OWNER TO peterzon;
+
+--
+-- Name: persistentexchanges_pexid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: peterzon
+--
+
+ALTER SEQUENCE persistentexchanges_pexid_seq OWNED BY persistentexchanges.pexid;
+
+
+--
+-- Name: persistentqueues; Type: TABLE; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+CREATE TABLE persistentqueues (
+    pquid integer NOT NULL,
+    qid bigint NOT NULL,
+    hid bigint NOT NULL
+);
+
+
+ALTER TABLE public.persistentqueues OWNER TO peterzon;
+
+--
+-- Name: persistentqueues_pquid_seq; Type: SEQUENCE; Schema: public; Owner: peterzon
+--
+
+CREATE SEQUENCE persistentqueues_pquid_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.persistentqueues_pquid_seq OWNER TO peterzon;
+
+--
+-- Name: persistentqueues_pquid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: peterzon
+--
+
+ALTER SEQUENCE persistentqueues_pquid_seq OWNED BY persistentqueues.pquid;
+
+
+--
+-- Name: queuelistener; Type: TABLE; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+CREATE TABLE queuelistener (
+    qlistenid integer NOT NULL,
+    fromhost bigint NOT NULL,
+    eid bigint NOT NULL,
+    qid bigint NOT NULL,
+    subject character varying(512) NOT NULL
+);
+
+
+ALTER TABLE public.queuelistener OWNER TO peterzon;
+
+--
+-- Name: queuelistener_qlistenid_seq; Type: SEQUENCE; Schema: public; Owner: peterzon
+--
+
+CREATE SEQUENCE queuelistener_qlistenid_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.queuelistener_qlistenid_seq OWNER TO peterzon;
+
+--
+-- Name: queuelistener_qlistenid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: peterzon
+--
+
+ALTER SEQUENCE queuelistener_qlistenid_seq OWNED BY queuelistener.qlistenid;
+
+
+--
+-- Name: queueroutes; Type: TABLE; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+CREATE TABLE queueroutes (
+    qrouteid integer NOT NULL,
+    fromhost bigint NOT NULL,
+    tohost bigint NOT NULL,
+    qid bigint NOT NULL
+);
+
+
+ALTER TABLE public.queueroutes OWNER TO peterzon;
+
+--
+-- Name: queueroutes_qrouteid_seq; Type: SEQUENCE; Schema: public; Owner: peterzon
+--
+
+CREATE SEQUENCE queueroutes_qrouteid_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.queueroutes_qrouteid_seq OWNER TO peterzon;
+
+--
+-- Name: queueroutes_qrouteid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: peterzon
+--
+
+ALTER SEQUENCE queueroutes_qrouteid_seq OWNED BY queueroutes.qrouteid;
+
+
+--
+-- Name: queues; Type: TABLE; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+CREATE TABLE queues (
+    queueid integer NOT NULL,
+    queuename character varying(512) NOT NULL
+);
+
+
+ALTER TABLE public.queues OWNER TO peterzon;
+
+--
+-- Name: queues_queueid_seq; Type: SEQUENCE; Schema: public; Owner: peterzon
+--
+
+CREATE SEQUENCE queues_queueid_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.queues_queueid_seq OWNER TO peterzon;
+
+--
+-- Name: queues_queueid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: peterzon
+--
+
+ALTER SEQUENCE queues_queueid_seq OWNED BY queues.queueid;
+
+
+--
+-- Name: erouteid; Type: DEFAULT; Schema: public; Owner: peterzon
+--
+
+ALTER TABLE ONLY exchangeroutes ALTER COLUMN erouteid SET DEFAULT nextval('exchangeroutes_erouteid_seq'::regclass);
+
+
+--
+-- Name: exchangeid; Type: DEFAULT; Schema: public; Owner: peterzon
+--
+
+ALTER TABLE ONLY exchanges ALTER COLUMN exchangeid SET DEFAULT nextval('exchanges_exchangeid_seq'::regclass);
+
+
+--
+-- Name: hostid; Type: DEFAULT; Schema: public; Owner: peterzon
+--
+
+ALTER TABLE ONLY hosts ALTER COLUMN hostid SET DEFAULT nextval('hosts_hostid_seq'::regclass);
+
+
+--
+-- Name: pexid; Type: DEFAULT; Schema: public; Owner: peterzon
+--
+
+ALTER TABLE ONLY persistentexchanges ALTER COLUMN pexid SET DEFAULT nextval('persistentexchanges_pexid_seq'::regclass);
+
+
+--
+-- Name: pquid; Type: DEFAULT; Schema: public; Owner: peterzon
+--
+
+ALTER TABLE ONLY persistentqueues ALTER COLUMN pquid SET DEFAULT nextval('persistentqueues_pquid_seq'::regclass);
+
+
+--
+-- Name: qlistenid; Type: DEFAULT; Schema: public; Owner: peterzon
+--
+
+ALTER TABLE ONLY queuelistener ALTER COLUMN qlistenid SET DEFAULT nextval('queuelistener_qlistenid_seq'::regclass);
+
+
+--
+-- Name: qrouteid; Type: DEFAULT; Schema: public; Owner: peterzon
+--
+
+ALTER TABLE ONLY queueroutes ALTER COLUMN qrouteid SET DEFAULT nextval('queueroutes_qrouteid_seq'::regclass);
+
+
+--
+-- Name: queueid; Type: DEFAULT; Schema: public; Owner: peterzon
+--
+
+ALTER TABLE ONLY queues ALTER COLUMN queueid SET DEFAULT nextval('queues_queueid_seq'::regclass);
+
+
+--
+-- Data for Name: exchangeroutes; Type: TABLE DATA; Schema: public; Owner: peterzon
+--
+
+COPY exchangeroutes (erouteid, fromhost, tohost, eid, routingkey) FROM stdin;
+\.
+
+
+--
+-- Name: exchangeroutes_erouteid_seq; Type: SEQUENCE SET; Schema: public; Owner: peterzon
+--
+
+SELECT pg_catalog.setval('exchangeroutes_erouteid_seq', 1, false);
+
+
+--
+-- Data for Name: exchanges; Type: TABLE DATA; Schema: public; Owner: peterzon
+--
+
+COPY exchanges (exchangeid, exchangename) FROM stdin;
+1	lofar.ra.command
+2	lofar.ra.notification
+3	lofar.otdb.command
+4	lofar.otdb.notification
+5	lofar.sm.command
+6	lofar.sm.notification
+7	lofar.mom.command
+8	lofar.mom.notification
+\.
+
+
+--
+-- Name: exchanges_exchangeid_seq; Type: SEQUENCE SET; Schema: public; Owner: peterzon
+--
+
+SELECT pg_catalog.setval('exchanges_exchangeid_seq', 8, true);
+
+
+--
+-- Data for Name: hosts; Type: TABLE DATA; Schema: public; Owner: peterzon
+--
+
+COPY hosts (hostid, hostname) FROM stdin;
+1	scu001.control.lofar
+2	ccu001.control.lofar
+3	head01.control.lofar
+4	lhn001.cep2.lofar
+5	mcu001.control.lofar
+6	lcs023.control.lofar
+7	sas001.control.lofar
+8	locus001.cep2.lofar
+9	locus002.cep2.lofar
+10	locus003.cep2.lofar
+11	locus004.cep2.lofar
+12	locus005.cep2.lofar
+13	locus006.cep2.lofar
+14	locus007.cep2.lofar
+15	locus008.cep2.lofar
+16	locus009.cep2.lofar
+17	locus010.cep2.lofar
+18	locus011.cep2.lofar
+19	locus012.cep2.lofar
+20	locus013.cep2.lofar
+21	locus014.cep2.lofar
+22	locus015.cep2.lofar
+23	locus016.cep2.lofar
+24	locus017.cep2.lofar
+25	locus018.cep2.lofar
+26	locus019.cep2.lofar
+27	locus020.cep2.lofar
+28	locus021.cep2.lofar
+29	locus022.cep2.lofar
+30	locus023.cep2.lofar
+31	locus024.cep2.lofar
+32	locus025.cep2.lofar
+33	locus026.cep2.lofar
+34	locus027.cep2.lofar
+35	locus028.cep2.lofar
+36	locus029.cep2.lofar
+37	locus030.cep2.lofar
+38	locus031.cep2.lofar
+39	locus032.cep2.lofar
+40	locus033.cep2.lofar
+41	locus034.cep2.lofar
+42	locus035.cep2.lofar
+43	locus036.cep2.lofar
+44	locus037.cep2.lofar
+45	locus038.cep2.lofar
+46	locus039.cep2.lofar
+47	locus040.cep2.lofar
+48	locus041.cep2.lofar
+49	locus042.cep2.lofar
+50	locus043.cep2.lofar
+51	locus044.cep2.lofar
+52	locus045.cep2.lofar
+53	locus046.cep2.lofar
+54	locus047.cep2.lofar
+55	locus048.cep2.lofar
+56	locus049.cep2.lofar
+57	locus050.cep2.lofar
+58	locus051.cep2.lofar
+59	locus052.cep2.lofar
+60	locus053.cep2.lofar
+61	locus054.cep2.lofar
+62	locus055.cep2.lofar
+63	locus056.cep2.lofar
+64	locus057.cep2.lofar
+65	locus058.cep2.lofar
+66	locus059.cep2.lofar
+67	locus060.cep2.lofar
+68	locus061.cep2.lofar
+69	locus062.cep2.lofar
+70	locus063.cep2.lofar
+71	locus064.cep2.lofar
+72	locus065.cep2.lofar
+73	locus066.cep2.lofar
+74	locus067.cep2.lofar
+75	locus068.cep2.lofar
+76	locus069.cep2.lofar
+77	locus070.cep2.lofar
+78	locus071.cep2.lofar
+79	locus072.cep2.lofar
+80	locus073.cep2.lofar
+81	locus074.cep2.lofar
+82	locus075.cep2.lofar
+83	locus076.cep2.lofar
+84	locus077.cep2.lofar
+85	locus078.cep2.lofar
+86	locus079.cep2.lofar
+87	locus080.cep2.lofar
+88	locus081.cep2.lofar
+89	locus082.cep2.lofar
+90	locus083.cep2.lofar
+91	locus084.cep2.lofar
+92	locus085.cep2.lofar
+93	locus086.cep2.lofar
+94	locus087.cep2.lofar
+95	locus088.cep2.lofar
+96	locus089.cep2.lofar
+97	locus090.cep2.lofar
+98	locus091.cep2.lofar
+99	locus092.cep2.lofar
+100	locus093.cep2.lofar
+101	locus094.cep2.lofar
+\.
+
+
+--
+-- Name: hosts_hostid_seq; Type: SEQUENCE SET; Schema: public; Owner: peterzon
+--
+
+SELECT pg_catalog.setval('hosts_hostid_seq', 101, true);
+
+
+--
+-- Data for Name: persistentexchanges; Type: TABLE DATA; Schema: public; Owner: peterzon
+--
+
+COPY persistentexchanges (pexid, eid, hid) FROM stdin;
+1	1	1
+2	2	1
+3	3	1
+4	4	1
+5	5	1
+6	6	1
+7	7	1
+8	8	1
+\.
+
+
+--
+-- Name: persistentexchanges_pexid_seq; Type: SEQUENCE SET; Schema: public; Owner: peterzon
+--
+
+SELECT pg_catalog.setval('persistentexchanges_pexid_seq', 8, true);
+
+
+--
+-- Data for Name: persistentqueues; Type: TABLE DATA; Schema: public; Owner: peterzon
+--
+
+COPY persistentqueues (pquid, qid, hid) FROM stdin;
+1	1	1
+2	2	1
+3	3	1
+4	4	4
+5	5	4
+6	6	4
+7	4	2
+8	5	2
+9	6	2
+10	7	2
+11	8	2
+12	9	2
+13	10	2
+14	11	2
+15	12	2
+16	13	2
+17	7	5
+18	12	5
+19	13	5
+20	14	6
+21	15	6
+22	16	6
+23	8	6
+24	9	6
+25	10	6
+26	11	6
+27	14	7
+28	15	7
+29	16	7
+30	4	8
+31	5	8
+32	6	8
+33	4	9
+34	5	9
+35	6	9
+36	4	10
+37	5	10
+38	6	10
+39	4	11
+40	5	11
+41	6	11
+42	4	12
+43	5	12
+44	6	12
+45	4	13
+46	5	13
+47	6	13
+48	4	14
+49	5	14
+50	6	14
+51	4	15
+52	5	15
+53	6	15
+54	4	16
+55	5	16
+56	6	16
+57	4	17
+58	5	17
+59	6	17
+60	4	18
+61	5	18
+62	6	18
+63	4	19
+64	5	19
+65	6	19
+66	4	20
+67	5	20
+68	6	20
+69	4	21
+70	5	21
+71	6	21
+72	4	22
+73	5	22
+74	6	22
+75	4	23
+76	5	23
+77	6	23
+78	4	24
+79	5	24
+80	6	24
+81	4	25
+82	5	25
+83	6	25
+84	4	26
+85	5	26
+86	6	26
+87	4	27
+88	5	27
+89	6	27
+90	4	28
+91	5	28
+92	6	28
+93	4	29
+94	5	29
+95	6	29
+96	4	30
+97	5	30
+98	6	30
+99	4	31
+100	5	31
+101	6	31
+102	4	32
+103	5	32
+104	6	32
+105	4	33
+106	5	33
+107	6	33
+108	4	34
+109	5	34
+110	6	34
+111	4	35
+112	5	35
+113	6	35
+114	4	36
+115	5	36
+116	6	36
+117	4	37
+118	5	37
+119	6	37
+120	4	38
+121	5	38
+122	6	38
+123	4	39
+124	5	39
+125	6	39
+126	4	40
+127	5	40
+128	6	40
+129	4	41
+130	5	41
+131	6	41
+132	4	42
+133	5	42
+134	6	42
+135	4	43
+136	5	43
+137	6	43
+138	4	44
+139	5	44
+140	6	44
+141	4	45
+142	5	45
+143	6	45
+144	4	46
+145	5	46
+146	6	46
+147	4	47
+148	5	47
+149	6	47
+150	4	48
+151	5	48
+152	6	48
+153	4	49
+154	5	49
+155	6	49
+156	4	50
+157	5	50
+158	6	50
+159	4	51
+160	5	51
+161	6	51
+162	4	52
+163	5	52
+164	6	52
+165	4	53
+166	5	53
+167	6	53
+168	4	54
+169	5	54
+170	6	54
+171	4	55
+172	5	55
+173	6	55
+174	4	56
+175	5	56
+176	6	56
+177	4	57
+178	5	57
+179	6	57
+180	4	58
+181	5	58
+182	6	58
+183	4	59
+184	5	59
+185	6	59
+186	4	60
+187	5	60
+188	6	60
+189	4	61
+190	5	61
+191	6	61
+192	4	62
+193	5	62
+194	6	62
+195	4	63
+196	5	63
+197	6	63
+198	4	64
+199	5	64
+200	6	64
+201	4	65
+202	5	65
+203	6	65
+204	4	66
+205	5	66
+206	6	66
+207	4	67
+208	5	67
+209	6	67
+210	4	68
+211	5	68
+212	6	68
+213	4	69
+214	5	69
+215	6	69
+216	4	70
+217	5	70
+218	6	70
+219	4	71
+220	5	71
+221	6	71
+222	4	72
+223	5	72
+224	6	72
+225	4	73
+226	5	73
+227	6	73
+228	4	74
+229	5	74
+230	6	74
+231	4	75
+232	5	75
+233	6	75
+234	4	76
+235	5	76
+236	6	76
+237	4	77
+238	5	77
+239	6	77
+240	4	78
+241	5	78
+242	6	78
+243	4	79
+244	5	79
+245	6	79
+246	4	80
+247	5	80
+248	6	80
+249	4	81
+250	5	81
+251	6	81
+252	4	82
+253	5	82
+254	6	82
+255	4	83
+256	5	83
+257	6	83
+258	4	84
+259	5	84
+260	6	84
+261	4	85
+262	5	85
+263	6	85
+264	4	86
+265	5	86
+266	6	86
+267	4	87
+268	5	87
+269	6	87
+270	4	88
+271	5	88
+272	6	88
+273	4	89
+274	5	89
+275	6	89
+276	4	90
+277	5	90
+278	6	90
+279	4	91
+280	5	91
+281	6	91
+282	4	92
+283	5	92
+284	6	92
+285	4	93
+286	5	93
+287	6	93
+288	4	94
+289	5	94
+290	6	94
+291	4	95
+292	5	95
+293	6	95
+294	4	96
+295	5	96
+296	6	96
+297	4	97
+298	5	97
+299	6	97
+300	4	98
+301	5	98
+302	6	98
+303	4	99
+304	5	99
+305	6	99
+306	4	100
+307	5	100
+308	6	100
+309	4	101
+310	5	101
+311	6	101
+\.
+
+
+--
+-- Name: persistentqueues_pquid_seq; Type: SEQUENCE SET; Schema: public; Owner: peterzon
+--
+
+SELECT pg_catalog.setval('persistentqueues_pquid_seq', 311, true);
+
+
+--
+-- Data for Name: queuelistener; Type: TABLE DATA; Schema: public; Owner: peterzon
+--
+
+COPY queuelistener (qlistenid, fromhost, eid, qid, subject) FROM stdin;
+\.
+
+
+--
+-- Name: queuelistener_qlistenid_seq; Type: SEQUENCE SET; Schema: public; Owner: peterzon
+--
+
+SELECT pg_catalog.setval('queuelistener_qlistenid_seq', 1, false);
+
+
+--
+-- Data for Name: queueroutes; Type: TABLE DATA; Schema: public; Owner: peterzon
+--
+
+COPY queueroutes (qrouteid, fromhost, tohost, qid) FROM stdin;
+\.
+
+
+--
+-- Name: queueroutes_qrouteid_seq; Type: SEQUENCE SET; Schema: public; Owner: peterzon
+--
+
+SELECT pg_catalog.setval('queueroutes_qrouteid_seq', 1, false);
+
+
+--
+-- Data for Name: queues; Type: TABLE DATA; Schema: public; Owner: peterzon
+--
+
+COPY queues (queueid, queuename) FROM stdin;
+1	TreeStatus
+2	TaskSpecified
+3	ResourceAssigner
+4	lofar.task.feedback.dataproducts
+5	lofar.task.feedback.processing
+6	lofar.task.feedback.state
+7	lofar.task.specification.system
+8	mom.task.feedback.dataproducts
+9	mom.task.feedback.processing
+10	mom.task.feedback.state
+11	mom.task.specification.system
+12	otdb.task.feedback.dataproducts
+13	otdb.task.feedback.processing
+14	mom-otdb-adapter.importxml
+15	mom.command
+16	mom.importxml
+\.
+
+
+--
+-- Name: queues_queueid_seq; Type: SEQUENCE SET; Schema: public; Owner: peterzon
+--
+
+SELECT pg_catalog.setval('queues_queueid_seq', 16, true);
+
+
+--
+-- Name: exchangeroutes_pkey; Type: CONSTRAINT; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+ALTER TABLE ONLY exchangeroutes
+    ADD CONSTRAINT exchangeroutes_pkey PRIMARY KEY (erouteid);
+
+
+--
+-- Name: exchanges_pkey; Type: CONSTRAINT; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+ALTER TABLE ONLY exchanges
+    ADD CONSTRAINT exchanges_pkey PRIMARY KEY (exchangeid);
+
+
+--
+-- Name: hosts_pkey; Type: CONSTRAINT; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+ALTER TABLE ONLY hosts
+    ADD CONSTRAINT hosts_pkey PRIMARY KEY (hostid);
+
+
+--
+-- Name: persistentexchanges_pkey; Type: CONSTRAINT; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+ALTER TABLE ONLY persistentexchanges
+    ADD CONSTRAINT persistentexchanges_pkey PRIMARY KEY (pexid);
+
+
+--
+-- Name: persistentqueues_pkey; Type: CONSTRAINT; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+ALTER TABLE ONLY persistentqueues
+    ADD CONSTRAINT persistentqueues_pkey PRIMARY KEY (pquid);
+
+
+--
+-- Name: queuelistener_pkey; Type: CONSTRAINT; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+ALTER TABLE ONLY queuelistener
+    ADD CONSTRAINT queuelistener_pkey PRIMARY KEY (qlistenid);
+
+
+--
+-- Name: queueroutes_pkey; Type: CONSTRAINT; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+ALTER TABLE ONLY queueroutes
+    ADD CONSTRAINT queueroutes_pkey PRIMARY KEY (qrouteid);
+
+
+--
+-- Name: queues_pkey; Type: CONSTRAINT; Schema: public; Owner: peterzon; Tablespace: 
+--
+
+ALTER TABLE ONLY queues
+    ADD CONSTRAINT queues_pkey PRIMARY KEY (queueid);
+
+
+--
+-- Name: public; Type: ACL; Schema: -; Owner: postgres
+--
+
+REVOKE ALL ON SCHEMA public FROM PUBLIC;
+REVOKE ALL ON SCHEMA public FROM postgres;
+GRANT ALL ON SCHEMA public TO postgres;
+GRANT ALL ON SCHEMA public TO PUBLIC;
+
+
+--
+-- PostgreSQL database dump complete
+--
+
diff --git a/SAS/QPIDInfrastructure/bin/route_to_struct.py b/SAS/QPIDInfrastructure/bin/route_to_struct.py
new file mode 100755
index 0000000000000000000000000000000000000000..5a169c06ff4f31c26df38136272c786e963717f2
--- /dev/null
+++ b/SAS/QPIDInfrastructure/bin/route_to_struct.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+
+import sys
+from lofar.qpidinfrastructure.QPIDDB import qpidinfra
+from lofar.common import dbcredentials
+
+dbcreds = dbcredentials.DBCredentials().get("qpidinfra")
+todb=qpidinfra(dbcreds)
+
+tosearch = sys.stdin.readlines()
+
+numlines = len(tosearch)
+
+#fqdn=['lhn001.cep2.lofar',
+#      'ccu001.control.lofar',
+#      'sas001.control.lofar',
+#      'cbm001.control.lofar',
+#      'cbm001.control.lofar',
+#      'cbm001.control.lofar',      'cbm001.control.lofar',      'cbm001.control.lofar',      'cbm001.control.lofar',      'cbm001.control.lofar',      'cbm001.control.lofar',      'cbm001.control.lofar',      'cbm001.control.lofar',      'cbm001.control.lofar',      'cbm001.control.lofar',
+
+
+def to_hostname(s):
+    leafname=s.split(':')[0].split('.')[0].lower()
+    fqdn="%s.control.lofar" %(leafname)
+    #print leafname[0:5]
+    if (leafname[0:5]=='locus'):
+        fqdn="%s.cep2.lofar" %(leafname)
+    if (leafname=='lhn001'):
+        fqdn="%s.cep2.lofar" %(leafname)
+
+    return fqdn
+
+def to_exchangename(s):
+    exchangename=s.split('=')[1].split(')')[0]
+    print((" found exchangename '%s'" %(exchangename)))
+    return exchangename
+
+
+print((" Num lines %d " %(numlines)))
+
+offset=0
+
+while (tosearch[offset] != 'Static Routes:\n'):
+    #print ( "'%s'" %( tosearch[offset]))
+    offset += 1
+    if (offset==numlines):
+        print("notfound")
+        break
+
+if (offset!=numlines):
+    for offset in range(offset,numlines):
+        s = tosearch[offset].split(' ')
+        if ( len(s) ==5 ): # valid description
+            hosta=to_hostname(s[2])
+            exchangename=to_exchangename(s[2])
+            if (exchangename == ''):
+                exchangename='lofar.default.bus'
+            queuename=s[4].split('=')[1].split(')')[0]
+            hostb=to_hostname(s[4]) #.split(':')[0].split('.')
+            if (s[3]=='<='):
+                todb.bindexchangetohost(exchangename,hosta)
+                todb.bindexchangetohost(exchangename,hostb)
+                todb.bindqueuetohost(queuename,hosta)
+                todb.bindqueuetohost(queuename,hostb)
+                todb.setqueueroute(queuename,hostb,hosta,exchangename)
+                print(("# queue %s from %s to %s" %(queuename,hostb,hosta)))
+            if (s[3]=='=>'):
+                todb.bindqueuetohost(queuename,hosta)
+                todb.bindqueuetohost(queuename,hostb)
+                todb.setqueueroute(queuename,hosta,hostb)
+                print(("# queue %s from %s to %s" %(queuename,hosta,hostb)))
diff --git a/SAS/SpecificationServices/lib/specification_service.py b/SAS/SpecificationServices/lib/specification_service.py
index 1f995c8d03151e6ae87d05ed6813f70ebb195143..108bcccc4f9df4718dcaadc9cabdf2f089ea598d 100644
--- a/SAS/SpecificationServices/lib/specification_service.py
+++ b/SAS/SpecificationServices/lib/specification_service.py
@@ -33,7 +33,6 @@ from lofar.mom.momqueryservice.momqueryrpc import MoMQueryRPC
 from lofar.specificationservices.translation_service_rpc import TranslationRPC
 from lofar.specificationservices.validation_service_rpc import ValidationRPC
 from lofar.common.xmlparse import parse_xml_string_or_bytestring
-
 from .config import SPECIFICATION_SERVICENAME, MOMIMPORTXML_BUSNAME, MOMIMPORTXML_BROKER
 
 permitted_activities = ["observation", "pipeline", "measurement"]
@@ -250,6 +249,7 @@ class SpecificationHandler(ServiceMessageHandler):
 
     def _add_spec_to_mom(self, mom_xml):
         logger.info("about to send mom_xml: %s", mom_xml)
+
         # Construct message payload using old-style (MessageBus) message format
         msg = MessageContentOld()
         msg.protocol = "mom.importxml"
diff --git a/SAS/SpecificationServices/lib/translation_service.py b/SAS/SpecificationServices/lib/translation_service.py
index 2f63585db5d8295ba158d767eb10d03d51634d3a..696c22ca335612a7fcfcbb3dd668de0e9dacbf44 100644
--- a/SAS/SpecificationServices/lib/translation_service.py
+++ b/SAS/SpecificationServices/lib/translation_service.py
@@ -143,6 +143,7 @@ class SpecificationTranslationHandler(ServiceMessageHandler):
             momspec_xml = momspec_xml.decode("utf-8")
 
         logger.debug("MoM spec after translation -> " + momspec_xml)
+
         with self.validationrpc:
             response = self.validationrpc.validate_mom_specification(momspec_xml)
         if response["valid"]:
diff --git a/SAS/TriggerServices/django_rest/restinterface/wsgi.py b/SAS/TriggerServices/django_rest/restinterface/wsgi.py
index 51d27edf8189272d63b049f85b98fe75fc5a5a69..dba7cb0440686857adf0446624b27ac1ffb231c2 100644
--- a/SAS/TriggerServices/django_rest/restinterface/wsgi.py
+++ b/SAS/TriggerServices/django_rest/restinterface/wsgi.py
@@ -16,7 +16,8 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lofar.triggerservices.restinter
 _application = get_wsgi_application()
 
 def application(environ, start_response):
-  # LOFARENV must be set (e.g. using SetEnv in Apache)  
-  os.environ['LOFARENV'] = environ['LOFARENV']
+  # LOFARENV can be set (e.g. using SetEnv in Apache)
+  if 'LOFARENV' in environ:
+    os.environ['LOFARENV'] = environ['LOFARENV']
   return _application(environ, start_response)
 
diff --git a/SubSystems/Online_Cobalt/CMakeLists.txt b/SubSystems/Online_Cobalt/CMakeLists.txt
index 8abfcd665f049998c45fd83129652491cf46cbff..df903f8afabfd4b97bc18390ff0b267a7c507d65 100644
--- a/SubSystems/Online_Cobalt/CMakeLists.txt
+++ b/SubSystems/Online_Cobalt/CMakeLists.txt
@@ -5,4 +5,6 @@
 # PVSSGateway_Stub and Service_Broker are needed for the tRTmetadataToFile test
 lofar_package(Online_Cobalt DEPENDS Cobalt Online_OutputProc APLCommon PVSSGateway_Stub Service_Broker Log_Client)
 
+lofar_add_package(Cobalt_validation validation)
+
 add_subdirectory(test)
diff --git a/SubSystems/Online_Cobalt/test/Beamformer/tCoherentStokes_3sec_2st_3sb.parset b/SubSystems/Online_Cobalt/test/Beamformer/tCoherentStokes_3sec_2st_3sb.parset
index 85cdbf7a843be17a25bb5d102dd147f028ef75b9..a9687524f1e6258131c3b87d3f54081a0f184355 100644
--- a/SubSystems/Online_Cobalt/test/Beamformer/tCoherentStokes_3sec_2st_3sb.parset
+++ b/SubSystems/Online_Cobalt/test/Beamformer/tCoherentStokes_3sec_2st_3sb.parset
@@ -291,8 +291,8 @@ Observation.stopTime=2013-12-05 14:15:03
 Observation.strategy=default
 Observation.topologyID=mom.M329819.fO
 _DPname=LOFAR_ObsSW_TempObs0045
-PIC.Core.CS002HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
-PIC.Core.CS501HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
+PIC.Core.CS002HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
+PIC.Core.CS501HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
 Cobalt.Tuning.finalMetaDataTimeout = 1
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.X =   0.000000e+00
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.Y =   0.000000e+00
diff --git a/SubSystems/Online_Cobalt/test/Beamformer/tComplexVoltages_3sec_2st_3sb.parset b/SubSystems/Online_Cobalt/test/Beamformer/tComplexVoltages_3sec_2st_3sb.parset
index a851ae0737347fcd74cf73c82a5bfeaa0ba194f1..2e9f7739be876500e7ea0dab8c2c95fa6a25509c 100644
--- a/SubSystems/Online_Cobalt/test/Beamformer/tComplexVoltages_3sec_2st_3sb.parset
+++ b/SubSystems/Online_Cobalt/test/Beamformer/tComplexVoltages_3sec_2st_3sb.parset
@@ -294,8 +294,8 @@ Observation.stopTime=2013-12-05 14:15:03
 Observation.strategy=default
 Observation.topologyID=mom.M329819.fO
 _DPname=LOFAR_ObsSW_TempObs0045
-PIC.Core.CS002HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
-PIC.Core.CS501HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
+PIC.Core.CS002HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
+PIC.Core.CS501HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
 Cobalt.Tuning.finalMetaDataTimeout = 1
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.X =   0.000000e+00
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.Y =   0.000000e+00
diff --git a/SubSystems/Online_Cobalt/test/Beamformer/tFlysEye_3sec_2st_3sb.parset b/SubSystems/Online_Cobalt/test/Beamformer/tFlysEye_3sec_2st_3sb.parset
index 7f0dc9a23d731beaa7c0acb2528aabea72a9e43b..9b3f14797ad9e5a80f59ae8037132636b1202b8a 100644
--- a/SubSystems/Online_Cobalt/test/Beamformer/tFlysEye_3sec_2st_3sb.parset
+++ b/SubSystems/Online_Cobalt/test/Beamformer/tFlysEye_3sec_2st_3sb.parset
@@ -291,8 +291,8 @@ Observation.stopTime=2013-12-05 14:15:03
 Observation.strategy=default
 Observation.topologyID=mom.M329819.fO
 _DPname=LOFAR_ObsSW_TempObs0045
-PIC.Core.CS002HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
-PIC.Core.CS501HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
+PIC.Core.CS002HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
+PIC.Core.CS501HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
 Cobalt.Tuning.finalMetaDataTimeout = 1
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.X =   0.000000e+00
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.Y =   0.000000e+00
diff --git a/SubSystems/Online_Cobalt/test/Beamformer/tIncoherentStokes_3sec_2st_3sb.parset b/SubSystems/Online_Cobalt/test/Beamformer/tIncoherentStokes_3sec_2st_3sb.parset
index c9ca0386f55ce585d3991d35416e66449e23de2c..567d83e1e77e43db230c3ead454a3e79a83c973a 100644
--- a/SubSystems/Online_Cobalt/test/Beamformer/tIncoherentStokes_3sec_2st_3sb.parset
+++ b/SubSystems/Online_Cobalt/test/Beamformer/tIncoherentStokes_3sec_2st_3sb.parset
@@ -291,8 +291,8 @@ Observation.stopTime=2013-12-05 14:15:03
 Observation.strategy=default
 Observation.topologyID=mom.M329819.fO
 _DPname=LOFAR_ObsSW_TempObs0045
-PIC.Core.CS002HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
-PIC.Core.CS501HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
+PIC.Core.CS002HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
+PIC.Core.CS501HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
 Cobalt.Tuning.finalMetaDataTimeout = 1
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.X =   0.000000e+00
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.Y =   0.000000e+00
diff --git a/SubSystems/Online_Cobalt/test/Commensal/tCommensal_3sec_2st_3sb.parset b/SubSystems/Online_Cobalt/test/Commensal/tCommensal_3sec_2st_3sb.parset
index 5dc680d36445ba818ccec76e4df5c2c5cdca4446..016898a31d3459e654b56b88e1be25d1e1155597 100644
--- a/SubSystems/Online_Cobalt/test/Commensal/tCommensal_3sec_2st_3sb.parset
+++ b/SubSystems/Online_Cobalt/test/Commensal/tCommensal_3sec_2st_3sb.parset
@@ -294,8 +294,8 @@ Observation.stopTime=2013-12-05 14:15:03
 Observation.strategy=default
 Observation.topologyID=mom.M329819.fO
 _DPname=LOFAR_ObsSW_TempObs0045
-PIC.Core.CS002HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
-PIC.Core.CS501HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
+PIC.Core.CS002HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
+PIC.Core.CS501HBA0.RSP.sources=[file:/opt/shared/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
 Cobalt.Tuning.finalMetaDataTimeout = 1
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.X =   0.000000e+00
 PIC.Core.CS001LBA.LBA_INNER.LBA_10_70.phase0.Y =   0.000000e+00
diff --git a/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_1sec_1st_5sb_noflagging.parset b/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_1sec_1st_5sb_noflagging.parset
index 50055a93feb724369dd878f02743a614201c03be..9fa9dbccd3befdbb4b1c3bac57a0ade38faa9b9b 100644
--- a/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_1sec_1st_5sb_noflagging.parset
+++ b/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_1sec_1st_5sb_noflagging.parset
@@ -83,7 +83,7 @@ Observation.stopTime = '2012-11-21 12:47:02'
 PIC.Core.RS106HBA.clockCorrectionTime = 0
 PIC.Core.RS106HBA.phaseCenter = [3829205.598,469142.533,5062181.002]
 PIC.Core.RS106HBA.position = [3829205.598,469142.533,5062181.002]
-PIC.Core.RS106HBA.RSP.ports = [file:/localhome/lofar/test_sets/3sec/rs106.udp]
+PIC.Core.RS106HBA.RSP.sources = [file:/opt/shared/test_sets/3sec/rs106.udp]
 _DPname = LOFAR_ObsSW_TempObs0024
 Cobalt.Kernels.BeamFormerKernel.dumpOutput = false
 Cobalt.Kernels.BeamFormerTransposeKernel.dumpOutput = false
diff --git a/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_1st_5sb.parset b/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_1st_5sb.parset
index 00bab86287469c027c6a904c90dcf14c72747a01..e2a6ab60a5ec07900d75e2c64f76a70afe01cbac 100644
--- a/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_1st_5sb.parset
+++ b/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_1st_5sb.parset
@@ -76,7 +76,7 @@ Observation.stopTime = '2012-11-21 12:47:03'
 PIC.Core.RS106HBA.clockCorrectionTime = 0
 PIC.Core.RS106HBA.phaseCenter = [3829205.598,469142.533,5062181.002]
 PIC.Core.RS106HBA.position = [3829205.598,469142.533,5062181.002]
-PIC.Core.RS106HBA.RSP.ports = [file:/localhome/lofar/test_sets/3sec/rs106.udp]
+PIC.Core.RS106HBA.RSP.sources = [file:/opt/shared/test_sets/3sec/rs106.udp]
 _DPname = LOFAR_ObsSW_TempObs0024
 _parsetPrefix = CorrAppl.CorrProc.
 _processName = CorrProc
diff --git a/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_2st_5sb.parset b/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_2st_5sb.parset
index 741a79f4945fc92949d1afccd003b15e7601d2a6..9cc5d26a0bce71cff3d74da6d0c1331d5123cd82 100644
--- a/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_2st_5sb.parset
+++ b/SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_2st_5sb.parset
@@ -77,7 +77,7 @@ Observation.stopTime = '2012-11-21 12:47:03'
 PIC.Core.RS106HBA.clockCorrectionTime = 0
 PIC.Core.RS106HBA.phaseCenter = [3829205.598,469142.533,5062181.002]
 PIC.Core.RS106HBA.position = [3829205.598,469142.533,5062181.002]
-PIC.Core.RS106HBA.RSP.ports = [file:/localhome/lofar/test_sets/3sec/rs106.udp]
+PIC.Core.RS106HBA.RSP.sources = [file:/opt/shared/test_sets/3sec/rs106.udp]
 _DPname = LOFAR_ObsSW_TempObs0024
 Observation.VirtualInstrument.stationList = [RS106,RS205]
 Observation.Dataslots.RS205HBA.DataslotList = [0..4]
@@ -85,7 +85,7 @@ Observation.Dataslots.RS205HBA.RSPBoardList = [5*0]
 PIC.Core.RS205HBA.clockCorrectionTime = 0
 PIC.Core.RS205HBA.phaseCenter = [3831479.670,463487.529,5060989.903]
 PIC.Core.RS205HBA.position = [3831479.670,463487.529,5060989.903]
-PIC.Core.RS205HBA.RSP.ports = [file:/localhome/lofar/test_sets/3sec/rs205.udp]
+PIC.Core.RS205HBA.RSP.sources = [file:/opt/shared/test_sets/3sec/rs205.udp]
 Cobalt.Kernels.BeamFormerKernel.dumpOutput = false
 Cobalt.Kernels.BeamFormerTransposeKernel.dumpOutput = false
 Cobalt.Kernels.CoherentStokesKernel.dumpOutput = false
diff --git a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw-check-output.sh b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw-check-output.sh
index 30d903a91a42947e2e898deb746135aee15ad13c..04b00edf534d383cb16c3e8ea06de6263baa8fbf 100755
--- a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw-check-output.sh
+++ b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw-check-output.sh
@@ -5,16 +5,17 @@
 #
 # $Id$
 
-if [ $# -ne 1 ]; then
-  echo 'Syntax: tRSPRaw-check-output.sh <test-output-dir>' >&2
+if [ $# -ne 2 ]; then
+  echo 'Syntax: tRSPRaw-check-output.sh <test-input-dir> <test-output-dir>' >&2
   exit 1
 fi
 
-OUTDIR="$1"
+INDIR="$1"
+OUTDIR="$2"
 
 # from the .parset:
-IN_FILENAME1=/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp
-IN_FILENAME2=/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp
+IN_FILENAME1="$INDIR/tRSPRaw_tmp.raw1.udp"
+IN_FILENAME2="$INDIR/tRSPRaw_tmp.raw2.udp"
 OUT_FILENAME1="$OUTDIR/L102030_CS002HBA0_0_rsp.raw"
 OUT_FILENAME2="$OUTDIR/L102030_CS501HBA0_0_rsp.raw"
 TIMESTAMP_PATTERN="14:15:"  # to exclude the first N packets in IN_FILENAME* with timestamps before RSP raw start time
diff --git a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.parset b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.parset
index 6ecd367c4be562bfbe8a8177a1a711ac1ccf93c6..4e0bcedac777969cc494afd9602245193a999ec2 100644
--- a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.parset
+++ b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.parset
@@ -3,7 +3,7 @@ Observation.ObsID = 102030
 Observation.momID = 88
 Cobalt.commandStream = null:
 Observation.startTime = '2013-12-05 14:15:00'
-Observation.stopTime = '2013-12-05 14:15:04'
+Observation.stopTime = '2013-12-05 14:15:02'
 Observation.sampleClock = 200
 Observation.nrBitsPerSample = 16
 Cobalt.correctBandPass = true
@@ -89,14 +89,14 @@ PIC.Core.CS002HBA0.HBA_ZERO.HBA_110_190.phase0.X =   0.000000e+00
 PIC.Core.CS002HBA0.HBA_ZERO.HBA_110_190.phase0.Y =   0.000000e+00
 PIC.Core.CS002HBA0.HBA_ZERO.HBA_110_190.delay.X  =   6.875965e-06
 PIC.Core.CS002HBA0.HBA_ZERO.HBA_110_190.delay.Y  =   6.876319e-06
-PIC.Core.CS002HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp]
+PIC.Core.CS002HBA0.RSP.sources=[file:tRSPRaw_tmp.raw1.udp] # run script will overwrite
 PIC.Core.CS002HBA0.phaseCenter=[3826600.961, 460953.402, 5064881.136]
 
 PIC.Core.CS501HBA0.HBA_ZERO.HBA_110_190.phase0.X =   0.000000e+00
 PIC.Core.CS501HBA0.HBA_ZERO.HBA_110_190.phase0.Y =   0.000000e+00
 PIC.Core.CS501HBA0.HBA_ZERO.HBA_110_190.delay.X  =   1.649378e-05
 PIC.Core.CS501HBA0.HBA_ZERO.HBA_110_190.delay.Y  =   1.649378e-05
-PIC.Core.CS501HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp]
+PIC.Core.CS501HBA0.RSP.sources=[file:tRSPRaw_tmp.raw2.udp] # run script will overwrite
 PIC.Core.CS501HBA0.phaseCenter=[3825568.820, 460647.620, 5065683.028]
 
 Observation.Dataslots.CS002HBA0.DataslotList=[0..19]
diff --git a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.run b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.run
index a7bd4043c0711ab3af7128d2f8a781484c4c5d5a..13002aaa5940194996835cc68c62e3bdbd4539af 100755
--- a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.run
+++ b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.run
@@ -1,8 +1,20 @@
-#!/bin/bash
+#!/bin/bash -ve
 TESTNAME=`basename "${0%%.run}"`
 
-# Replace output keys in parset (for now append; TODO: replace)
+INDIR=${PWD}/${TESTNAME}.input
+OUTDIR=${PWD}/${TESTNAME}.output
+mkdir -p $INDIR $OUTDIR
+
+# Generate input
+yes 1 2 3 4 | generateRSP -f '2013-12-05 14:15:00' -t '2013-12-05 14:15:02' -s 2 > $INDIR/tRSPRaw_tmp.raw1.udp
+yes 5 6 7 8 | generateRSP -f '2013-12-05 14:15:00' -t '2013-12-05 14:15:02' -s 2 > $INDIR/tRSPRaw_tmp.raw2.udp
+
+# Replace input/output keys in parset (for now append; TODO: replace)
+(
+echo "PIC.Core.CS002HBA0.RSP.sources=[file:${INDIR}/tRSPRaw_tmp.raw1.udp]"
+echo "PIC.Core.CS501HBA0.RSP.sources=[file:${INDIR}/tRSPRaw_tmp.raw2.udp]"
 echo "Observation.DataProducts.Output_RSPRaw.locations="\
-     "[2*localhost:${PWD}/${TESTNAME}.output]" >> ${TESTNAME}.parset
+     "[2*localhost:${OUTDIR}]"
+) >> ${TESTNAME}.parset
 
 ../runtest.sh "$TESTNAME"
diff --git a/SubSystems/Online_Cobalt/test/default.parset b/SubSystems/Online_Cobalt/test/default.parset
index 74165f818ceb77b366f83aba606285955e5c69fc..fb6ca9b615308093bf597066a9d57e07e19d02e2 100644
--- a/SubSystems/Online_Cobalt/test/default.parset
+++ b/SubSystems/Online_Cobalt/test/default.parset
@@ -39,8 +39,8 @@ Observation.bandFilter=LBA_10_70
 
 # Retrieved from station_configuration.parset
 #PIC.Core.CS001LBA.RSP.receiver=cbt001_0
-#PIC.Core.CS001LBA.RSP.ports=[udp:0.0.0.0:4346, udp:0.0.0.0:4347, udp:0.0.0.0:4348, udp:0.0.0.0:4349]
-#or e.g. PIC.Core.CS001HBA0.RSP.ports=[file:/input/file1, file:/input/file2, file:/input/file3, file:/input/file4]
+#PIC.Core.CS001LBA.RSP.sources=[udp:0.0.0.0:4346, udp:0.0.0.0:4347, udp:0.0.0.0:4348, udp:0.0.0.0:4349]
+#or e.g. PIC.Core.CS001HBA0.RSP.sources=[file:/input/file1, file:/input/file2, file:/input/file3, file:/input/file4]
 
 # Optional: mapping of subbands on RSP boards, per station
 # Example: subbands 0 and 1 are emitted on board 0, slots 0 and 1.
diff --git a/SubSystems/Online_Cobalt/test/runtest.sh.in b/SubSystems/Online_Cobalt/test/runtest.sh.in
index bd8240e750ac37b788afba28cc0fb3d6cd279570..ddc8aa16d4ca340f97c5d036da4feec62033c429 100755
--- a/SubSystems/Online_Cobalt/test/runtest.sh.in
+++ b/SubSystems/Online_Cobalt/test/runtest.sh.in
@@ -10,8 +10,9 @@
 . "@CMAKE_CURRENT_BINARY_DIR@/testFuncs.sh"
 
 TESTNAME="${1}"
-OUTDIR="${TESTNAME}.output"
-REFDIR="${srcdir}/${OUTDIR}"
+INDIR="${PWD}/${TESTNAME}.input"
+OUTDIR="${PWD}/${TESTNAME}.output"
+REFDIR="${srcdir}/${TESTNAME}.output"
 PARSET="${PWD}/${TESTNAME}.parset"
 
 # Some host info
@@ -64,7 +65,7 @@ echo "  in directory $(pwd)"
   CUSTOM_CHECK_SCRIPT="${srcdir}/${TESTNAME}-check-output.sh"
   if [ -x "$CUSTOM_CHECK_SCRIPT" ]; then
     echo "running custom output validation script: $CUSTOM_CHECK_SCRIPT $PWD"
-    "$CUSTOM_CHECK_SCRIPT" "$PWD" || error "custom output validation script failed!"
+    "$CUSTOM_CHECK_SCRIPT" "$INDIR" "$PWD" || error "custom output validation script failed!"
   fi
 
   if have_qpid; then
diff --git a/SubSystems/Online_Cobalt/test/tProductionParsets.in_parsets/CorrProc_196344-CygAf009-225SAPS.cleaned.param b/SubSystems/Online_Cobalt/test/tProductionParsets.in_parsets/CorrProc_196344-CygAf009-225SAPS.cleaned.param
index da9ead2d6dd7b91df092ccf61fa6db98a218f716..99e8198fee894f364d0141fe1261377578894a3a 100644
--- a/SubSystems/Online_Cobalt/test/tProductionParsets.in_parsets/CorrProc_196344-CygAf009-225SAPS.cleaned.param
+++ b/SubSystems/Online_Cobalt/test/tProductionParsets.in_parsets/CorrProc_196344-CygAf009-225SAPS.cleaned.param
@@ -1186,18 +1186,18 @@ Cobalt.Correlator.nrChannelsPerSubband = 64
 Cobalt.Correlator.nrBlocksPerIntegration = 2
 Cobalt.Correlator.integrationTime = 2.01327
 
-PIC.Core.CS002HBA0.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS002HBA1.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS003HBA0.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS003HBA1.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS004HBA0.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS004HBA1.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS005HBA0.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS005HBA1.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS006HBA0.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS006HBA1.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS007HBA0.RSP.ports = [4*file:/dev/null]
-PIC.Core.CS007HBA1.RSP.ports = [4*file:/dev/null]
+PIC.Core.CS002HBA0.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS002HBA1.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS003HBA0.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS003HBA1.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS004HBA0.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS004HBA1.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS005HBA0.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS005HBA1.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS006HBA0.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS006HBA1.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS007HBA0.RSP.sources = [4*file:/dev/null]
+PIC.Core.CS007HBA1.RSP.sources = [4*file:/dev/null]
 _DPname = LOFAR_ObsSW_TempObs0121
 
 
diff --git a/SubSystems/Online_Cobalt/test/tProductionParsets.run b/SubSystems/Online_Cobalt/test/tProductionParsets.run
index 9b72b121b21c181c18fa04cbe1cdba326e52657b..2547e65369c90b28417798cdde6deca9cb420f0b 100755
--- a/SubSystems/Online_Cobalt/test/tProductionParsets.run
+++ b/SubSystems/Online_Cobalt/test/tProductionParsets.run
@@ -27,7 +27,7 @@ do
   echo "Observation.stopTime  = 2013-01-01 00:00:00" >> $PARSET
 
   # Prevent input from being read
-  sed -i 's/RSP.ports = .*/RSP.ports = [4*null:]/' $PARSET
+  sed -i 's/RSP.sources = .*/RSP.sources = [4*null:]/' $PARSET
 
   # Prevent output from being written
   echo "Observation.DataProducts.Output_Correlated.filenames=[488*/dev/null]" >> $PARSET
diff --git a/SubSystems/Online_Cobalt/test/tStatusFeedback.in_parset_failure_1 b/SubSystems/Online_Cobalt/test/tStatusFeedback.in_parset_failure_1
index 7991c0c09ad114ccbf15c32e1159944f768f72b3..09640ed232497d5a00cb46860e0c328dc781a08f 100644
--- a/SubSystems/Online_Cobalt/test/tStatusFeedback.in_parset_failure_1
+++ b/SubSystems/Online_Cobalt/test/tStatusFeedback.in_parset_failure_1
@@ -62,7 +62,7 @@ Observation.topologyID =
 PIC.Core.RS106HBA.clockCorrectionTime = 0
 PIC.Core.RS106HBA.phaseCenter = [3829205.598,469142.533,5062181.002]
 PIC.Core.RS106HBA.position = [3829205.598,469142.533,5062181.002]
-PIC.Core.RS106HBA.RSP.ports = [file:/localhome/lofar/test_sets/3sec/rs106.udp]
+PIC.Core.RS106HBA.RSP.sources = [factory:]
 _DPname = LOFAR_ObsSW_TempObs0024
 _parsetPrefix = CorrAppl.CorrProc.
 _processName = CorrProc
diff --git a/SubSystems/Online_Cobalt/test/tStatusFeedback.in_parset_success_1 b/SubSystems/Online_Cobalt/test/tStatusFeedback.in_parset_success_1
index eb1ddf093297f77b0bdb1fa8d78a1074dc6ab3da..5a19daea352edd616f7e12a5c327b11f34db104c 100644
--- a/SubSystems/Online_Cobalt/test/tStatusFeedback.in_parset_success_1
+++ b/SubSystems/Online_Cobalt/test/tStatusFeedback.in_parset_success_1
@@ -62,7 +62,7 @@ Observation.topologyID =
 PIC.Core.RS106HBA.clockCorrectionTime = 0
 PIC.Core.RS106HBA.phaseCenter = [3829205.598,469142.533,5062181.002]
 PIC.Core.RS106HBA.position = [3829205.598,469142.533,5062181.002]
-PIC.Core.RS106HBA.RSP.ports = [file:/localhome/lofar/test_sets/3sec/rs106.udp]
+PIC.Core.RS106HBA.RSP.sources = [factory:]
 _DPname = LOFAR_ObsSW_TempObs0024
 _parsetPrefix = CorrAppl.CorrProc.
 _processName = CorrProc
diff --git a/SubSystems/Online_Cobalt/test/tStatusFeedback.run2.in b/SubSystems/Online_Cobalt/test/tStatusFeedback.run2.in
index 4f9ae4e365729085a19ececa474cefb7722af6e7..ea0b48efb4a1813fec49fca5ee5c387dd4ca7c68 100755
--- a/SubSystems/Online_Cobalt/test/tStatusFeedback.run2.in
+++ b/SubSystems/Online_Cobalt/test/tStatusFeedback.run2.in
@@ -27,7 +27,7 @@ function test_parset {
   fi
 
   # Pull the message from the status queue
-  recv_msg lofar.task.feedback.state || error 'Could not pull status message from bus'
+  recv_msg mac.task.feedback.state || error 'Could not pull status message from bus'
 
   # Check the message against the expected result
   # <TODO>
diff --git a/SubSystems/Online_Cobalt/test/testFuncs.sh.in b/SubSystems/Online_Cobalt/test/testFuncs.sh.in
index 93413e709f6b341e2470165d52da7c1bdcb2221a..5c5f07b39250c9562d29bfea36e61dc734219d69 100755
--- a/SubSystems/Online_Cobalt/test/testFuncs.sh.in
+++ b/SubSystems/Online_Cobalt/test/testFuncs.sh.in
@@ -17,6 +17,7 @@ error()
 # Create runtime output directories if not exists.
 # Not done at build, because it is a post-install setting. Different in production.
 mkdir -p "$LOFARROOT/var/log" "$LOFARROOT/var/run" || error "Failed to create runtime output directories"
+mkdir -p "$LOFARROOT/nfs/parset/" || error "Failed to create shared directories"
 mkdir -p "$LOFARROOT/etc/parset-additions.d/override" || error "Failed to create runtime input directories"
 
 # Set all locales to "C" to avoid problems with, e.g., perl.
@@ -26,9 +27,9 @@ export LC_ALL="C"
 # (if they exist, so ignore any errors regarding that)
 
 QUEUES="
-  lofar.task.feedback.state
-  lofar.task.feedback.dataproducts
-  lofar.task.feedback.processing"
+  mac.task.feedback.state
+  otdb.task.feedback.dataproducts
+  otdb.task.feedback.processing"
 for Q in $QUEUES; do
   create_queue "$Q"
 done
diff --git a/SubSystems/Online_Cobalt/test/tstartBGL.in_parset b/SubSystems/Online_Cobalt/test/tstartBGL.in_parset
index 7f55ab71d796f6698869f9d07b88f18157130c16..add5cea4b0c866b346b8b67b2786b87d79e448a3 100644
--- a/SubSystems/Online_Cobalt/test/tstartBGL.in_parset
+++ b/SubSystems/Online_Cobalt/test/tstartBGL.in_parset
@@ -62,7 +62,7 @@ Observation.topologyID =
 PIC.Core.RS106HBA.clockCorrectionTime = 0
 PIC.Core.RS106HBA.phaseCenter = [3829205.598,469142.533,5062181.002]
 PIC.Core.RS106HBA.position = [3829205.598,469142.533,5062181.002]
-PIC.Core.RS106HBA.RSP.ports = [file:/localhome/lofar/test_sets/3sec/rs106.udp]
+PIC.Core.RS106HBA.RSP.sources = [factory:]
 _DPname = LOFAR_ObsSW_TempObs0024
 _parsetPrefix = CorrAppl.CorrProc.
 _processName = CorrProc
diff --git a/SubSystems/Online_Cobalt/test/tstartBGL.run b/SubSystems/Online_Cobalt/test/tstartBGL.run
index a50c54de596cfd12ff72d4db3611852400fba996..9e3f74dc9a90fb9d41c01d2dcaecd24b27f06462 100755
--- a/SubSystems/Online_Cobalt/test/tstartBGL.run
+++ b/SubSystems/Online_Cobalt/test/tstartBGL.run
@@ -61,6 +61,11 @@ echo "***************************"
 # Add the connection information for this test
 echo "Cobalt.FinalMetaDataGatherer.host=localhost" >> tstartBGL.in_parset
 for cluster in CEP4 DRAGNET; do  # all in cobalt_functions.sh as used by runObservation.sh
+  if [ $cluster == DRAGNET ]; then
+    # skip cluster if we cannot reach it
+    timeout 10 ssh dragnet.control.lofar true || continue
+  fi
+
   echo "Testing with storageClusterName $cluster"
   echo "Observation.DataProducts.Output_Correlated.storageClusterName=$cluster" >> tstartBGL.in_parset
   nice -n 5 startBGL.sh 1 2 3 tstartBGL.in_parset 1000 || error "startBGL.sh failed"
diff --git a/SubSystems/Online_Cobalt/validation/CMakeLists.txt b/SubSystems/Online_Cobalt/validation/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..86c80b54a006eb882e3f77441cfebfb9b311c77c
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/CMakeLists.txt
@@ -0,0 +1,44 @@
+# $Id: CMakeLists.txt  $
+
+lofar_package(Cobalt_validation)
+
+# we choose a bit of an odd location for the validation scripts.
+# yes, the scripts validate script and the individual tests are executable, so you could think they belong in bin or sbin...
+# but we do not want the validation test directory tree in bin or sbin
+# We also want the validation "suite" in a self contained folder,
+# so we choose pragmatically for share/validation
+SET(DEST "share/validation")
+FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${DEST})
+
+# add the validate script...
+INSTALL(PROGRAMS validate DESTINATION ${DEST})
+
+# and add convenience symlink in the build dir
+EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink
+                ${CMAKE_CURRENT_SOURCE_DIR}/validate
+                ${CMAKE_BINARY_DIR}/${DEST}/validate)
+
+# add "normal" files to installation and add symlink
+SET(files README validation_utils.sh)
+FOREACH(file ${files})
+    INSTALL(FILES ${file} DESTINATION ${DEST})
+
+    EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink
+                    ${CMAKE_CURRENT_SOURCE_DIR}/${file}
+                    ${CMAKE_BINARY_DIR}/${DEST}/${file})
+ENDFOREACH()
+
+
+# and add each and every subdirectory tree as-is.
+FILE(GLOB children RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*)
+FOREACH(child ${children})
+    IF(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${child})
+        INSTALL(DIRECTORY ${child}
+                USE_SOURCE_PERMISSIONS
+                DESTINATION ${DEST})
+        EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink
+                        ${CMAKE_CURRENT_SOURCE_DIR}/${child}
+                        ${CMAKE_BINARY_DIR}/${DEST}/${child})
+    ENDIF()
+ENDFOREACH()
+
diff --git a/SubSystems/Online_Cobalt/validation/cep4/docker/9311-cgroupdriver.test b/SubSystems/Online_Cobalt/validation/cep4/docker/9311-cgroupdriver.test
index bc87ad3e5fa236613684869db767c85fc3356509..7217f25952c7fc11fbeff516adf74f878e78dd66 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/docker/9311-cgroupdriver.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/docker/9311-cgroupdriver.test
@@ -1,4 +1,7 @@
-#/bin/bash -e
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 # Test for cgroupdriver=cgroupfs workaround for Docker 1.9.1
 
@@ -9,3 +12,4 @@ DOCKER_VERSION=`docker --version | awk '{ print $3; }'`
 # Docker startup line must contain "--exec-opt=native.cgroupdriver=cgroupfs"
 fgrep "ExecStart" /usr/lib/systemd/system/docker.service | fgrep -- "--exec-opt=native.cgroupdriver=cgroupfs" || exit 1
 
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/docker/datalocation.test b/SubSystems/Online_Cobalt/validation/cep4/docker/datalocation.test
index 0d4666d30e4dfd34b34afaa07f379420dcbfd09d..258b4b61a81e3aa18e2ccadbe10ffc1a61972ceb 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/docker/datalocation.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/docker/datalocation.test
@@ -1,4 +1,7 @@
-#/bin/bash -e
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 # Test for location of Docker's data: head nodes need to use /localdata/docker
 
@@ -7,3 +10,5 @@
 # Docker startup line must contain "--graph=/localdata/docker"
 fgrep "ExecStart" /usr/lib/systemd/system/docker.service | fgrep -- "--graph=/localdata/docker" || exit 1
 
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/lofarsys/docker.root.test b/SubSystems/Online_Cobalt/validation/cep4/lofarsys/docker.root.test
index 6830d60c8cc9c712d446e10e2b7003f39625bfec..8d1c5902b2355f8367dee8d1f90eb3c43166cb00 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/lofarsys/docker.root.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/lofarsys/docker.root.test
@@ -1,3 +1,9 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_root_privileges
+check_running_on_cep4
 
 sudo -u lofarsys docker run --rm -it hello-world || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/lofarsys/ssh_localhost.root.test b/SubSystems/Online_Cobalt/validation/cep4/lofarsys/ssh_localhost.root.test
index 1f58c732d0cf127e9a79cc053236db1a8dc6bbfb..afac7c7a338c9114b05d471d8187864420dbce13 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/lofarsys/ssh_localhost.root.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/lofarsys/ssh_localhost.root.test
@@ -1,3 +1,9 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_root_privileges
+check_running_on_cep4
 
 sudo -u lofarsys ssh localhost /bin/true || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/network/9228-ipoib.test b/SubSystems/Online_Cobalt/validation/cep4/network/9228-ipoib.test
index 27d5b1c0b1a7f89f2c3c0c33169d95e4a81801ff..c0020f9ccbb49c17fdfbf66395e297f41d617963 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/network/9228-ipoib.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/network/9228-ipoib.test
@@ -1,4 +1,7 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 for IFACE in ib0
 do
@@ -13,3 +16,5 @@ do
   # Connected mode should be set
   [ "`cat /sys/class/net/$IFACE/mode`" == "connected" ] || exit 1
 done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/network/resolvconf.test b/SubSystems/Online_Cobalt/validation/cep4/network/resolvconf.test
similarity index 65%
rename from SubSystems/Online_Cobalt/validation/system/network/resolvconf.test
rename to SubSystems/Online_Cobalt/validation/cep4/network/resolvconf.test
index 30a9805c4facaea12d51a524f855ebde428960bb..44554f1854405afa5803fc61b9bac97969906c4a 100755
--- a/SubSystems/Online_Cobalt/validation/system/network/resolvconf.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/network/resolvconf.test
@@ -1,7 +1,12 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 # Check for the presence of the various LOFAR domains
 for DOMAIN in infiniband.lofar online.lofar control.lofar
 do
   grep "^search.*\b$DOMAIN\b" /etc/resolv.conf || exit 1
 done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/os/9226-utc.test b/SubSystems/Online_Cobalt/validation/cep4/os/9226-utc.test
index ebbfe9d0761ebdc38fa6f98c56f575b41af8c425..198a073812212e62e63d874d46b80fa6cbab4008 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/os/9226-utc.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/os/9226-utc.test
@@ -1,3 +1,8 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 [ "`date +%Z`" == "UTC" ] || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/os/9376-hostname.test b/SubSystems/Online_Cobalt/validation/cep4/os/9376-hostname.test
index e57b2d94c956c157e845f699ce7ac3cee6ccaa46..02bb16fdf0fe9f2ea967172a85a2a452c30b3950 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/os/9376-hostname.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/os/9376-hostname.test
@@ -1,4 +1,7 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 FQDN=`hostname --fqdn`
 
@@ -12,3 +15,5 @@ case $FQDN in
     ;;
 esac
 
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/os/lustre-mounted.test b/SubSystems/Online_Cobalt/validation/cep4/os/lustre-mounted.test
index 03ccef9e2a6f921679cc2cb073536a0da12c5687..b9a8324ea1159d50ff9990551a52df3dae161ad8 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/os/lustre-mounted.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/os/lustre-mounted.test
@@ -1,3 +1,8 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 mount -t lustre | fgrep -q "/data" || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/os/services.test b/SubSystems/Online_Cobalt/validation/cep4/os/services.test
index f9760a5e6b812f311710f65dc82269397cbcb98d..61c867d0977d019220749f8ea9886fab04137426 100644
--- a/SubSystems/Online_Cobalt/validation/cep4/os/services.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/os/services.test
@@ -1,4 +1,9 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 # No services should have failed, except for network.service
 systemctl | fgrep -v "network.service" | grep failed
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/os/users.test b/SubSystems/Online_Cobalt/validation/cep4/os/users.test
index bb4feff36e346781f26e84ece2c35e0414bb3c26..10fda27a040f51a1a33578228ae13020c61f89ae 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/os/users.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/os/users.test
@@ -1,4 +1,7 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 # Restrict the users allowed on the CPU nodes
 [[ `hostname` =~ "cpu" ]] || exit 0
@@ -12,3 +15,5 @@ id lofarbuild || exit 1
 # mol should exist
 id mol || exit 1
 
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/packages/iperf.test b/SubSystems/Online_Cobalt/validation/cep4/packages/iperf.test
index 7885c278818fd01fc03cbf91d12e30b358b4051c..ebc869ae0dc0ccaf056dcae38618234ac49fa2d9 100644
--- a/SubSystems/Online_Cobalt/validation/cep4/packages/iperf.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/packages/iperf.test
@@ -1,2 +1,8 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
+
 yum -C list installed iperf || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/packages/jenkins-reqs.test b/SubSystems/Online_Cobalt/validation/cep4/packages/jenkins-reqs.test
index d52bcd6af1ea5717422c9df461f5afa423e0b8d9..876ca60424890acd57aeb61a64e380993e64ed1f 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/packages/jenkins-reqs.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/packages/jenkins-reqs.test
@@ -1,4 +1,7 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 # Requirements to do a Jenkins build. Only relevant for head0X
 [[ `hostname` =~ "head" ]] || exit 0
@@ -7,3 +10,5 @@ yum -C list installed | grep "^java-" || exit 1
 yum -C list installed subversion || exit 1
 yum -C list installed cmake || exit 1
 yum -C list installed gcc-c++ || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/qpid/9315-no_auth.test b/SubSystems/Online_Cobalt/validation/cep4/qpid/9315-no_auth.test
index 7de7af4bf4053f5cf295146de8ca8eb151cf4351..21222f7f2dd1a889edf1479d2e370f0aaec2bec2 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/qpid/9315-no_auth.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/qpid/9315-no_auth.test
@@ -1,3 +1,8 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 grep "auth=no" /etc/qpid/qpidd.conf || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/slurm/available.test b/SubSystems/Online_Cobalt/validation/cep4/slurm/available.test
index 9b7a190d6f5d5be379806278493c0c6683563089..4cfc7aa61bc428b0fac76d5fabcd099e9432d019 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/slurm/available.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/slurm/available.test
@@ -1,3 +1,8 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 sinfo || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cep4/slurm/nhc.test b/SubSystems/Online_Cobalt/validation/cep4/slurm/nhc.test
index 6e448e0654d392861eeb4af1d95607d1f7d5bf0a..48ceeaa1c2a45ea5e12292f986f81a4c88e304e6 100755
--- a/SubSystems/Online_Cobalt/validation/cep4/slurm/nhc.test
+++ b/SubSystems/Online_Cobalt/validation/cep4/slurm/nhc.test
@@ -1,6 +1,11 @@
-#!/bin/bash -v
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cep4
 
 # Run only on cpu nodes
-[[ `hostname` =~ "cpu" ]] || exit 0
+[[ `hostname` =~ "cpu" ]] || exit $INVALID_NODE_EXIT_CODE
 
 /usr/sbin/nhc || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_com_obj.py b/SubSystems/Online_Cobalt/validation/cluster/c3/c3_com_obj.py
deleted file mode 100755
index 013f437a1d66838791150cd3f4247395ca2f249f..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_com_obj.py
+++ /dev/null
@@ -1,162 +0,0 @@
-# $Id$
-
-import re, sys
-from c3_except import *
-
-# class used to represent cluster taken from command line
-# clusters is the list of cluster names used as a key in the
-# nodes associative array. To iterate through them would look as such:
-# for cname in c3_cluster_list.clusters:
-#       for node in c3_cluster_list[cname]:
-#               print node
-
-class c3_cluster_list:
-    def __init__(self):
-        self.clusters = []
-        self.node = {}
-        self.username = {}
-class c3_command_line:
-
-
-    # matches any non whitespace word
-    any_token = re.compile( r"\s*(?P<word>\S+)" )
-
-    # matches a - or -- and then the option name
-    option = re.compile( r"\s*(?P<word>--?\w+)" )
-
-    # matches a cluster name
-    c_name = re.compile( r"\s+(?P<username>[\w_\-]+@)?(?P<name>[\w_\-]+)?:" );
-
-    # matches a single number
-    number = re.compile( r"\s*(?P<num>\d+)" );
-
-    # matches a range quaifier "-"
-    range_qual = re.compile( r"\s*-" );
-
-    # matches a single node qualifier ","
-    single = re.compile( r"\s*," );
-
-    # initiliaze line as an enpty string
-    line = ""
-
-
-    # initilaize internal line as the text to be parsed
-    def __init__( self, command_line ):
-        self.line = command_line
-
-    # returns a single option, a - or -- followed by string
-    def get_opt( self ):
-        match = self.option.match( self.line )
-        if match:
-            line_out = ""
-            line_out = match.group( "word" )
-            self.line = self.line[match.end():]
-        else:
-            raise end_of_option( None, None )
-        return line_out
-
-    # returns a single token, used for cases such as --file FILENAME to get FILENAME
-    def get_opt_string( self ):
-        match = self.any_token.match( self.line )
-        if match:
-            line_out = ""
-            line_out = match.group( "word" )
-            self.line = self.line[match.end():]
-        elif len( self.line ) == 0:
-            raise end_of_opt_string( "option needs a string", None)
-        else:
-            raise bad_string( "option requires a string", None )
-        return line_out
-
-    # all parsing is done externally through this command
-    def get_clusters( self ):
-        cluster_obj = c3_cluster_list()
-
-        # check if any clusters are specified on the command line, if not
-        # then set execution to default cluster (name not known at this point
-        # /default is an invalid cluster name and hence a place holder in this
-        # context
-        match = self.c_name.match( self.line )
-        if not match:
-            cluster_obj.clusters.append( "/default" )
-            cluster_obj.node["/default"]=[]
-            cluster_obj.node["/default"].append( "" )
-            cluster_obj.username["/default"]="/default"
-        # while there are still cluster blocks on the command line
-        while match:
-            # string parsed text from line
-            self.line = self.line[match.end():]
-            # if a name is specified get it, else : is specified set to default cluster
-            if match.group( "name" ):
-                index = match.group( "name" )
-            else:
-                index = "/default"
-
-            #if an alternate username is specified use it.
-            if match.group( "username" ):
-                cluster_obj.username[index]=match.group( "username" )[:-1]
-            else:
-                cluster_obj.username[index]="/default"
-
-            # add name to cluster list and initialize node list
-            cluster_obj.clusters.append( index )
-
-            match = self.number.match( self.line )
-            cluster_obj.node[index] = []
-            cluster_obj.node[index].append( "" )
-            node_index = 0
-
-            # if a range has been specified on command line parse it
-            # this process gets the first number from the list and stores it in a temp
-            # var. Then checks if it is part of a range or a single number. If it is a range
-            # it processes once and then checks for a single number, if it is a single number
-            # it processes single numbers until wither the end of the node position specification
-            # or a range qualifier is found, if a range is found the process loops. In this way the
-            # would be parsed correctly: "1,3,4-8,10-20,25"
-            while match:
-                # strip parsed text from line
-                self.line = self.line[match.end():]
-                # get starting number from match
-                cluster_obj.node[index][node_index] = int( match.group( "num") )
-                # if a match is specified parse it
-                match = self.range_qual.match( self.line )
-                if match:
-                    # strip parsed text from line
-                    self.line = self.line[match.end():]
-                    match = self.number.match( self.line )
-                    # set start and end of range
-                    start_range = cluster_obj.node[index][node_index] + 1
-                    if match:
-                        end_range = int( match.group( "num" ) ) + 1
-                    else:
-                        self.line = '-' + self.line
-                        return cluster_obj
-                    # loop from start to end and add node position to node list
-                    for counter in  range( start_range, end_range ):
-                        node_index = node_index + 1
-                        cluster_obj.node[index].append( "" )
-                        cluster_obj.node[index][node_index] = counter
-                    # strip parsed text from line
-                    self.line = self.line[match.end():]
-                # check for single numbers (2,5,6)
-                match = self.single.match( self.line )
-                if match:
-                    # srip parsed text from line
-                    self.line = self.line[match.end():]
-                    # add node poistion to node list
-                    cluster_obj.node[index].append( "" )
-                    node_index = node_index + 1
-                    match = self.number.match( self.line )
-            match = self.c_name.match( self.line )
-        try:
-            if self.line[0] != ' ':
-                raise bad_cluster_name ( None, None )
-        except IndexError:
-            pass
-        return cluster_obj
-
-    # returns the rest of line (usually for the end of the command)
-    def rest_of_command( self ):
-        return self.line
-
-# vim:tabstop=4:shiftwidth=4:noexpandtab:textwidth=76
diff --git a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_config.py b/SubSystems/Online_Cobalt/validation/cluster/c3/c3_config.py
deleted file mode 100755
index 4a8440f0694db62f48c886cc50fbb2a5425c3aa9..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_config.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# $Id$
-
-import os
-import os.path
-import c3_version
-
-#This file holds all the variables used by the other utilities
-
-C3_OKEXIT = 0
-C3_ERRLOCAL = 1
-C3_ERRREMOTE = 2
-def_path = ''
-
-try:
-	def_path = os.environ[ 'C3_PATH' ]
-except KeyError:
-	if os.path.isfile('/usr/bin/cexec') and os.access('/usr/bin/cexec', os.X_OK):
-		def_path = '/usr/bin'
-	else:
-		def_path = '/opt/c3-' + repr(c3_version.c3_version_major)
-
-# vim:tabstop=4:shiftwidth=4:noexpandtab:textwidth=76
diff --git a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_except.py b/SubSystems/Online_Cobalt/validation/cluster/c3/c3_except.py
deleted file mode 100755
index baf2caa2223636848089d113e05da396c97d3c92..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_except.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# $Id$
-
-class c3_except:
-	description = ""
-	last = ""
-
-	def __init__(self, string, name):
-		self.description = string
-		self.last = name
-
-
-class parse_error( c3_except ):
-	pass
-
-class bad_cluster_name( parse_error ):
-	pass
-
-class no_more_clusters( c3_except ):
-	pass
-
-class invalid_head_node( parse_error ):
-	pass
-
-class invalid_cluster_block( parse_error ):
-	pass
-
-class no_head_node( c3_except ):
-	pass
-
-class invalid_node( parse_error ):
-	pass
-
-class end_of_cluster( c3_except ):
-	pass
-
-class internel_error( c3_except ):
-	pass
-
-class indirect_cluster( parse_error ):
-	pass
-
-class not_in_range( parse_error ):
-	pass
-
-class end_of_option( c3_except ):
-	pass
-
-class bad_string( parse_error ):
-	pass
-
-class end_of_opt_string( bad_string ):
-	pass
-
-# vim:tabstop=4:shiftwidth=4:noexpandtab:textwidth=76
diff --git a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_file_obj.py b/SubSystems/Online_Cobalt/validation/cluster/c3/c3_file_obj.py
deleted file mode 100755
index eba02b590ef0b4d5d538921b0e237c6ff27db5bf..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_file_obj.py
+++ /dev/null
@@ -1,335 +0,0 @@
-# $Id$
-
-import sys, re
-from c3_except import *
-
-# this is the internal representation of a node
-# as of right now it is just simply it's name
-# (ip or alias) and it's status. dead = 0 is alive
-# dead = 1 id offline
-class node_obj:
-    name = ""
-    dead = 0
-
-class cluster_def:
-    "parses the cluster definition file"
-
-    ###################################################################
-    #  this is the regular expressions used parse the file            #
-    ###################################################################
-
-    # beginning of cluster definition (name of the cluster)
-    # matches cluster_name {
-    cluster_name = re.compile ( r"""
-            \s*cluster\s+           #cluster keyword
-            (?P<c_name>             #cluster name
-                    [\w_\-]+        #may contain an alphanumeric, underscore, and dash
-            )\s*{[\t\v ]*(\#.*)?\n""", re.VERBOSE | re.IGNORECASE
-    )
-
-    # extracts the name of the head node
-    # matches external:internal
-    # with the internal name optional
-    head_node = re.compile ( r"""
-            \s*                     #get rid of whitespace
-            (?P<extname>            #external head node name goes first
-                    [\w\-\.]+
-            )?
-            (:                      #if internal name spcified
-                    (?P<intname>    #extract internal name
-                            [\w\-\.]+
-                    )
-            ){0,1}[\t\v" "]*(\#.*)?\n""", re.VERBOSE
-    )
-
-    # extracts the name of compute nodes
-    # matches dead nodename
-    # with dead being optional and including
-    # ranges
-    compute_node = re.compile ( r"""
-            \s*     #get rid of whitespace
-            (?P<dead_node>
-                    dead[\t\v" "]+
-            )?
-            (?P<comname>    #get name of current node
-                    [\w\-.]+                #non range part of name
-            )
-            (?P<range>
-                    \[(?P<start>\d+)\-(?P<stop>\d+)\]       #get range (optional)
-            ){0,1}[\t\v" "]*(\#.*)?\n""", re.VERBOSE
-    )
-
-
-    # exclude nodes from a range
-    # matches exclude [num1-num2]
-    # with num1 and num2 being integers
-    exclude = re.compile ( r"""
-            \s*exclude\s*
-            ((?P<single>\s+\d+)|(\[(?P<start>\d+)\-(?P<stop>\d+)\]))
-            [\t\v" "]*(\#.*)?\n
-            """, re.VERBOSE | re.IGNORECASE
-    )
-
-    # matches brackets { }
-    start_bracket = re.compile( """\s*{""" )
-    end_bracket = re.compile ( """\s*}[\t\v" "]*""" )
-
-    # matches any non whitespace character
-    any_token = re.compile ("\s*\S+")
-
-    # matches a comment line
-    comment = re.compile( r"[ \t\r\f\v]*#.*\n" )
-
-    #########################################################
-    # variables needed for execution                        #
-    #########################################################
-
-    # filename of cluster config file
-    file = ""
-
-    # this is a string used to hold the config file
-    line = ""
-
-    # string to hole the current cluster name
-    c_name = ""
-
-    #strings to hold the head node names
-    head_int = ""
-    head_ext = ""
-
-    #list to hold ranges for nodes
-    node_list = []
-
-    #used to show place where error occured
-    last_cluster = "first cluster in list"
-    last_machine = "first node in list"
-
-    #########################################################
-    #                                                       #
-    # this is the constructor, it takes the filename of the #
-    # config file to parse, the second init throws an error #
-    # if no file name is given                              #
-    #                                                       #
-    #########################################################
-    def __init__(self, filename):
-
-        self.file = filename
-        inputfile = open( filename, "r" )
-
-        # generate a string containing the file
-        line_in = inputfile.readline()
-        while line_in:
-            self.line = self.line + line_in
-            line_in = inputfile.readline()
-        inputfile.close()
-
-    #########################################################
-    # resets the internal variables after an error          #
-    #########################################################
-    def reset_vars(self):
-        self.line       =       ""
-        self.c_name     =       ""
-        self.head_int   =       ""
-        self.head_ext   =       ""
-        self.node_list  =       []
-        self.last_cluster =     "first cluster in list"
-        self.last_machine =     "first node in list"
-
-    #########################################################
-    # re-initializes the file (begins at the first cluster  #
-    # again)                                                #
-    #########################################################
-    def reread_file(self):
-        self.reset_vars()
-        self.__init__(self.file)
-
-    #########################################################
-    # strips comments from front of file                    #
-    #########################################################
-    def strip_comments( self ):
-
-        match = self.comment.match( self.line )
-        while match:
-            self.line = self.line[match.end():]
-            match = self.comment.match( self.line )
-
-    #########################################################
-    # scans to next cluster in the file, if called for the  #
-    # first time goes to first cluster                      #
-    # doesn't return anything, just sets internal variable  #
-    #########################################################
-    def get_next_cluster(self):
-
-        self.strip_comments()
-        match = None
-
-        try:
-            while not match:  #loop untill a cluster tag is found
-                match = self.cluster_name.match( self.line )
-                if match: #if cluster tag found
-                    # get cluster name
-                    self.c_name = match.group( "c_name" )
-                    self.line = self.line[match.end():]
-                    self.strip_comments()
-                    self.last_cluster = self.c_name
-                    try:
-                        match = self.head_node.match( self.line )
-                        if not match.group( "extname" ):
-                            # this indicates that it is an "indirect" cluster
-                            # the internal node is actually the external link
-                            # it was done this way because with normal operation
-                            # this would be an impossible state
-                            self.head_ext = None
-                            self.head_int = match.group( "intname" )
-                        else: # "direct" cluster
-                            self.head_ext = match.group( "extname" )
-                            self.head_int = match.group( "intname" )
-                            if not self.head_int:
-                                self.head_int = self.head_ext
-                    except AttributeError: # parse error on the head node
-                        name = self.c_name
-                        self.reset_vars()
-                        raise invalid_head_node( "invalid head node specification", name)
-                    self.line = self.line[match.end():]
-                    self.strip_comments()
-                else: # cluster tag not found
-                    # strip a single token from self.line
-                    match = self.any_token.match( self.line );
-                    # an open bracket here would mean that a valid cluster tag was not found
-                    # but a new cluster block was trying to be formed
-                    if self.start_bracket.match( match.group() ):
-                        name = self.last_cluster
-                        self.reset_vars()
-                        raise invalid_cluster_block( "invalid cluster definition", name)
-                    self.line = self.line[match.end():]
-                    self.strip_comments()
-                    match=None
-        except AttributeError: # invalid cluster definition
-            name = self.last_cluster
-            self.reset_vars()
-            raise no_more_clusters( "No more valid cluster blocks", name )
-
-    #########################################################
-    # returns the external name of the current cluster      #
-    # being parsed                                          #
-    #########################################################
-    def get_external_head_node(self):
-        if self.head_ext == "":
-            raise no_head_node( "no head node set.", "no cluster read yet." )
-        return self.head_ext;
-
-    #########################################################
-    # returns the internal name of the current cluster      #
-    # being parsed                                          #
-    #########################################################
-    def get_internal_head_node(self):
-        if self.head_int == "":
-            raise no_head_node( "no head node set.", "no cluster read yet." )
-        return self.head_int;
-
-    #########################################################
-    # returns the name of the next node in the files if     #
-    # called for the first time returns the first node name #
-    # returns a node_obj with the appropriate values filed  #
-    # in                                                    #
-    #########################################################
-    def get_next_node(self):
-
-        self.strip_comments()
-
-        # the only time it is possible for this to occur is
-        # with indirect clusters
-        if self.head_ext == None:
-            name = "cluster " + self.c_name
-            raise indirect_cluster( "indirect clusters don't have nodes", name )
-
-        node_out = node_obj()
-
-        # when a range is specified a queue is built with the nodes
-        # so if a queue is present then we know that a range has
-        # been specified and must be used up before we parse another
-        # line in the file
-        if self.node_list:
-            node_out = self.node_list.pop(0)
-            self.last_machine = node_out.name
-            return node_out
-
-        match = self.compute_node.match( self.line )
-
-        if match: # if a compute node is found
-
-            self.line = self.line[match.end():]
-            self.strip_comments()
-            if match.group( "dead_node" ): # check if it is a dead node
-                if not match.group( "range" ): # dead node qualifier invalid with a range
-                    node_out.name = match.group( "comname" )
-                    node_out.dead = 1
-                else: # return the given node with a dead set to true
-                    name = self.last_machine + " in " + self.c_name
-                    self.reset_vars()
-                    raise invalid_node( "dead specifier can not have a range", name )
-            else: # either a range or single node specified
-                if match.group( "range" ): # if range
-                    # retrieve starting and stopping ranges
-                    start_add_range = int( match.group( "start" ) )
-                    stop_add_range = int( match.group( "stop" ) ) + 1
-                    # start is always zero - start_add_range - start_add_range
-                    # this is done so that the indexing starts at zero
-                    start = 0
-                    stop = stop_add_range - start_add_range
-                    for index in range(start, stop): # populate list
-                        self.node_list.append( node_obj() )
-                        self.node_list[index].name = match.group( "comname" ) + str( index + start_add_range )
-                        self.node_list[index].dead = 0
-                    match = self.exclude.match( self.line )
-                    # multiple exclude lines after a range are valid, hence the while loop
-                    while match and self.node_list:
-                        try:
-                            if match.group( "single" ): # excluding a single machine
-                                index = int( match.group( "single" ) )
-                                if index < 0:
-                                    raise IndexError
-                                self.node_list[index - start_add_range].dead = 1
-                            else: # excluding a range
-                                start_ex_range = int( match.group( "start" ) )
-                                stop_ex_range = int( match.group( "stop" ) )
-                                # list index starts at zero so the exclude index and
-                                # list index must co-incide
-                                start = start_ex_range - start_add_range
-                                stop = (stop_ex_range - start_add_range) + 1
-                                if (start <  0) or (start > stop):
-                                    raise IndexError
-                                for index in range (start, stop):
-                                    self.node_list[index].dead = 1
-                            self.line = self.line[match.end():]
-                            self.strip_comments()
-                            match = self.exclude.match( self.line) # check for second exclude
-                        except IndexError:
-                            name = self.last_machine + " in " + self.c_name
-                            raise not_in_range( "index in exclude is not in range", name)
-
-                    node_out = self.node_list.pop(0)
-                else: # single node specifier
-                    node_out.name = match.group( "comname" )
-                    node_out.dead = 0
-
-
-        else: # either there are no more nodes ( closing bracket is found )
-              # or there was a parse error on the node specification line
-            if self.end_bracket.match( self.any_token.match(self.line).group() ):
-                raise end_of_cluster( "no more nodes in config file", None )
-            name = self.last_machine + " in " + self.c_name
-            self.reset_vars()
-            raise invalid_node( "invalid specification for a node", name )
-        self.last_machine = node_out.name
-        return node_out
-
-    #########################################################
-    # returns the name of the current cluster being read    #
-    #########################################################
-    def get_cluster_name(self):
-        if self.c_name == "":
-            raise no_cluster_name( "read in a cluster before useing", "no cluster read yet" )
-        return self.c_name
-
-# vim:tabstop=4:shiftwidth=4:noexpandtab:textwidth=76
diff --git a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_sock.py b/SubSystems/Online_Cobalt/validation/cluster/c3/c3_sock.py
deleted file mode 100755
index 7b5791f5d35d73da90d2cd1059d448e63b79a5c6..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_sock.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# $Id$
-
-import os, sys, time
-from select import select
-from subprocess import *
-
-# this class is used so that I can use strong authentication without
-# much hassel and easily implement timeouts. As I am only sending a frame or
-# two at a time it is not really noticable. This also allows an abstraction layer 
-# so that I can later change to raw socets/PVM/ or whatever without a major code
-# re-write: in no way is this meant for speed :)
-
-# one thing to note: these differ from real sockets API in one major way. since the server 
-# uses popen to initiate a connextion the clients stdin/stdout is mapped as the socket, thus
-# once a client sock has been established all prints will also go to the server, thus you could
-# really mess up communications by doing this - be carefull if you use them.
-
-class c3_sock:
-	# I use these to abstract whether or not I am writing to stdout/stdin (client)
-	# or a pipe (server)
-	output_pipe = None
-	input_pipe = None
-	# default timeout of 10 seconds
-	timeout = 10
-
-	# self explanitory
-	def set_timeout( self, new_timeout ):
-		self.timeout = new_timeout
-		
-	# general form if a messsage is length:message
-	# Simply pack the message and write to a pipe
-	def send( self, string_to_send  ):
-		length = len( string_to_send )
-		string_to_send = str(length) + ':' + string_to_send
-		self.output_pipe.write( string_to_send )
-		self.output_pipe.flush()
-
-
-	# these sockets timeout on a receive (think of this as more along the
-	# lines of UDP instead of TCP). Thus if you have a client that will sit 
-	# a while processing you need some form of stayalive message (I dont
-	# do anything that complicated in C3 so I didn't implement them)
-	def recieve( self ):
-		buffer = ""
-		# read a single character in until you get the size terminator
-		char_in = self.input_pipe.read( 1 )
-		time_start = time.time()
-		time_elapsed = 0
-		while char_in != ':':
-			buffer = buffer + char_in
-			char_in = self.input_pipe.read( 1 )
-			# as you can see timeouts work but are kinda cheesy, use a nonblocking
-			# read and increment a time counter if nothing is retuned, raise and exception
-			# if a threshold is crosed.
-			time_elapsed = time.time() - time_start
-			if char_in != "":
-				time_start = time.time()
-			if char_in == "" and time_elapsed > self.timeout:
-				raise 'time_out'
-
-		# try and read the message from the pipe in as large a chunk as possible, loop
-		# untill stated length is reached
-		length = int (buffer)
-		buffer = self.input_pipe.read( length )
-		time_start = time.time()
-		time_elapsed = 0
-		while len(buffer) < length:
-			new_buffer = buffer + self.input_pipe.read( length )
-			if len(new_buffer) > len(buffer):
-				time_start = time.time()
-				time_elapsed = 0
-				buffer = new_buffer
-			elif time_elapsed > self.timeout:
-				raise 'time_out'
-			else:
-				time_elapsed = time.time() - time_start
-		# return message received through pipe		
-		return buffer
-
-	def close( self ):
-		self.__del__()
-
-# server sock just defines two pipes (input, output) and initializes a command
-# this this socket is a socket to a command. Think "ssh node10 client_code"
-# where client code communicates through stdin and stdout.
-# when it's done simply close pipes
-class server_sock( c3_sock ):
-
-	def __init__(self, command):
-		#self.output_pipe, self.input_pipe = os.popen2( command )
-		# XXX: Changed to subprocess module (see ticket:16)
-		p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, close_fds=True)
-		(self.output_pipe, self.input_pipe) = (p.stdin, p.stdout)
-
-
-
-	def __del__( self ):
-		self.output_pipe.close()
-		self.input_pipe.close()
-		
-# the client sock takes stdin/stdout and map them to another pipe, this is so
-# the same send/receive function can be used. Since the socket uses only
-# stdin/stdout to communicate only one socket can be running at a time per
-# instance of the PROGRAM. stdout and stdin are set to None to catch this error.
-# on socket closing stdin and stdout are set back to thier original values.
-class client_sock( c3_sock ):
-
-	def __init__(self):
-		if sys.stdout == None and sys.stdin == None:
-			raise 'single client only'
-		self.output_pipe = sys.stdout
-		self.input_pipe = sys.stdin
-		sys.stdout = None
-		sys.stdin = None
-
-
-
-	def __del__( self ):
-		sys.stdin = self.input_pipe
-		sys.stdout = self.output_pipe
-
-# vim:tabstop=4:shiftwidth=4:noexpandtab:textwidth=76
diff --git a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_version.py b/SubSystems/Online_Cobalt/validation/cluster/c3/c3_version.py
deleted file mode 100755
index fee5453f0199c1793b2efdc342c2e5d4e85741c4..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/c3/c3_version.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# This file has been automatically generated, do not modify
-c3_version="5.1.3"
-c3_version_major="5"
diff --git a/SubSystems/Online_Cobalt/validation/cluster/c3/cexec b/SubSystems/Online_Cobalt/validation/cluster/c3/cexec
deleted file mode 100755
index 87ae33314036c7326521216c9786fec4a8794158..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/c3/cexec
+++ /dev/null
@@ -1,548 +0,0 @@
-#!/usr/bin/env python3
-# $Id: cexec 209 2011-02-02 23:38:27Z tjn $
-
-import c3_config
-import c3_version
-
-try:
-	import sys, os
-	from subprocess import *
-	
-	sys.path.append( c3_config.def_path )
-	import c3_com_obj, c3_file_obj, socket, c3_sock, re
-
-	######## constants ####################################
-	help_info = """Usage: cexec [OPTIONS] [MACHINE DEFINTIONS] command
-
-	--help -h	= Display help message.
-	--file -f	= Alternate cluster configuration file.  If one 
-			  is not supplied then /etc/c3.conf will be used.
-	-i		= Interactive mode.  Ask once before executing.
-	--head		= Execute command on head node.  Does not 
-			  execute on compute nodes if specified.
-	--pipe -p 	= Formats the output in a pipe friendly fashion.
-	--all		= Execute command on all the nodes on all the 
-			  clusters in the configuration file, ignores 
-			  the [MACHINE_DEFINITONS] block.
-	--dryrun -n	= Does not send commands to machines.
-	--version -v 	= Display the version number
-
-	Machine definitions are in the form of
-	clusterName: start-end, node number"""
-
-	backslash = re.compile( r"\\" )
-	#######################################################
-
-
-	######## check for arguments  #########################
-	if len(sys.argv) == 1:
-		print help_info
-		sys.exit(c3_config.C3_OKEXIT)
-	#######################################################
-
-
-	######### et default options  #########################
-	to_print = 0			#not used in parallel version
-	interactive = 0			#prompt before execution
-	head_node = 0			#execute only on head node
-	filename = "/etc/c3.conf"	#default config file
-	all = 0				#only execute on specified clusters
-	pipe_output = 0
-	defusername = ""
-	options_to_pass = ""
-	pidlist = []
-	#######################################################
-
-
-	######### internal variables ##########################
-	cluster_from_file = {}
-	file_set = 0
-	dryrun = 0
-	returncode = 0
-	#######################################################
-
-
-
-	######### parse command line ##########################
-
-	# first create one large string of the command 
-	command_line_list = sys.argv[1:]
-	command_line_string = ''
-	for item in command_line_list:
-		command_line_string = '%s %s' % (command_line_string, item)
-
-	# object used to parse command line
-	c3_command = c3_com_obj.c3_command_line( command_line_string )
-	 
-	# get first option
-	try:
-		option = c3_command.get_opt()
-		while option: # while more options
-			if (option == '-f') or (option == '--file'): # alternate config file
-				if not file_set:
-					filename = c3_command.get_opt_string()
-					file_set = 1
-				else:
-					print "only one file name can be specified."
-					sys.exit(c3_config.C3_ERRLOCAL)
-			elif option == '-h' or option == "--help": # print help info
-				print help_info
-				sys.exit(c3_config.C3_OKEXIT)
-			elif option == '-i': # ask once before executing command
-				interactive = 1
-			elif option == '--head': # execute only the head node
-				head_node = 1
-			elif option == "--all": #execute on all clusters in the list
-				all=1
-			elif option == '--pipe' or option == '-p':
-				pipe_output = 1
-				options_to_pass = options_to_pass + " --pipe"
-			elif option == '--dryrun' or option == '-n':
-				dryrun = 1
-			elif option == '--version' or option == '-v':
-				# Get C3's version
-				print c3_version.c3_version
-				sys.exit(c3_config.C3_OKEXIT)
-			else: # a catch all, option supplied not valid
-				print "option ", option, " is not valid"
-				sys.exit(c3_config.C3_ERRLOCAL)
-			option = c3_command.get_opt()
-	except c3_com_obj.end_of_option: #quit parsing options
-		pass
-
-	# create cluster object from command line 
-	clusters = c3_com_obj.c3_cluster_list()
-	 
-	if all == 0:
-		clusters = c3_command.get_clusters()
-	else:
-		c3_command.get_clusters()
-
-	# get command to execute
-	command = c3_command.rest_of_command()
-
-	#######################################################
-
-
-	######### test if ssh or rsh ##########################
-	try:
-		transport = os.environ[ 'C3_RSH' ]
-	except KeyError:
-		transport = 'ssh'
-	#######################################################
-	######### set filename  ##########################
-	if not file_set:
-		try:
-			filename = os.environ[ 'C3_CONF' ]
-		except KeyError:
-			filename = '/etc/c3.conf'
-	#######################################################
-
-	######### set default user name #######################
-	try:
-		defusername = os.environ[ 'C3_USER' ]
-	except KeyError:
-		defusername = os.environ[ 'USER' ]
-
-
-	######### make cluster list object from file ##########
-
-	########################################################
-	########################################################
-	# fixed to only read clusters specified 
-	# and to set default cluster correctly
-	try: # open file & initialize file parser
-		file = c3_file_obj.cluster_def( filename )
-	except IOError:
-		print "error opening file: ", filename
-		sys.exit(c3_config.C3_ERRLOCAL)
-
-
-	######################################################
-	# there are two ways needed to biuld the cluster objects.
-	# one is a subset of available clusters and the other
-	# is to execute on all the clusters with the --all switch
-	# when building the clusters object It is not known which
-	# clusters are valid names so they must be populated while 
-	# reading from the file
-	#######################################################
-	try:
-		file.get_next_cluster() # set the default cluster (first cluster in list)
-		
-		try:
-			if clusters.clusters[0] == "/default":
-				clusters.clusters[0] = file.get_cluster_name()
-				clusters.node[file.get_cluster_name()] = clusters.node["/default"]
-				del clusters.node["/default"]
-				clusters.username[file.get_cluster_name()] = clusters.username["/default"]
-		except IndexError: #will be thrown if --all switch is used
-			pass 
-
-		while(1): #throws exception when no more clusters
-			c_name = file.get_cluster_name() #name of cluster being parsed
-			if all == 1:
-				clusters.clusters.append( c_name )
-				clusters.node[c_name] = []
-				clusters.node[c_name].append( "" ) 
-			if c_name in clusters.clusters:
-				cluster_from_file[c_name] = {}
-				cluster_from_file[c_name]['external'] = file.get_external_head_node()
-				cluster_from_file[c_name]['internal'] = file.get_internal_head_node()
-				cluster_from_file[c_name]['nodes'] = [] #list of node names from file
-				if cluster_from_file[c_name]['external']: #if a direct cluster
-					index = 0
-					try:
-						while(1): # build list of nodes
-							node_obj = file.get_next_node()
-							cluster_from_file[c_name]['nodes'].append( c3_file_obj.node_obj() )
-							cluster_from_file[c_name]['nodes'][index] = node_obj
-							index = index + 1
-					except c3_file_obj.end_of_cluster:
-						pass
-			file.get_next_cluster() #repeat untill no more clusters
-	except c3_file_obj.no_more_clusters:
-		pass
-	except c3_file_obj.parse_error, error:
-		print error.description
-		print "somewhere around ", error.last
-		sys.exit(c3_config.C3_ERRLOCAL)
-
-
-	#######################################################
-
-
-	######### execute command on each node in cluster
-
-
-
-	# there are two main groups, local and remote clusters
-	# in each of those groups there are direct and indirect
-	# modes, that is every node specified or a "link". A link
-	# on a local cluster is of course invalid.
-
-	# right now the only way I know how to check if a cluster
-	# is local is to use a "gethostbyname" and compare it
-	# to the head node names (both internel and externel).
-	# right now that is acceptable as many tools require 
-	# the function to work correctly (ssh being one of them)
-	# my want to think about a better way.
-
-	while interactive: # if interactive execution, prompt once before executing
-		answer = raw_input( "execute the following command(y or n): " + command + " :" )
-		if re.compile( r".*n(o)?.*", re.IGNORECASE ).match( answer ):
-			sys.exit(c3_config.C3_OKEXIT)
-		if re.compile( r".*y(es)?.*", re.IGNORECASE).match( answer ):
-			interactive = 0
-			
-
-	pipe_list_outer = []
-	pid_list_outer = []
-	
-	for cluster in clusters.clusters:
-		pipe_list_outer.append( os.pipe() )
-		pid = os.fork()
-		if pid == 0:
-
-			if not pipe_output:
-				line =  "************************* " + cluster + " *************************\n"
-				os.write( pipe_list_outer[-1][1], line )
-
-			############ get machine names #############################
-			try: 
-				local_ip = socket.gethostbyname( socket.gethostname() )
-			except socket.error:
-				print "Can not resolve local hostname"
-				os._exit(c3_config.C3_ERRLOCAL)
-			try:
-				int_ip = socket.gethostbyname( cluster_from_file[cluster]['internal'] )
-			except socket.error:
-				int_ip = ""
-			except KeyError:
-				print "Cluster ", cluster, " is not in the configuration file."
-				os.write( pipe_list_outer[-1][1], '\0' )
-				os._exit(c3_config.C3_ERRLOCAL)
-			try:
-				ext_ip = socket.gethostbyname( cluster_from_file[cluster]['external'] )
-				ext_ip_name = cluster_from_file[cluster]['external']
-			except socket.error:
-				ext_ip = ""
-			except TypeError:
-				ext_ip = int_ip
-				ext_ip_name = cluster_from_file[cluster]['internal']
-			############################################################
-			
-			pipe_list = []
-			
-			try:
-				if clusters.username[cluster] == "/default":
-					username = defusername
-				else:
-					username = clusters.username[cluster]
-			except KeyError: #if --all is specified
-				username = defusername
-	
-			if head_node:   #if only execute on head node , do so
-					#will execute on local cluster with ssh also
-				if not dryrun:
-					if not pipe_output:
-						line =  "--------- " + cluster + "---------\n" 
-						os.write( pipe_list_outer[-1][1], line )
-				string_to_execute = transport + " " + "-l " + username + " " + ext_ip + " \'" + command + "\'"
-				if dryrun:
-					print string_to_execute
-				else:
-					##fd = os.popen(string_to_execute)
-					#proc =  popen2.Popen4(string_to_execute)
-					#string_in = proc.fromchild.read()
-					#temp = proc.wait()
-					p = Popen(string_to_execute, shell=True, 
-							  stdout=PIPE, stderr=STDOUT, close_fds=True)
-					string_in = p.communicate()[0]
-					temp = p.wait()
-					if( temp != 0 ):
-						returncode = c3_config.C3_ERRREMOTE
-					if pipe_output:
-						regex = re.compile(r"^.", re.MULTILINE)
-						string_in = regex.sub(cluster + " " + ext_ip_name + ": " + "\g<0>", string_in)
-					os.write(pipe_list_outer[-1][1], string_in + "\0" )
-					
-			elif cluster_from_file[cluster]['external']: # if a direct cluster
-				if ext_ip == local_ip or int_ip == local_ip: # if a local cluster
-
-					if ext_ip == "": # error conditions (just don't execute current cluster)
-						print "Can not resolve ", cluster_from_file[cluster]['external']
-					elif int_ip == "":
-						print "Can not resolve ", cluster_from_file[cluster]['internal']
-
-					elif clusters.node[cluster][0] != "" : #range specified on command line
-						for node in clusters.node[cluster]: #for each cluster specified on the command line
-							try:
-								if not cluster_from_file[cluster]['nodes'][node].dead: #if machine is not dead
-									pipe_list.append( os.pipe() )
-									pid = os.fork() # execute command on each node in it's own process
-									if pid == 0:
-										node_name = cluster_from_file[cluster]['nodes'][node].name
-										if not pipe_output:
-											os.write( pipe_list[-1][1], "--------- " + node_name + "---------\n" )
-										string_to_execute = transport + " " + "-l " + username + " " + node_name + " \'" +  command + " \'"
-										if dryrun:
-											print string_to_execute
-										else:
-											##fd = os.popen(string_to_execute)
-											#proc = popen2.Popen4(string_to_execute)
-											#string_in = proc.fromchild.read()
-											#temp = proc.wait()
-											p = Popen(string_to_execute, shell=True, 
-							  						  stdout=PIPE, stderr=STDOUT, close_fds=True)
-											string_in = p.communicate()[0]
-											temp = p.wait()
-											if( temp != 0 ):
-												returncode = c3_config.C3_ERRREMOTE
-											if pipe_output:	
-												regex = re.compile(r"^.", re.MULTILINE)
-												string_in = regex.sub(cluster + " " + node_name + ": " + "\g<0>", string_in)
-												if len (string_in) == 0:
-													string_in = cluster + " " + node_name+ ":\n"
-											os.write( pipe_list[-1][1], string_in )
-											os.write( pipe_list[-1][1], '\0' )
-										os._exit(returncode)
-									pidlist.append(pid)
-							except IndexError:
-								pass
-						if dryrun:
-							os._exit(c3_config.C3_OKEXIT)
-					else:  # no range specified on command line, do all nodes
-						for node in cluster_from_file[cluster]['nodes']:  # for each node in cluster
-							if not node.dead: #if node not dead
-								pipe_list.append( os.pipe() )
-								pid = os.fork() # execute command in own process
-								if pid == 0:
-									node_name = node.name
-									if not pipe_output:
-										os.write( pipe_list[-1][1], "--------- " + node_name + "---------\n" )
-									string_to_execute = transport + " " + "-l " + username + " " + node_name + " \'" +  command + " \'"
-									if dryrun:
-										print string_to_execute
-										os._exit(c3_config.C3_OKEXIT)
-									##fd = os.popen(string_to_execute)
-									#proc = popen2.Popen4(string_to_execute)
-									#string_in = proc.fromchild.read()
-									#temp = proc.wait()
-									p = Popen(string_to_execute, shell=True, 
-							  				  stdout=PIPE, stderr=STDOUT, close_fds=True)
-									string_in = p.communicate()[0]
-									temp = p.wait()
-									if( temp != 0 ):
-										returncode = c3_config.C3_ERRREMOTE
-									if pipe_output:
-										regex = re.compile(r"^.", re.MULTILINE)
-										string_in = regex.sub(cluster + " " + node_name + ": " + "\g<0>", string_in)
-										if len (string_in) == 0:
-											string_in = cluster + " " + node_name+ ":\n"
-									os.write( pipe_list[-1][1], string_in )
-									os.write( pipe_list[-1][1], '\0' )
-									os._exit(returncode)
-									
-								pidlist.append(pid)
-					for pipe in pipe_list:
-						line = os.read( pipe[0], 1024)
-						while line[-1] != '\0':
-							line = line + os.read( pipe[0], 1024)
-						line=line[:-1]
-						os.write( pipe_list_outer[-1][1], line )		
-					os.write( pipe_list_outer[-1][1], '\0' )
-				else: # remote cluster
-					if ext_ip == "": # error condition
-						print "Can not resolve ", cluster_from_file[cluster]['external']
-						sys.stdout.flush()
-					else:
-						# generate temprorary config file
-						cluster_def_string = "cluster " + cluster + " {\n"
-						cluster_def_string = cluster_def_string + cluster_from_file[cluster]['external'] + ":" + cluster_from_file[cluster]['internal'] + "\n"
-
-			
-						if clusters.node[cluster][0] != "" : #range specified on command line
-							try:
-								for node in clusters.node[cluster]: #for each node specified on command line
-									if not cluster_from_file[cluster]['nodes'][node].dead: # if cluster node not dead
-										node_name = cluster_from_file[cluster]['nodes'][node].name #add cluster to list
-										cluster_def_string = cluster_def_string + node_name + "\n"
-							except IndexError:
-								pass
-						else:  # no range specified on command line, do all nodes
-							for node in cluster_from_file[cluster]['nodes']: # for each node in cluster
-								if not node.dead: #if node not dead, add to list
-										cluster_def_string = cluster_def_string +  node.name + "\n"
-						cluster_def_string = cluster_def_string + "}" # close list
-										
-						#this is an attempt to generate a unique file name. As there is no easy way
-						#for me to see the remote machine I mangle a group of relativly unique
-						#identifiers. since i prepend the machine ip address if the file does not reside localy
-						#it should not remotely, at the very least it should be safe to rewrite the file
-						filename = "/tmp/" + local_ip + "%d" % os.getuid() + "%d" % os.getpid() 
-						string_to_execute = transport + " " + "-l " + username + " " + ext_ip + " " + c3_config.def_path + "/cget --head --non_interactive " + filename
-						if dryrun:
-							print string_to_execute
-						else:
-							sock = c3_sock.server_sock( string_to_execute )
-							answer = sock.recieve()
-							sock.close()
-							while answer == 'good': #make sure file name is unique on local machine
-								filename = filename + "1"
-								string_to_execute = transport + " " + "-l " + username + " " + ext_ip + " " + c3_config.def_path + "/cget --head --non_interactive " + filename
-								sock.__init__( string_to_execute )
-								answer = sock.recieve()
-								sock.close()
-
-							FILE = open( filename, 'w' )
-							FILE.write( cluster_def_string )
-							FILE.close()
-						# push file to remote machine
-						string_to_execute = "rsync --rsh=" + transport + " " + filename + " " + username + "@" + ext_ip + ":" +  filename
-						if dryrun:
-							print string_to_execute
-						else:	
-							if(os.system( string_to_execute ) != 0):
-								returncode = c3_config.C3_ERRREMOTE
-						# execute commend remotely
-						string_to_execute = transport + " " + "-l " + username + " "  + ext_ip + " \' " + c3_config.def_path + "/cexec -f " + filename + " " + options_to_pass + " \"" + command + " \"\'"
-						if dryrun:
-							print string_to_execute
-						else:
-							##fd = os.popen(string_to_execute)
-							#proc = popen2.Popen4(string_to_execute)
-							#string_in = proc.fromchild.read()
-							#temp = proc.wait()
-							p = Popen(string_to_execute, shell=True, 
-							  		  stdout=PIPE, stderr=STDOUT, close_fds=True)
-							string_in = p.communicate()[0]
-							temp = p.wait()
-							if( temp != 0 ):
-								returncode = c3_config.C3_ERRREMOTE
-							os.write( pipe_list_outer[-1][1], string_in )
-							os.write( pipe_list_outer[-1][1], '\0' )
-							# remove temporary file
-						string_to_execute = transport + " " + "-l " + username + " " + ext_ip + " /bin/rm -f " + filename
-						if dryrun:
-							print string_to_execute
-						else:
-							if(os.system( string_to_execute ) != 0):
-								returncode = c3_config.C3_ERRREMOTE
-							os.unlink( filename ) # remove local temp file
-			else: # indirect clusters
-				if int_ip == local_ip:  # can not have a indirect local cluster since if your default cluster
-							# is local you would generate a circular reference
-					print "error local cluster"
-					sys.stdout.flush()
-					os.write( pipe_list_outer[-1][1], '\0' )
-				else: # remote indirect cluster
-					if int_ip == "": # error condition
-						print "Can not resolve hostname ", cluster_from_file[cluster]['internal']
-						sys.stdout.flush()
-					else:
-						node_list = "" # generate new node list from the command line
-						if clusters.node[cluster][0] != "" : #range specified on command line
-							node_list = ":%d" % clusters.node[cluster].pop(0)
-
-							for node in clusters.node[cluster]:
-								node_list = node_list + ", %d" % node	
-						# execute command on remote machine
-						string_to_execute = transport + " " + "-l " + username + " " + int_ip + " \' " + c3_config.def_path + "/cexec " + options_to_pass + " " + node_list + " \"" + command + " \"\'"
-						if dryrun:
-							print string_to_execute
-							os._exit(c3_config.C3_OKEXIT)
-						else:
-							##fd = os.popen(string_to_execute)
-							#proc = popen2.Popen4(string_to_execute)
-							#string_in = proc.fromchild.read()
-							#temp = proc.wait()
-							p = Popen(string_to_execute, shell=True, 
-							  		  stdout=PIPE, stderr=STDOUT, close_fds=True)
-							string_in = p.communicate()[0]
-							temp = p.wait()
-							if( temp != 0 ):
-								returncode = c3_config.C3_ERRREMOTE
-							os.write( pipe_list_outer[-1][1], string_in )
-							os.write( pipe_list_outer[-1][1], '\0' )
-							
-			for pid in pidlist:
-				pid, code = os.waitpid(pid,0)
-				code = code>>8
-				if( code != 0 ): returncode = code
-			os._exit(returncode)
-		pid_list_outer.append( pid )
-	
-	if not dryrun:
-		output = ""
-		for pipe in pipe_list_outer:
-			line = os.read( pipe[0], 1024 )
-			while line[-1] != '\0':
-				line = line + os.read( pipe[0], 1024 )
-			output = output + line[:-1]
-		try:
-			n = len(output)
-			iw = 0
-			while n != iw:
-				try:
-					slice = output[iw:n]
-					nw = os.write(sys.stdout.fileno(), slice)
-					iw = iw + nw
-				except OSError, err:
-					import errno
-					if err.errno != errno.EAGAIN: raise
-					print >>sys.stderr, "OSERROR: ", err, "... retrying"
-					continue
-		except IndexError:
-			print "No computer returned any output."
-
-	for pid in pid_list_outer: # wait for all processes spawned to finish
-		pid, code = os.waitpid(pid,0)
-		code = code>>8
-		if( code != 0 ): returncode = code
-		
-except KeyboardInterrupt:
-	print "Keyboard interrupt\n"
-
-sys.exit(returncode)
-
-# vim:tabstop=4:shiftwidth=4:noexpandtab:textwidth=76
diff --git a/SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2locus.test b/SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2locus.test
deleted file mode 100755
index 048c584cf9ff710261e422b199e00d10f10c37fb..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2locus.test
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# Test connectivity from Cobalt to the Locus nodes locus001..locus100
-#
-# This test is a big awkward, because we cannot assume that every locus node
-# is online. Therefore, we execute the same command, using cexec, both
-# from the CEP2 head node (lhn001), and from the current node. The outputs
-# should be the same.
-#
-# $Id$
-
-# Source useful functions.
-. $(dirname $0)/../funcs.sh
-
-# Path to our local cexec program.
-CEXEC=$(cd $(dirname $0)/../c3 && pwd)/cexec || exit
-
-# Setup cleanup handler.
-trap 'STATUS=$?; rm -rf -- "$TMPDIR"; exit $STATUS' 0 1 2 3 15
-
-# Create temporary directory for output files
-TMPDIR=$(mktemp -dt "$(basename $0).XXXXXX") || exit
-
-# Filenames for our output files.
-C3_CONF=$TMPDIR/c3.conf
-LHN_LOCUS=$TMPDIR/lhn.locus
-CBM_LOCUS=$TMPDIR/cbm.locus
-
-# Path to remote cexec command
-C3_PATH=$(dirname $(run_command "ssh lhn001 which cexec")) || exit
-
-# Retrieve the c3.conf file from lhn001.
-run_command "scp lhn001:/etc/c3.conf $C3_CONF" || exit
-
-# Retrieve the list of locus nodes reachable from lhn001
-run_command "ssh lhn001 cexec locus: hostname" | \
-  grep '^locus' > $LHN_LOCUS || exit
-
-# Retrieve the list of locus nodes reachable from localhost
-C3_PATH=$C3_PATH run_command "$CEXEC -f $C3_CONF locus: hostname" | \
-  grep '^locus' > $CBM_LOCUS || exit
-
-# Compare the results.
-diff -s $LHN_LOCUS $CBM_LOCUS
diff --git a/SubSystems/Online_Cobalt/validation/cluster/infiniband/build_osu.sh b/SubSystems/Online_Cobalt/validation/cluster/infiniband/build_osu.sh
deleted file mode 100755
index 6b7b09617d65647a16f2ed8395d254029baa01ed..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/infiniband/build_osu.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-#
-# Build the OSU Micro Benchmark, which can be downloaded from
-# http://mvapich.cse.ohio-state.edu/benchmarks/
-#
-# $Id$
-
-# Use our own custom MPI compiler
-export CC=/opt/openmpi/bin/mpicc
-
-# Specify the name and version of the OSU Micro Benchmark
-OSU_NAME=osu-micro-benchmarks
-OSU_VERSION=4.3
-OSU_PKG=$OSU_NAME-$OSU_VERSION
-
-error()
-{
-  STATUS=$?
-  echo >&2 "ERROR: $@"
-  exit $STATUS
-}
-
-perform()
-{
-  eval "$@" > /dev/null || error "$@"
-}
-
-# Untar the tar ball
-perform "[ -d $OSU_PKG ] || tar xf $OSU_PKG.tar.gz"
-
-# Configure and build. Note that we only need to build osu_bw
-perform "cd $OSU_PKG"
-perform "[ -f Makefile ] || ./configure"
-perform "cd mpi/pt2pt"
-perform "make"
-echo "$PWD/osu_bw"
-
diff --git a/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu-micro-benchmarks-4.3.tar.gz b/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu-micro-benchmarks-4.3.tar.gz
deleted file mode 100644
index b74257e13d1f7d9951505d39f593318ca45d625c..0000000000000000000000000000000000000000
Binary files a/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu-micro-benchmarks-4.3.tar.gz and /dev/null differ
diff --git a/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw.ref b/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw.ref
deleted file mode 100644
index 3c696d49439544a46cfd5093d818f01f7add8519..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw.ref
+++ /dev/null
@@ -1,25 +0,0 @@
-# OSU MPI Bandwidth Test v4.3
-# Size      Bandwidth (MB/s)
-1	.89
-2	1.78
-4	3.62
-8	7.24
-16	14.39
-32	28.17
-64	55.97
-128	105.06
-256	203.77
-512	393.51
-1024	741.52
-2048	1326.31
-4096	2208.31
-8192	3441.40
-16384	1159.38
-32768	2426.35
-65536	4435.35
-131072	6150.66
-262144	9629.91
-524288	10903.17
-1048576	11529.89
-2097152	11757.03
-4194304	11879.37
diff --git a/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw.test b/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw.test
deleted file mode 100755
index 8e34035ac134693de25892d35c04f98a5f45d287..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw.test
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/bin/bash
-#
-# Test script that measures the point-to-point throughput between two nodes
-# using MPI and compares it to reference data. The test is considered
-# successfull if, for every message size, either:
-# - the difference between reference and measured throughput is less than
-#   10 MB/s, or
-# - the ratio between measured output and reference is larger than 90%.
-#
-# NOTE: The osu_bw program is part of the OSU Micro Benchmark, which
-# can be downloaded from http://mvapich.cse.ohio-state.edu/benchmarks/
-#
-# $Id$
-
-# Change directory to the location of our script
-cd $(dirname $0)
-
-# Source useful functions.
-. ../funcs.sh
-
-# Setup signal handler
-trap exit 1 2 3 15
-
-# Directory containing local OpenMPI installation
-OPENMPI_DIR=/opt/openmpi
-MPIRUN=$OPENMPI_DIR/bin/mpirun
-
-# List of hosts to test
-HOSTS=$(for i in $(seq 1 9); do printf "cbt%03d " "$i"; done)
-
-# Set absolute and relative thresholds for throughput comparison.
-ABS_THRESHOLD=800
-REL_THRESHOLD=0.9
-
-# File containing reference performance figures
-REF_FILE=osu_bw.ref
-
-# Build the osu_bw program if needed
-echo -n "Building OSU MPI Bandwidth Test ...   "
-OSU_BW=$(./build_osu.sh) || exit
-echo "OK"
-
-host=$(hostname)
-
-for target in $HOSTS
-do
-  [ "$host" == "$target" ] && continue;
-  echo "$host --> $target"
-  OUT_FILE=osu_bw.$host.$target.out
-  COMMAND="$MPIRUN --prefix $OPENMPI_DIR -H $host,$target bash -l -c $OSU_BW"
-  run_command "$COMMAND" > "$OUT_FILE" 2> /dev/null || error "$COMMAND  FAILED"
-
-  # Compare with reference output
-  # - first make sure we used the same version of the OSU benchmark test
-  # - next compare numbers, taking threshold into account.
-  diff <(grep '^#' $REF_FILE) <(grep '^#' $OUT_FILE) > /dev/null || \
-    { echo "- OSU MPI Bandwidth Test: version mismatch"; status=1; continue; }
-  paste \
-    <(grep '^[0-9]' $REF_FILE) <(grep '^[0-9]' $OUT_FILE) | \
-     awk -v ABS_THRESHOLD=$ABS_THRESHOLD \
-         -v REL_THRESHOLD=$REL_THRESHOLD '{
-      if ($1 != $3) {
-        print "- Alignment error comparing test output: " \
-              "expected size "$1", got "$3;
-        error = 1; 
-      }
-      if (($4 < $2 - ABS_THRESHOLD) && ($4 < $2 * REL_THRESHOLD)) {
-        print "- Bandwidth too low for block size "$1": " \
-              "expected "$2" MB/s, got "$4" MB/s";
-        error = 1;
-      }
-    } END { exit error; }' || status=1
-done
-
-exit $status
diff --git a/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw_ref.sh b/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw_ref.sh
deleted file mode 100755
index 4b45a2b420851452501f62471741499bb728a417..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/cluster/infiniband/osu_bw_ref.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-#
-# Determine reference output for osu_bw test, by running osu_bw on each of
-# the Cobalt nodes and calculating the averge throughput figures.
-#
-# $Id$
-
-HOSTS=$(for i in $(seq 1 8); do printf "cbt%03d " $i; done)
-
-rm -f *.bw
-for host in $HOSTS
-do
-  ssh $host $PWD/osu_bw.test
-  for target in $HOSTS
-  do
-    [ "$host" == "$target" ] && continue;
-    f="osu_bw.$target.out"
-    awk '{print $2}' $f > $host.$f.bw
-  done
-done
-
-n=$(echo *.bw | wc -w)
-
-paste *.bw | grep '^[0-9]' | \
-  sed -e 's,\t,+,g' -e 's,^,scale=2; (,' -e 's,$,)/'$n',' | \
-  bc -l > avg
-
-{ head -2 $f;
-  paste <(awk '{print $1}' $f | grep '^[0-9]') <(cat avg);
-} > osu_bw.ref
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/casacore/meastable.test b/SubSystems/Online_Cobalt/validation/cobalt/casacore/meastable.test
index 2bb37be0f5af67e86ca6fe4a5f71b2cf2cc9752b..f2541e46c7339597266b4dd98bafe121f59fbf5b 100755
--- a/SubSystems/Online_Cobalt/validation/cobalt/casacore/meastable.test
+++ b/SubSystems/Online_Cobalt/validation/cobalt/casacore/meastable.test
@@ -1,3 +1,8 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
 
 /opt/casacore/bin/findmeastable
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/mpi/custom-openmpi-config.test b/SubSystems/Online_Cobalt/validation/cobalt/mpi/custom-openmpi-config.test
new file mode 100755
index 0000000000000000000000000000000000000000..03b0b71083b576a6c6064c7f92e63c5aa83bf5d0
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/mpi/custom-openmpi-config.test
@@ -0,0 +1,9 @@
+#!/bin/bash -ve
+
+TEST_ROOT_DIR=$(readlink -f -n $(dirname $0)/../..)
+source $TEST_ROOT_DIR/validation_utils.sh
+check_running_on_cobalt2_head
+
+# reuse system/mpi/custom-openmpi-config.test
+# run it via clush on all nodes
+clush -S -g compute $TEST_ROOT_DIR/system/mpi/custom-openmpi-config.test |& sort
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-hello-world-between-nodes.test b/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-hello-world-between-nodes.test
new file mode 100755
index 0000000000000000000000000000000000000000..bd1ed1d43870786a57b2cfac3c25082e449895a4
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-hello-world-between-nodes.test
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+# this is a similar test as system/mpi/local-hello-world.test
+# but now we check the inter-cobalt-node basic mpi init/finalize functionality
+
+source $(dirname $0)/../../validation_utils.sh
+check_non_root_privileges
+
+# compile the simple mpi-hello-world
+mpicc $(readlink -f -n $(dirname $0))/mpi-hello-world.c -o /tmp/mpi-hello-world || exit 1
+
+# and copy it to all nodes
+for i in {201..213} ; do
+    NODE1=cbm$i.control.lofar
+    scp -q /tmp/mpi-hello-world $NODE1:/tmp/mpi-hello-world
+done
+
+
+EXIT_CODE=0
+
+# actual test over all node pairs
+for i in {201..213} ; do
+    NODE1=cbm$i.control.lofar
+    for j in {201..213} ; do
+        NODE2=cbm$j.control.lofar
+        RESULT=$(mpirun --tag-output -H $NODE1,$NODE2 /tmp/mpi-hello-world | sort | fgrep 'Hello world' | wc -l | grep '^2$')
+        if [ $? -eq 0 ] ; then
+            echo "mpirun hello-world works between $NODE1 and $NODE2"
+        else
+            echo "ERROR: mpirun hello-world failed between $NODE1 and $NODE2"
+            echo "$RESULT"
+            EXIT_CODE=1
+        fi
+    done
+done
+
+exit $EXIT_CODE
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-hello-world.c b/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-hello-world.c
new file mode 120000
index 0000000000000000000000000000000000000000..ad2d387cff229cf87fcdb40a07cb6dfd35a90da5
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-hello-world.c
@@ -0,0 +1 @@
+../../system/mpi/mpi-hello-world.c
\ No newline at end of file
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-infiniband-between-nodes.test b/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-infiniband-between-nodes.test
new file mode 100755
index 0000000000000000000000000000000000000000..1756fc4a4549f70b39d4c5e57ce0c0009084cc29
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-infiniband-between-nodes.test
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
+
+#find latest osu-micro-benchmarks dir
+MPITESTSDIR=$(readlink -f -n "$(dirname $(which mpirun))/../tests")
+OSUMBDIR=$(find $MPITESTSDIR -type d -name 'osu-micro-benchmarks*' | sort | tail -n 1)
+echo "Latest mpi osu-micro-benchmarks dir: $OSUMBDIR"
+
+REQUIRED_BW=90 #in Gbps
+
+EXIT_CODE=0
+
+# check mpi bandwith over infiniband between each pair of cobalt nodes (both ways, and even on the same source/dest)
+for i in {201..213} ; do
+    for j in {201..213} ; do
+        # measure throughput for 4MB blocks, results are in MBps
+        RESULT=$(mpirun -x UCX_SHM_DEVICES="" -H cbm$i,cbm$j $OSUMBDIR/osu_bw)
+        if [ $? -ne 0 ] ; then
+            echo "Could not run infiniband bandwith test between cbm$i and cbm$j: $RESULT"
+            EXIT_CODE=1 ;
+        else
+            THROUGHPUT=`echo "$RESULT" | grep "^4194304s*" | awk '{ print $2 }'`
+
+            #convert to Gbps
+            THROUGHPUT=`echo "$THROUGHPUT*8/1000" | bc`
+
+            echo "infiniband bandwith for 4MB block between cbm$i and cbm$j is $THROUGHPUT Gbps"
+
+            # check if throughput > 90Gbps
+            if [ $THROUGHPUT -lt "$REQUIRED_BW" ] ; then EXIT_CODE=1 ; fi
+        fi
+    done
+done
+
+if [ $EXIT_CODE -ne 0 ] ; then
+    echo "ERROR: not all pairs of cobalt nodes reach required $REQUIRED_BW Gbps over infiniband"
+fi
+
+exit $EXIT_CODE
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-to-all-nodes.test b/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-to-all-nodes.test
new file mode 100755
index 0000000000000000000000000000000000000000..5ec7c7989bbb0ead5f0447cea917dd5a7ad6c011
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/mpi/mpi-to-all-nodes.test
@@ -0,0 +1,8 @@
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
+
+mpirun -H cbm201,cbm202,cbm203,cbm204,cbm205,cbm206,cbm207,cbm208,cbm209,cbm210,cbm211,cbm212,cbm213 hostname -f | sort -u | wc -l | grep '^13$'
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/network/ib_mode.test b/SubSystems/Online_Cobalt/validation/cobalt/network/ib_mode.test
new file mode 100755
index 0000000000000000000000000000000000000000..483e60c4ce40553b3725a2ff413504bc67b4a793
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/network/ib_mode.test
@@ -0,0 +1,19 @@
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
+
+EXIT_CODE=0
+
+for i in {201..213} ; do
+    NODE=cbm$i.control.lofar
+    RESULT=$(ssh $NODE "grep connected /sys/class/net/ib{0,1}/mode  | wc -l | grep '^2$'")
+    if [ $? -eq 0 ] ; then
+        echo "ib mode on $NODE is 'connected'"
+    else
+        echo "ERROR: ib mode on $NODE is incorrect: $RESULT"
+        EXIT_CODE=1
+    fi
+done
+
+exit $EXIT_CODE
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/network/interface_arp_ignore_setting.test b/SubSystems/Online_Cobalt/validation/cobalt/network/interface_arp_ignore_setting.test
new file mode 100755
index 0000000000000000000000000000000000000000..8de658e5db10c9b666d57dbd2233c127b3292f0d
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/network/interface_arp_ignore_setting.test
@@ -0,0 +1,21 @@
+#!/bin/bash -v
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
+
+EXIT_CODE=0
+
+for i in {201..213} ; do
+    NODE=cbm$i.control.lofar
+    # the following interfaces need to be connected
+    # 10GB03 and 10GB07 are spares and do not need to connected at this moment
+    RESULT=$(ssh $NODE "/usr/sbin/sysctl -a -r 'net.ipv4.conf.10GB0[1|2|4|5|6].arp_ignore' |& grep -e '^.*=[[:space:]]*1' | wc -l | grep '^5$' ")
+    if [ $? -eq 0 ] ; then
+        echo "$NODE : all 10G interfaces have correct arp_ignore setting of 1"
+    else
+        echo "ERROR: $NODE : not all 10G interfaces have correct arp_ignore setting of 1"
+        EXIT_CODE=1
+    fi
+done
+
+exit $EXIT_CODE
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/network/interface_links.test b/SubSystems/Online_Cobalt/validation/cobalt/network/interface_links.test
new file mode 100755
index 0000000000000000000000000000000000000000..7befccedf24bfcab8d71a9958b6db98f28acfbd5
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/network/interface_links.test
@@ -0,0 +1,23 @@
+#!/bin/bash -v
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
+
+EXIT_CODE=0
+
+for i in {201..213} ; do
+    NODE=cbm$i.control.lofar
+    # the following interfaces need to be connected
+    # 10GB03 and 10GB07 are spares and do not need to connected at this moment
+    for INTERFACE in ib0 ib1 10GB01 10GB02 10GB04 10GB05 10GB06 em1 ; do
+        RESULT=$(ssh $NODE /usr/sbin/ethtool $INTERFACE |& grep "Link detected: yes")
+        if [ $? -eq 0 ] ; then
+            echo "$NODE : interface $INTERFACE has a detected link"
+        else
+            echo "ERROR: $NODE : interface $INTERFACE has no detected link"
+            EXIT_CODE=1
+        fi
+    done
+done
+
+exit $EXIT_CODE
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/network/interface_mtu_settings.test b/SubSystems/Online_Cobalt/validation/cobalt/network/interface_mtu_settings.test
new file mode 100755
index 0000000000000000000000000000000000000000..792f895ef85738b521f6aacb06e9ea2031f16723
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/network/interface_mtu_settings.test
@@ -0,0 +1,23 @@
+#!/bin/bash -v
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
+
+EXIT_CODE=0
+
+for i in {201..213} ; do
+    NODE=cbm$i.control.lofar
+    # the following interfaces need to be connected
+    # 10GB03 and 10GB07 are spares and do not need to connected at this moment
+    for INTERFACE in 10GB01 10GB02 10GB04 10GB05 10GB06 ; do
+        RESULT=$(ssh $NODE netstat -i | grep $INTERFACE | awk '{ print $2 }')
+        if [ $? -eq 0 ] && [ "$RESULT" -eq "9000" ] ; then
+            echo "$NODE : interface $INTERFACE has correct MTU of $RESULT"
+        else
+            echo "ERROR: $NODE : interface $INTERFACE has no incorrect MTU : $RESULT"
+            EXIT_CODE=1
+        fi
+    done
+done
+
+exit $EXIT_CODE
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/network/resolvconf.test b/SubSystems/Online_Cobalt/validation/cobalt/network/resolvconf.test
new file mode 100755
index 0000000000000000000000000000000000000000..3b0a75da3b2f73a1c7053f6e6bb25ec7fcbcf580
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/network/resolvconf.test
@@ -0,0 +1,12 @@
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
+
+# Check for the presence of the various LOFAR domains
+for DOMAIN in infiniband.lofar online.lofar control.lofar
+do
+  grep "^search.*\b$DOMAIN\b" /etc/resolv.conf || exit 1
+done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cobalt/system/tuned.test b/SubSystems/Online_Cobalt/validation/cobalt/system/tuned.test
new file mode 100755
index 0000000000000000000000000000000000000000..ac26530105bb005bf5fec81b7643017f39bf93cd
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/cobalt/system/tuned.test
@@ -0,0 +1,9 @@
+#!/bin/bash -ve
+
+# Our own hostname must be resolvable
+
+for i in {201..213} ; do
+  ssh cbm$i systemctl status tuned.service | grep "Active: inactive" || exit 1
+done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2cep.test b/SubSystems/Online_Cobalt/validation/intercluster/connectivity/cobalt2cep.test
similarity index 85%
rename from SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2cep.test
rename to SubSystems/Online_Cobalt/validation/intercluster/connectivity/cobalt2cep.test
index 15c8931188f02764a08d6d08cd5098f3ae79d9a7..7c749190ff07303a3b577e51f521af1b9e450dea 100755
--- a/SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2cep.test
+++ b/SubSystems/Online_Cobalt/validation/intercluster/connectivity/cobalt2cep.test
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash -ve
 #
 # Test connectivity from Cobalt to CEP.
 #
@@ -13,7 +13,7 @@
 trap 'print_status; exit' 1 2 3 15
 
 # List of crucial CEP systems that must be online
-TARGETS="lcs015 ccu001 kis001 lhn001 sasdb"
+TARGETS="ccu001 lcuhead smu001 head.cep4.control.lofar sasdb"
 
 host=$(hostname)
 status=0
diff --git a/SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2cobalt.test b/SubSystems/Online_Cobalt/validation/intercluster/connectivity/cobalt2cobalt.test
similarity index 78%
rename from SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2cobalt.test
rename to SubSystems/Online_Cobalt/validation/intercluster/connectivity/cobalt2cobalt.test
index 4d62fe2cf08c0fe6bcc9077e621b40511fd0c733..edc75f69bbaa38cd2713ccc9f35dd8cb358681d8 100755
--- a/SubSystems/Online_Cobalt/validation/cluster/connectivity/cobalt2cobalt.test
+++ b/SubSystems/Online_Cobalt/validation/intercluster/connectivity/cobalt2cobalt.test
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash -ve
 #
 # Test connectivity from Cobalt to Cobalt.
 #
@@ -11,9 +11,9 @@ trap 'print_status; exit' 1 2 3 15
 
 host=$(hostname)
 status=0
-for i in $(seq 1 9)
+for i in $(seq 1 13)
 do
-  target=$(printf cbm%03d $i)
+  target=$(printf cbm2%02d $i)
   run_command "ssh $target /bin/true" 1 || status=1
 done
 exit $status
diff --git a/SubSystems/Online_Cobalt/validation/cluster/ethernet/iperf-cobalt2locus.bw-req b/SubSystems/Online_Cobalt/validation/intercluster/ethernet/iperf-cobalt2locus.bw-req
similarity index 100%
rename from SubSystems/Online_Cobalt/validation/cluster/ethernet/iperf-cobalt2locus.bw-req
rename to SubSystems/Online_Cobalt/validation/intercluster/ethernet/iperf-cobalt2locus.bw-req
diff --git a/SubSystems/Online_Cobalt/validation/cluster/ethernet/iperf-cobalt2locus.test b/SubSystems/Online_Cobalt/validation/intercluster/ethernet/iperf-cobalt2locus.test
similarity index 99%
rename from SubSystems/Online_Cobalt/validation/cluster/ethernet/iperf-cobalt2locus.test
rename to SubSystems/Online_Cobalt/validation/intercluster/ethernet/iperf-cobalt2locus.test
index 1796d7a22ffc9657173e0c71bdc5ba4d9a7fa553..a68fd3d13e9116e879c75bad043c22710e7b6b5c 100755
--- a/SubSystems/Online_Cobalt/validation/cluster/ethernet/iperf-cobalt2locus.test
+++ b/SubSystems/Online_Cobalt/validation/intercluster/ethernet/iperf-cobalt2locus.test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -ve
 #
 # This test aims to determine the bandwith available from the cobalt cluster to
 # the locus cluster using iperf. Traffic will be distributed in a way that is
@@ -220,3 +220,5 @@ wait_for_results
 # Check and report results
 aggregate_logs
 check_results
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cluster/funcs.sh b/SubSystems/Online_Cobalt/validation/intercluster/funcs.sh
similarity index 100%
rename from SubSystems/Online_Cobalt/validation/cluster/funcs.sh
rename to SubSystems/Online_Cobalt/validation/intercluster/funcs.sh
diff --git a/SubSystems/Online_Cobalt/validation/intercluster/infiniband/cobalt2-to-cep4.test b/SubSystems/Online_Cobalt/validation/intercluster/infiniband/cobalt2-to-cep4.test
new file mode 100755
index 0000000000000000000000000000000000000000..a39c0a05fe4d78c3f3a47d92f679cc5c7641a922
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/intercluster/infiniband/cobalt2-to-cep4.test
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+source $(dirname $0)/../../validation_utils.sh
+check_running_on_cobalt2
+
+#find latest osu-micro-benchmarks dir
+MPITESTSDIR=$(readlink -f -n "$(dirname $(which mpirun))/../tests")
+OSUMBDIR=$(find $MPITESTSDIR -type d -name 'osu-micro-benchmarks*' | sort | tail -n 1)
+echo "Latest mpi osu-micro-benchmarks dir: $OSUMBDIR"
+
+REQUIRED_BW=90 #in Gbps
+
+EXIT_CODE=0
+
+# check mpi bandwith over infiniband between each pair of cobalt nodes (both ways, and even on the same source/dest)
+for i in {201..213} ; do
+    for j in {1..2} ; do
+        COBALT_SOURCE_IF_NAME=$(printf "cbt%03d-IPoIB%02d.cobalt.lofar" "$i" "$j")
+        COBALT_SOURCE_IF_IP=$(host $COBALT_SOURCE_IF_NAME | awk '{ print $4}')
+        for k in {1..50} ; do
+            CEP4_DEST_IF_NAME=$(printf "cpu%02d.cep4.infiniband.lofar" $k)
+            CEP4_DEST_IF_IP=$(host $CEP4_DEST_IF_NAME | awk '{ print $4}')
+
+            echo "mpirun -x UCX_SHM_DEVICES="" -H $COBALT_SOURCE_IF_IP,$CEP4_DEST_IF_IP $OSUMBDIR/osu_bw"
+
+            # measure throughput for 4MB blocks, results are in MBps
+            RESULT=$(mpirun -x UCX_SHM_DEVICES="" -H $COBALT_SOURCE_IF_IP,$CEP4_DEST_IF_IP $OSUMBDIR/osu_bw)
+            if [ $? -ne 0 ] ; then
+                echo "Could not run infiniband bandwith test between $COBALT_SOURCE_IF_NAME ($COBALT_SOURCE_IF_IP) and $CEP4_DEST_IF_NAME ($CEP4_DEST_IF_IP): $RESULT"
+                EXIT_CODE=1 ;
+            else
+                THROUGHPUT=`echo "$RESULT" | grep "^4194304s*" | awk '{ print $2 }'`
+
+                #convert to Gbps
+                THROUGHPUT=`echo "$THROUGHPUT*8/1000" | bc`
+
+                echo "infiniband bandwith for 4MB block between $COBALT_SOURCE_IF_NAME ($COBALT_SOURCE_IF_IP) and $CEP4_DEST_IF_NAME ($CEP4_DEST_IF_IP) is $THROUGHPUT Gbps"
+
+                # check if throughput > 90Gbps
+                if [ $THROUGHPUT -lt "$REQUIRED_BW" ] ; then EXIT_CODE=1 ; fi
+            fi
+        done
+    done
+done
+
+if [ $EXIT_CODE -ne 0 ] ; then
+    echo "ERROR: not all pairs of cobalt nodes reach required $REQUIRED_BW Gbps over infiniband"
+fi
+
+exit $EXIT_CODE
diff --git a/SubSystems/Online_Cobalt/validation/system/gpu/basic-gpu.test b/SubSystems/Online_Cobalt/validation/system/gpu/basic-gpu.test
index 8d0c3c4ac572e59b367e63d06ad39294a79a851f..2832d204c4cb7efd8518562b712e87718a05ea8d 100755
--- a/SubSystems/Online_Cobalt/validation/system/gpu/basic-gpu.test
+++ b/SubSystems/Online_Cobalt/validation/system/gpu/basic-gpu.test
@@ -1,5 +1,10 @@
-#!/bin/bash -e
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_has_nvidia_gpu
 
 gcc --std=c99 -I/usr/local/cuda/include -L/usr/local/cuda/lib64 -L/usr/lib/nvidia-current gpu-context.c -o gpu-context -lcuda
 ./gpu-context || exit 1
 
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/gpu/persistence-mode.test b/SubSystems/Online_Cobalt/validation/system/gpu/persistence-mode.test
index 37f4beb4a17ce6e1ad3a39ec2b9cdee16b77a41f..edc8ced7a99a541eaef81120fe65bc1108402543 100755
--- a/SubSystems/Online_Cobalt/validation/system/gpu/persistence-mode.test
+++ b/SubSystems/Online_Cobalt/validation/system/gpu/persistence-mode.test
@@ -1,4 +1,7 @@
-#!/bin/bash
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_has_nvidia_gpu
 
 # All GPUs need to be in persistent mode
 nvidia-smi -q | grep 'Persistence Mode *: Disabled' && exit 1
diff --git a/SubSystems/Online_Cobalt/validation/system/hardware/sata-ahci.test b/SubSystems/Online_Cobalt/validation/system/hardware/sata-ahci.test
index 75c03191145806f7f25d018a76c9c8bdb5f08020..5caf16417955dce61c6ec9ae6798b1c171f3d183 100755
--- a/SubSystems/Online_Cobalt/validation/system/hardware/sata-ahci.test
+++ b/SubSystems/Online_Cobalt/validation/system/hardware/sata-ahci.test
@@ -1,4 +1,6 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 # Check whether the SATA controller is in AHCI mode
 lspci -vvv | awk '/SATA/,/^$/ { print; }' | grep 'Kernel driver in use: ahci' || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/cluster/infiniband/ibdiagnet.test b/SubSystems/Online_Cobalt/validation/system/infiniband/ibdiagnet.test
similarity index 92%
rename from SubSystems/Online_Cobalt/validation/cluster/infiniband/ibdiagnet.test
rename to SubSystems/Online_Cobalt/validation/system/infiniband/ibdiagnet.test
index 962f2a2e45aa849aac4aded95660006a415e613b..d9c5cfbf39142d90a341638efb97142bcbc93d20 100755
--- a/SubSystems/Online_Cobalt/validation/cluster/infiniband/ibdiagnet.test
+++ b/SubSystems/Online_Cobalt/validation/system/infiniband/ibdiagnet.test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 ibdiagnet || exit 1
 
@@ -9,4 +9,3 @@ fgrep -- '-E-' /var/tmp/ibdiagnet2/ibdiagnet2.log && exit 1
 fgrep -- '-W-' /var/tmp/ibdiagnet2/ibdiagnet2.log && exit 1
 
 exit 0
-
diff --git a/SubSystems/Online_Cobalt/validation/system/mpi/basic-mpi.test b/SubSystems/Online_Cobalt/validation/system/mpi/basic-mpi.test
deleted file mode 100755
index 82f6ffca65bb135815ece66810a91227806f0484..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/system/mpi/basic-mpi.test
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-/opt/openmpi/bin/mpicc mpi-hello-world.c -o mpi-hello-world
-/opt/openmpi/bin/mpirun --tag-output -H localhost,localhost ./mpi-hello-world | sort | fgrep 'Hello world' | wc -l | grep '^2$'
diff --git a/SubSystems/Online_Cobalt/validation/system/mpi/custom-openmpi-config.test b/SubSystems/Online_Cobalt/validation/system/mpi/custom-openmpi-config.test
index a5221c19511422ae97ca07ab25c5f871c2249038..c438a0e7e4730a2f5316d4d6d0d282a1edeaac6a 100755
--- a/SubSystems/Online_Cobalt/validation/system/mpi/custom-openmpi-config.test
+++ b/SubSystems/Online_Cobalt/validation/system/mpi/custom-openmpi-config.test
@@ -1,4 +1,16 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 # Check whether we use our custom OpenMPI configuration file
-fgrep 'OpenMPI parameters for cbt00X' /opt/openmpi/etc/openmpi-mca-params.conf || exit 1
+MPI_ETC_DIR=$(readlink -n -f $(dirname $(which mpirun))/../etc)
+echo "looking for openmpi-mca-params.conf in $MPI_ETC_DIR"
+
+grep 'Ansible managed:' $MPI_ETC_DIR/openmpi-mca-params.conf || exit 1
+
+ompi_info --all --parseable | grep "mca:btl:base:param:btl:value:tcp" || exit 1
+ompi_info --all --parseable | grep "mca:event:base:param:opal_event_include:value:epoll" || exit 1
+ompi_info --all --parseable | grep "mca:mpi:base:param:mpi_leave_pinned:value:true" || exit 1
+ompi_info --all --parseable | grep "mca:mpi:base:param:mpi_leave_pinned_pipeline:value:false" || exit 1
+ompi_info --all --parseable | grep "mca:mpi:base:param:mpi_preconnect_all:value:true" || exit 1
+ompi_info --all --parseable | grep "mca:mpi:base:param:mpi_warn_on_fork:value:false" || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/mpi/local-hello-world.test b/SubSystems/Online_Cobalt/validation/system/mpi/local-hello-world.test
new file mode 100755
index 0000000000000000000000000000000000000000..418b57f491ed3d4b6ebd7af72cece6b1a4688b2a
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/system/mpi/local-hello-world.test
@@ -0,0 +1,7 @@
+#!/bin/bash -ve
+
+mpicc $(dirname $0)/mpi-hello-world.c -o /tmp/mpi-hello-world || exit 1
+
+mpirun --tag-output -H localhost,localhost /tmp/mpi-hello-world | sort | fgrep 'Hello world' | wc -l | grep '^2$'
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/mpi/mpi-selector.test b/SubSystems/Online_Cobalt/validation/system/mpi/mpi-selector.test
new file mode 100755
index 0000000000000000000000000000000000000000..bb8545dc5e0f4205ec8825cb2af8fc04b588c4b2
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/system/mpi/mpi-selector.test
@@ -0,0 +1,18 @@
+#!/bin/bash -ve
+
+#example output of mpi-selector
+#$ mpi-selector --query
+#default:openmpi-4.0.0rc5
+#level:system
+
+#check if any selection has been made system wide
+mpi-selector --query | egrep "default|level:system" | wc -l | grep '^2$'
+
+# check if selection is our preferred version
+mpi-selector --query | grep "default" | grep "openmpi-4.0"
+
+# test if both mpicc and mpirun can be called
+which mpicc || exit 1
+which mpirun || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/network/10gb-ifaces.test b/SubSystems/Online_Cobalt/validation/system/network/10gb-ifaces.test
index 074f4d7d5e1849aed13644f3be94934ab5aa3a29..ec122a08495ad6bfe358e9927f083022db1e33ad 100755
--- a/SubSystems/Online_Cobalt/validation/system/network/10gb-ifaces.test
+++ b/SubSystems/Online_Cobalt/validation/system/network/10gb-ifaces.test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 for IFACE in eth2 eth3 eth4 eth5
 do
@@ -10,3 +10,5 @@ do
   # Interface should be up
   ip link show $IFACE | grep -q "state UP" || exit 1
 done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/network/hostname.test b/SubSystems/Online_Cobalt/validation/system/network/hostname.test
new file mode 100755
index 0000000000000000000000000000000000000000..498de0459c5d0accd876c345b582ddec21592655
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/system/network/hostname.test
@@ -0,0 +1,15 @@
+#!/bin/bash -ve
+
+# Our own hostname must be resolvable
+
+if [ `hostname` == `hostname -f` ] ; then
+  echo "hostname should not contain domain suffix"
+  exit 1
+fi
+
+if [ `hostname` != `hostname -s` ] ; then
+  echo "hostname should be equal to short hostname"
+  exit 1
+fi
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/network/hosts.test b/SubSystems/Online_Cobalt/validation/system/network/hosts.test
index d1d3a475cc4203e5095b5ec95236fe2d4e834ce4..663d9cf93ca37101ce1e8c90faaefebd9cecc640 100755
--- a/SubSystems/Online_Cobalt/validation/system/network/hosts.test
+++ b/SubSystems/Online_Cobalt/validation/system/network/hosts.test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 # Our own hostname must be resolvable
 
@@ -18,3 +18,5 @@ do
   fgrep "cbt00$i-10GB03" /etc/hosts || exit 1
   fgrep "cbt00$i-10GB04" /etc/hosts || exit 1
 done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/network/ipoib.test b/SubSystems/Online_Cobalt/validation/system/network/ipoib.test
index a8d3b435eff74520d8e94e2c6acf680856c3da38..47cc87eb9ebeae5911b9876184b16c27839b87b5 100755
--- a/SubSystems/Online_Cobalt/validation/system/network/ipoib.test
+++ b/SubSystems/Online_Cobalt/validation/system/network/ipoib.test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 for IFACE in ib0 ib1
 do
@@ -13,3 +13,5 @@ do
   # Connected mode should be set
   [ "`cat /sys/class/net/$IFACE/mode`" == "connected" ] || exit 1
 done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/network/routes.test b/SubSystems/Online_Cobalt/validation/system/network/routes.test
index e6290c2c23addaa7cb9feaa39b5fd8d1654f33e8..fa03be7b26f3aa5c6544ea8f1877ca5f80da3453 100755
--- a/SubSystems/Online_Cobalt/validation/system/network/routes.test
+++ b/SubSystems/Online_Cobalt/validation/system/network/routes.test
@@ -1,3 +1,5 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 diff <(sort routes.`hostname`) <(ip route | sort) || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/os/gdb.test b/SubSystems/Online_Cobalt/validation/system/os/gdb.test
index f21004de57bdeb2d346bfc039ec3380df0774aaa..0efd9d1e890dea3d5a21b13130ea5561a331eff9 100755
--- a/SubSystems/Online_Cobalt/validation/system/os/gdb.test
+++ b/SubSystems/Online_Cobalt/validation/system/os/gdb.test
@@ -1,5 +1,7 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 # We need kernel.yama.ptrace_scope == 0 to be able to attach
 # gdb to our processes.
 [ `/sbin/sysctl -n kernel.yama.ptrace_scope` == "0" ] || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/os/get_smp_affinity b/SubSystems/Online_Cobalt/validation/system/os/get_smp_affinity
index 7862dca64641274a888fa651138b10dc85a120fd..49ec22371b05d3bad338433af162f20dcb99fdb2 100755
--- a/SubSystems/Online_Cobalt/validation/system/os/get_smp_affinity
+++ b/SubSystems/Online_Cobalt/validation/system/os/get_smp_affinity
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -ve
 #
 # Set the affinity of the IRQs of the following devices to the cores
 # of their respective NUMA node:
@@ -68,3 +68,4 @@ for MLX in /sys/class/infiniband/mlx*; do
   list_mlx `basename $MLX`
 done
 
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/os/limits.test b/SubSystems/Online_Cobalt/validation/system/os/limits.test
index ec9d18ec77aefb152360ed5c7e19a4e7302b5918..41ad2acf8bf460cfb34c93b4f79849afc1429713 100755
--- a/SubSystems/Online_Cobalt/validation/system/os/limits.test
+++ b/SubSystems/Online_Cobalt/validation/system/os/limits.test
@@ -1,6 +1,8 @@
-#!/bin/bash
+#!/bin/bash -ve
 
-# For now, require exact settings for all users
-grep '\*\s*-\s*memlock\s*unlimited' /etc/security/limits.conf || exit 1
-grep '\*\s*-\s*nice\s*19' /etc/security/limits.conf || exit 1
-grep '\*\s*-\s*rtprio\s*99' /etc/security/limits.conf || exit 1
+# For now, require exact settings for all rtuser's
+egrep 'rtuser\s*(-|hard)\s*memlock\s*unlimited' /etc/security/limits.conf || exit 1
+egrep 'rtuser\s*(-|hard)\s*nice\s*19' /etc/security/limits.conf || exit 1
+egrep 'rtuser\s*(-|hard)\s*rtprio\s*99' /etc/security/limits.conf || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/os/netif.test b/SubSystems/Online_Cobalt/validation/system/os/netif.test
index 098351979651113cc34023301edb8880bd14b839..c12ec67d66b3e8adb3b6365bb3c9f7ffa2fb7529 100755
--- a/SubSystems/Online_Cobalt/validation/system/os/netif.test
+++ b/SubSystems/Online_Cobalt/validation/system/os/netif.test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 # Kernels typically applies to an interface the max value of conf/{all,interface}/<setting>.
 # See kernel's Documentation/networking/ip-sysctl.txt
@@ -26,3 +26,5 @@ for path in /proc/sys/net/ipv4/conf/*; do
   [ `/sbin/sysctl -n net.ipv4.conf.$iface.rp_filter` == "0" ] || exit 1
 done
 
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/os/smp_affinity.root.test b/SubSystems/Online_Cobalt/validation/system/os/smp_affinity.root.test
index 501101c31f4a591926405b8be49093282081f17d..af921d59088f3ad79daf890e09b794ad2816ea2e 100755
--- a/SubSystems/Online_Cobalt/validation/system/os/smp_affinity.root.test
+++ b/SubSystems/Online_Cobalt/validation/system/os/smp_affinity.root.test
@@ -1,3 +1,8 @@
-#!/bin/bash -e
+#!/bin/bash -ve
+
+source $(dirname $0)/../../validation_utils.sh
+check_root_privileges
 
 diff get_smp_affinity.reference <(./get_smp_affinity) || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/packages/atop.test b/SubSystems/Online_Cobalt/validation/system/packages/atop.test
index 60671bde3c2179f3f3d07404941360cf8d7236f2..7486b61d1ca269a8bf832702eb3f9f78d8b238bb 100755
--- a/SubSystems/Online_Cobalt/validation/system/packages/atop.test
+++ b/SubSystems/Online_Cobalt/validation/system/packages/atop.test
@@ -1,2 +1,5 @@
-#!/bin/bash
-dpkg -l atop || exit 1
+#!/bin/bash -ve
+
+rpm -q atop || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/packages/autogen.test b/SubSystems/Online_Cobalt/validation/system/packages/autogen.test
index eac6bf503bd105675b744b4feddc50980d0ecf40..a7cf3f904407b84a52b21f40e09d1a8afdac4a06 100755
--- a/SubSystems/Online_Cobalt/validation/system/packages/autogen.test
+++ b/SubSystems/Online_Cobalt/validation/system/packages/autogen.test
@@ -1,2 +1,5 @@
-#!/bin/bash
-dpkg -l autogen || exit 1
+#!/bin/bash -ve
+
+rpm -q autogen || exit 1
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/packages/ipmitool.test b/SubSystems/Online_Cobalt/validation/system/packages/ipmitool.test
deleted file mode 100755
index fd70461034f0af348d979a8fa57fbfa1786e48f4..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/system/packages/ipmitool.test
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-dpkg -l ipmitool || exit 1
diff --git a/SubSystems/Online_Cobalt/validation/system/packages/linux-tools.test b/SubSystems/Online_Cobalt/validation/system/packages/linux-tools.test
deleted file mode 100755
index 770b6c194dbfb0bf264bae0e91d73576523974fa..0000000000000000000000000000000000000000
--- a/SubSystems/Online_Cobalt/validation/system/packages/linux-tools.test
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-dpkg -l linux-tools || exit 1
diff --git a/SubSystems/Online_Cobalt/validation/system/users/dotssh.root.test b/SubSystems/Online_Cobalt/validation/system/users/dotssh.root.test
index d67d077011ff7df660dfe7539a3631c01223c8c6..6cbda8d83b800bacbb4e89f83a5a25a7bff316ea 100755
--- a/SubSystems/Online_Cobalt/validation/system/users/dotssh.root.test
+++ b/SubSystems/Online_Cobalt/validation/system/users/dotssh.root.test
@@ -1,6 +1,9 @@
-#!/bin/bash
+#!/bin/bash -ve
 
-for DIR in lofarbuild lofarsystem
+source $(dirname $0)/../../validation_utils.sh
+check_root_privileges
+
+for DIR in lofarbuild lofarsys
 do
   AUTHKEYS=/localhome/$DIR/.ssh/authorized_keys
 
@@ -8,3 +11,5 @@ do
   [ -f $AUTHKEYS ] || exit 1
 done
 
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/users/homedirs.test b/SubSystems/Online_Cobalt/validation/system/users/homedirs.test
index 278c3bf1a2af50d9007e564664662ecf0971ba21..371a7e0e35108850f2e7ccdd713f886167a982fa 100755
--- a/SubSystems/Online_Cobalt/validation/system/users/homedirs.test
+++ b/SubSystems/Online_Cobalt/validation/system/users/homedirs.test
@@ -1,6 +1,6 @@
-#!/bin/bash
+#!/bin/bash -ve
 
-for USER in lofarsys lofarbuild mol loose grit broekema schoenma renting
+for USER in lofarsys lofarbuild mol schaap teun jasmin reinoud
 do
   HOMEDIR=`bash -c "readlink -f ~$USER"`
   echo "$USER -> $HOMEDIR.."
@@ -8,5 +8,6 @@ do
 done
 
 # lofarsys needs a homedir in /localhome
-LOFARSYS_HOMEDIR=`bash -c "readlink -f ~lofarsys"`
-[ $LOFARSYS_HOMEDIR == "/localhome/lofarsystem" ] || exit 1
+# see localhome.test in this test dir
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/users/localhome.test b/SubSystems/Online_Cobalt/validation/system/users/localhome.test
index b8b0c5f6f0f2c50f9a8d961821afd2dccb617901..5aaeee7e4a4e3bb68e5726b99d6ca1f485bd99d7 100755
--- a/SubSystems/Online_Cobalt/validation/system/users/localhome.test
+++ b/SubSystems/Online_Cobalt/validation/system/users/localhome.test
@@ -1,6 +1,8 @@
-#!/bin/bash
+#!/bin/bash -ve
 
-for DIR in lofarbuild lofarsystem lofar
+for DIR in lofarbuild lofarsys
 do
   [ -d /localhome/$DIR ] || exit 1
 done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/users/login-shell.test b/SubSystems/Online_Cobalt/validation/system/users/login-shell.test
index 88227d52ad65856ae2670821e0e6d1c6aee30f9f..2ca718cca825fa4a00f062ccb8933c6ba962fa94 100755
--- a/SubSystems/Online_Cobalt/validation/system/users/login-shell.test
+++ b/SubSystems/Online_Cobalt/validation/system/users/login-shell.test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 for USER in lofarsys lofarbuild mol loose grit broekema schoenma renting
 do
diff --git a/SubSystems/Online_Cobalt/validation/system/users/rtuser.test b/SubSystems/Online_Cobalt/validation/system/users/rtuser.test
new file mode 100755
index 0000000000000000000000000000000000000000..2883d2cb7b81e559dd1ed64ed4922be0ef59893f
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/system/users/rtuser.test
@@ -0,0 +1,12 @@
+#!/bin/bash -ve
+
+# Check whether certain users have sudo rights.
+# For now, we assume that such users simply belong
+# to the `sudo' group.
+
+for U in lofarsys mol schaap
+do
+  grep -E "^rtuser:x:[0-9]+:.*\b${U}\b" /etc/group || exit 1
+done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/system/users/sudo.test b/SubSystems/Online_Cobalt/validation/system/users/sudo.test
index 3a9c73b8994c1302ea05fe7663fef2920d73a9b1..e3f8c0571aadb3bf4ee8e8b55decb59bef21065f 100755
--- a/SubSystems/Online_Cobalt/validation/system/users/sudo.test
+++ b/SubSystems/Online_Cobalt/validation/system/users/sudo.test
@@ -1,10 +1,12 @@
-#!/bin/bash
+#!/bin/bash -ve
 
 # Check whether certain users have sudo rights.
 # For now, we assume that such users simply belong
 # to the `sudo' group.
 
-for U in mol grit
+for U in mol schaap jasmin reinoud teun
 do
   grep -E "^sudo:x:[0-9]+:.*\b${U}\b" /etc/group || exit 1
 done
+
+exit 0
diff --git a/SubSystems/Online_Cobalt/validation/validate b/SubSystems/Online_Cobalt/validation/validate
index 42756cf710c5613839c308cc4501fa6008f4bc78..50c77d3ec8cf9f554429fcb5314bea7827e28062 100755
--- a/SubSystems/Online_Cobalt/validation/validate
+++ b/SubSystems/Online_Cobalt/validation/validate
@@ -1,40 +1,31 @@
 #!/bin/bash
 
-# The positional parameters are the test sets to run.
-#
-# Default: system
-TESTSETS=${@:-system}
+# Change directory to the location of this script
+VALIDATION_ROOT_DIR=$(dirname $0)
+cd $VALIDATION_ROOT_DIR
 
-# Determine whether we can obtain root rights
-sudo -n /bin/true >/dev/null 2>&1
-CAN_SUDO=$?
+# import helper functions
+source $VALIDATION_ROOT_DIR/validation_utils.sh
 
 # runTest TEST
 #
-# Runs TEST, with elevated priviledges if needed.
+# Runs TEST, with elevated privileges if needed.
 #
 function runTest() {
   TEST=$1
 
   echo "----------------------------------------------------------------"
   echo " Running test: $TEST"
-  echo " Working dir:  `pwd`"
-  echo "        User:  `whoami`"
-  echo "        Host:  `hostname`"
-  echo "        Time:  `date +"%F %T"`"
+  echo "  Working dir:  `pwd`"
+  echo "         User:  `whoami`"
+  echo "         Host:  `hostname`"
+  echo "         Time:  `date +"%F %T"`"
   echo "----------------------------------------------------------------"
 
-  if [ "${TEST%%.root.test}" == "${TEST}" -o `id -u` == 0 ]; then
-    ssh -tt localhost "cd $PWD && bash -v $TEST" # need an interactive shell for sudo inside the test scripts
-    RESULT=$?
-  else
-    if [ $CAN_SUDO -eq 0 ]; then
-      sudo -n bash -v $TEST
-      RESULT=$?
-    else
-      return 42
-    fi
-  fi
+  # just run the test script and report and return the exit code.
+  # see below how special use case $NEED_ROOT_EXIT_CODE is handled.
+  bash -v $TEST
+  RESULT=$?
 
   echo "----------------------------------------------------------------"
   echo " Exit code: $RESULT"
@@ -45,21 +36,50 @@ function runTest() {
 NRTESTS=0
 NRSUCCESS=0
 NRFAILURE=0
+NRAPPLICABLE=0
+NRNOTAPPLICABLE=0
 
-# Change directory to the location of this script
-cd `dirname $0`
+if [ "$LOFARROOT" != "" ]; then
+    LOGDIR="$LOFARROOT/var/log/validation"
+else
+    # assume we are in <some_base_dir>/share/validation
+    # so, go up to <some_base_dir>, and decent into var/log
+    LOGDIR="$VALIDATION_ROOT_DIR/../../var/log/validation"
+    # make sure the logdir is present
+    mkdir -p $LOGDIR
+    # and then convert the relative path into an absolute path
+    LOGDIR="`readlink -f -n $LOGDIR`"
+fi
 
-echo "Running on `hostname`:`pwd`"
-echo ""
+# add hostname and timestamp for this validation run to each log file
+LOGSUFFIX="`hostname -s`_`date +%FT%T`.log"
 
-LOGSUFFIX="`hostname`.log.`date +%FT%T`"
+# The positional parameters are the test sets to run.
+#
+# Default: all test-suite sub dirs
+TESTSETS=${@:-`find -L .  -maxdepth 1 -type d | sort -u`}
+
+echo "-----------------------------------------------------------------------------"
+echo "------------------------- Running validation tests --------------------------"
+echo "-----------------------------------------------------------------------------"
+echo "               host: `hostname`"
+echo "  working directory: `pwd`"
+echo "      log directory: $LOGDIR"
+echo "         log suffix: $LOGSUFFIX"
+echo "-----------------------------------------------------------------------------"
+echo " Please note that some tests can take a considerable amount of time..."
+echo "-----------------------------------------------------------------------------"
+echo ""
 
 # Run all tests
-for TEST in `find $TESTSETS -name '*.test' -type f -a -executable`
+for TEST in `find -L $TESTSETS -name '*.test' -type f -a -executable | sort -u`
 do
-  LOGFILE="$TEST.$LOGSUFFIX"
+  LOGFILE="$LOGDIR/$TEST.$LOGSUFFIX"
+
+  # make sure we can write into the log dir
+  mkdir -p `dirname $LOGFILE`
 
-  printf "%40s: " "$TEST"
+  printf "%48s : " "$TEST"
   (cd `dirname $TEST` && runTest ./`basename $TEST`) > $LOGFILE 2>&1
   RESULT=$?
 
@@ -68,25 +88,49 @@ do
   case "$RESULT" in
     0) echo OK
        NRSUCCESS=$((NRSUCCESS + 1))
+       NRAPPLICABLE=$((NRAPPLICABLE + 1))
        ;;
-    42) echo "NEED ROOT"
-       NRFAILURE=$((NRFAILURE + 1))
+    $NEED_ROOT_EXIT_CODE) echo "NEED ROOT"
+       NRNOTAPPLICABLE=$((NRNOTAPPLICABLE + 1))
+       ;;
+    $NEED_NON_ROOT_EXIT_CODE) echo "CANNOT RUN AS ROOT"
+       NRNOTAPPLICABLE=$((NRNOTAPPLICABLE + 1))
+       ;;
+    $INVALID_CLUSTER_EXIT_CODE) echo "CANNOT RUN ON THIS CLUSTER"
+       NRNOTAPPLICABLE=$((NRNOTAPPLICABLE + 1))
+       ;;
+    $INVALID_NODE_EXIT_CODE) echo "CANNOT RUN ON THIS NODE"
+       NRNOTAPPLICABLE=$((NRNOTAPPLICABLE + 1))
+       ;;
+    $NO_GPU_EXIT_CODE) echo "NO GPU ON THIS NODE"
+       NRNOTAPPLICABLE=$((NRNOTAPPLICABLE + 1))
+       ;;
+    $NOT_ON_HEAD_EXIT_CODE) echo "CAN ONLY RUN ON HEADNODE"
+       NRNOTAPPLICABLE=$((NRNOTAPPLICABLE + 1))
        ;;
     *) echo "ERROR (see $LOGFILE)"
        NRFAILURE=$((NRFAILURE + 1))
+       NRAPPLICABLE=$((NRAPPLICABLE + 1))
        ;;
   esac
 done
 
 # Report statistics
-if [ $NRTESTS -eq 0 ]; then
+if [ $NRAPPLICABLE -eq 0 ]; then
   SUCCESSPERCENTAGE=100
 else
-  SUCCESSPERCENTAGE=$((100 * NRSUCCESS / NRTESTS))
+  SUCCESSPERCENTAGE=$((100 * NRSUCCESS / NRAPPLICABLE))
 fi
 
 echo ""
-echo "${SUCCESSPERCENTAGE}% tests passed, ${NRFAILURE} tests failed out of ${NRTESTS}"
+echo "********************************************************************"
+echo "********************* Summary of results  **************************"
+echo "********************************************************************"
+
+echo "Skipped ${NRNOTAPPLICABLE} out of ${NRTESTS} tests."
+echo "Ran ${NRAPPLICABLE} out of ${NRTESTS} tests."
+echo "$((100-SUCCESSPERCENTAGE))% or ${NRFAILURE}/${NRAPPLICABLE} of the tests which ran failed."
+echo "${SUCCESSPERCENTAGE}% or ${NRSUCCESS}/${NRAPPLICABLE} of the tests which ran passed."
 echo ""
 
 # Base our exit code on the existence of failed tests
diff --git a/SubSystems/Online_Cobalt/validation/validation_utils.sh b/SubSystems/Online_Cobalt/validation/validation_utils.sh
new file mode 100644
index 0000000000000000000000000000000000000000..aa3ac6c6a95e0e9c86b66a1a3571851b1944e2a5
--- /dev/null
+++ b/SubSystems/Online_Cobalt/validation/validation_utils.sh
@@ -0,0 +1,62 @@
+#
+# Useful functions/constants for the validate test scripts
+#
+
+#
+# special exit codes
+#
+NEED_ROOT_EXIT_CODE=42
+NEED_NON_ROOT_EXIT_CODE=43
+INVALID_CLUSTER_EXIT_CODE=44
+INVALID_NODE_EXIT_CODE=45
+NO_GPU_EXIT_CODE=46
+NOT_ON_HEAD_EXIT_CODE=47
+
+check_root_privileges()
+{
+    # we need to be root! exit with special code $NEED_ROOT_EXIT_CODE otherwise (see validate script).
+    if [[ `id -u` -ne 0 ]]; then
+        exit $NEED_ROOT_EXIT_CODE
+    fi
+}
+
+check_non_root_privileges()
+{
+    # we need not to be root! exit with special code $NEED_NON_ROOT_EXIT_CODE otherwise (see validate script).
+    if [[ `id -u` -eq 0 ]]; then
+        exit $NEED_NON_ROOT_EXIT_CODE
+    fi
+}
+
+check_running_on_cep4()
+{
+    if [[ `hostname -f` != *"cep4.control.lofar" ]]; then
+        exit $INVALID_CLUSTER_EXIT_CODE
+    fi
+}
+
+check_running_on_cobalt2()
+{
+    if [[ `hostname -f` != "cbm2"* ]]; then
+        exit $INVALID_CLUSTER_EXIT_CODE
+    fi
+}
+
+check_running_on_cobalt2_head()
+{
+    # early exit if not on cobalt2 cluster
+    check_running_on_cobalt2
+
+    if [[ `hostname -f` != "cbm299."* ]]; then
+        exit $NOT_ON_HEAD_EXIT_CODE
+    fi
+}
+
+check_has_nvidia_gpu()
+{
+    lspci | grep -i nvidia
+    if [[ $? -ne 0 ]]; then
+        exit $NO_GPU_EXIT_CODE
+    fi
+}
+
diff --git a/SubSystems/RAServices/Jenkinsfile b/SubSystems/RAServices/Jenkinsfile
new file mode 100644
index 0000000000000000000000000000000000000000..94166ff12c2dc252e0f9e4d367f877459c6321c8
--- /dev/null
+++ b/SubSystems/RAServices/Jenkinsfile
@@ -0,0 +1,21 @@
+pipeline {
+    agent any
+
+    stages {
+        stage('Build') {
+            steps {
+                echo 'Building..'
+                cmakeBuild([installation: "InSearchPath", cmakeArgs: "-Wdev -DBUILD_PACKAGES=RAServices -DCMAKE_INSTALL_PREFIX=/opt/lofar"])            }
+        }
+        stage('Test') {
+            steps {
+                echo 'Testing..'
+            }
+        }
+        stage('Deploy') {
+            steps {
+                echo 'Deploying....'
+            }
+        }
+    }
+}
diff --git a/doc/test2_reinoud b/doc/test2_reinoud
new file mode 100644
index 0000000000000000000000000000000000000000..911bbafeffd25a61fd1c49d9011c72fd84100a95
--- /dev/null
+++ b/doc/test2_reinoud
@@ -0,0 +1,2 @@
+ANothgewr one
+16:21
diff --git a/support/hooks/commit-msg b/support/hooks/commit-msg
new file mode 100644
index 0000000000000000000000000000000000000000..9e2e4a454b57835b075ff31d41421a3f09acec95
--- /dev/null
+++ b/support/hooks/commit-msg
@@ -0,0 +1,14 @@
+#! /usr/bin/env ruby
+
+message_file = ARGV[0]
+message = File.read(message_file)
+$regex = /^((fixes|task|story|issue)\s)?(#(\d+)|[a-zA-Z]+-(\d)+):/i
+if !$regex.match(message)
+    STDERR.puts("[commit-msg hook] Your commit #{ rev } was rejected!\n"\
+        "[commit-msg hook] A commit message must start with a JIRA task ID,\n"\
+        " or \"task\", \"story\", \"issue\" or \"fixes\", followed by an issue ID.\n"\
+        "[commit-msg hook] For example: \"Task #42: Fixed bug\" or \"SW-22334: Fixed bug\"\n"\
+        "[commit-msg hook] Your commit message was: " + message)
+    exit 1
+end
+
diff --git a/support/hooks/pre-commit b/support/hooks/pre-commit
new file mode 100644
index 0000000000000000000000000000000000000000..826a1395c166444c9f3d48d6dba8350543a2d392
--- /dev/null
+++ b/support/hooks/pre-commit
@@ -0,0 +1,36 @@
+#! /usr/bin/env ruby
+
+$regex = /^((fixes|task|story|issue)\s)?(#(\d+)|[a-zA-Z]+-(\d)+):/i
+
+# Simple function, just for ease of testing
+def parse_message(msg,re)
+    if not re.match(msg)
+        return false
+    else
+        return true
+    end
+end
+
+# enforced custom commit message format
+def check_message_format
+    missed_revs = `git rev-list #{$rev_old}..#{$rev_new}`.split("\n")
+    missed_revs.each do |rev|
+        message = `git cat-file commit #{rev} | sed '1,/^$/d'`
+        if not parse_message(message,$regex)
+            STDERR.puts("[pre-receive hook] Your commit #{ rev } was rejected.")
+            STDERR.puts("[pre-receive hook] Commit message must start with a JIRA task ID,"\
+                " or \"Task\", \"Story\", \"Issue\" or \"Fixes\", followed by an issue ID.")
+            STDERR.puts("[pre-receive hook] For example: \"Task #42: Fixed bug\" or \"SW-22334: Fixed bug\"")
+            STDERR.puts("[pre-receive hook] Your commit message was: " +message)
+            exit 1
+        end 
+    end
+end
+
+# The "main" method ... when executing this file:
+# Only run this if the file itself is being executed
+if __FILE__ == $0
+    $rev_old, $rev_new, $ref = STDIN.read.split(" ")
+    check_message_format
+end
+