[Freeswitch-svn] [commit] r11086 - in freeswitch/branches/gmaruzz: . build conf conf/autoload_configs conf/dialplan conf/directory conf/directory/default conf/sip_profiles debian docs libs/esl libs/esl/getopt libs/esl/src libs/esl/src/include libs/libg722_1/src libs/portaudio/src/os/win libs/sofia-sip/libsofia-sip-ua/su libs/win32 libs/win32/flite libs/win32/pocketsphinx libs/win32/sphinxbase scripts src src/include src/mod/applications/mod_commands src/mod/applications/mod_conference src/mod/applications/mod_dptools src/mod/applications/mod_easyroute src/mod/applications/mod_limit src/mod/applications/mod_voicemail src/mod/endpoints/mod_iax src/mod/endpoints/mod_sofia src/mod/event_handlers/mod_erlang_event src/mod/event_handlers/mod_event_multicast src/mod/event_handlers/mod_event_socket src/mod/formats/mod_shout src/mod/languages/mod_managed src/mod/languages/mod_managed/managed src/mod/languages/mod_spidermonkey src/mod/xml_int/mod_xml_rpc support-d

FreeSWITCH SVN gmaruzz at freeswitch.org
Wed Jan 7 08:17:01 PST 2009


Author: gmaruzz
Date: Wed Jan  7 10:17:00 2009
New Revision: 11086

Log:
Merge of trunk revisions 10915:11043 into gmaruzz branch

Added:
   freeswitch/branches/gmaruzz/Freeswitch.2008.express.sln
      - copied unchanged from r11085, /freeswitch/trunk/Freeswitch.2008.express.sln
   freeswitch/branches/gmaruzz/conf/autoload_configs/easyroute.conf.xml
      - copied unchanged from r11085, /freeswitch/trunk/conf/autoload_configs/easyroute.conf.xml
   freeswitch/branches/gmaruzz/libs/esl/fs_cli.conf
      - copied unchanged from r11085, /freeswitch/trunk/libs/esl/fs_cli.conf
   freeswitch/branches/gmaruzz/libs/esl/getopt/
      - copied from r11085, /freeswitch/trunk/libs/esl/getopt/
   freeswitch/branches/gmaruzz/libs/esl/getopt/getopt.h
      - copied unchanged from r11085, /freeswitch/trunk/libs/esl/getopt/getopt.h
   freeswitch/branches/gmaruzz/libs/esl/getopt/getopt_long.c
      - copied unchanged from r11085, /freeswitch/trunk/libs/esl/getopt/getopt_long.c
   freeswitch/branches/gmaruzz/scripts/easyroute_mysql.sql
      - copied unchanged from r11085, /freeswitch/trunk/scripts/easyroute_mysql.sql
   freeswitch/branches/gmaruzz/scripts/m4a-to-wav.sh
      - copied unchanged from r11085, /freeswitch/trunk/scripts/m4a-to-wav.sh
   freeswitch/branches/gmaruzz/src/mod/applications/mod_easyroute/
      - copied from r11085, /freeswitch/trunk/src/mod/applications/mod_easyroute/
   freeswitch/branches/gmaruzz/src/mod/applications/mod_easyroute/Makefile
      - copied unchanged from r11085, /freeswitch/trunk/src/mod/applications/mod_easyroute/Makefile
   freeswitch/branches/gmaruzz/src/mod/applications/mod_easyroute/mod_easyroute.c
      - copied unchanged from r11085, /freeswitch/trunk/src/mod/applications/mod_easyroute/mod_easyroute.c
Modified:
   freeswitch/branches/gmaruzz/Freeswitch.2008.sln
   freeswitch/branches/gmaruzz/Makefile.am
   freeswitch/branches/gmaruzz/build/modules.conf.in
   freeswitch/branches/gmaruzz/build/sounds_version.txt
   freeswitch/branches/gmaruzz/conf/autoload_configs/conference.conf.xml
   freeswitch/branches/gmaruzz/conf/dialplan/default.xml
   freeswitch/branches/gmaruzz/conf/directory/default.xml
   freeswitch/branches/gmaruzz/conf/directory/default/brian.xml
   freeswitch/branches/gmaruzz/conf/sip_profiles/internal-ipv6.xml
   freeswitch/branches/gmaruzz/conf/vars.xml
   freeswitch/branches/gmaruzz/debian/changelog
   freeswitch/branches/gmaruzz/debian/freeswitch.install
   freeswitch/branches/gmaruzz/docs/ChangeLog
   freeswitch/branches/gmaruzz/docs/Doxygen.conf
   freeswitch/branches/gmaruzz/libs/esl/Makefile
   freeswitch/branches/gmaruzz/libs/esl/fs_cli.2008.vcproj
   freeswitch/branches/gmaruzz/libs/esl/fs_cli.c
   freeswitch/branches/gmaruzz/libs/esl/src/esl.2008.vcproj
   freeswitch/branches/gmaruzz/libs/esl/src/esl.c
   freeswitch/branches/gmaruzz/libs/esl/src/esl_event.c
   freeswitch/branches/gmaruzz/libs/esl/src/include/esl.h
   freeswitch/branches/gmaruzz/libs/esl/src/include/esl_config.h
   freeswitch/branches/gmaruzz/libs/esl/testclient.c
   freeswitch/branches/gmaruzz/libs/esl/testserver.c
   freeswitch/branches/gmaruzz/libs/libg722_1/src/dct4.h
   freeswitch/branches/gmaruzz/libs/portaudio/src/os/win/pa_win_wdmks_utils.c
   freeswitch/branches/gmaruzz/libs/portaudio/src/os/win/pa_x86_plain_converters.c
   freeswitch/branches/gmaruzz/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c
   freeswitch/branches/gmaruzz/libs/win32/Dowload 32khz Sounds.2008.vcproj
   freeswitch/branches/gmaruzz/libs/win32/Download 16khz Sounds.2008.vcproj
   freeswitch/branches/gmaruzz/libs/win32/Download 8khz Sounds.2008.vcproj
   freeswitch/branches/gmaruzz/libs/win32/flite/flite.2008.vcproj
   freeswitch/branches/gmaruzz/libs/win32/pocketsphinx/pocketsphinx.2008.vcproj
   freeswitch/branches/gmaruzz/libs/win32/sphinxbase/sphinxbase.2008.vcproj
   freeswitch/branches/gmaruzz/src/include/switch_channel.h
   freeswitch/branches/gmaruzz/src/include/switch_dso.h
   freeswitch/branches/gmaruzz/src/include/switch_ivr.h
   freeswitch/branches/gmaruzz/src/include/switch_rtp.h
   freeswitch/branches/gmaruzz/src/include/switch_types.h
   freeswitch/branches/gmaruzz/src/include/switch_xml.h
   freeswitch/branches/gmaruzz/src/mod/applications/mod_commands/mod_commands.c
   freeswitch/branches/gmaruzz/src/mod/applications/mod_conference/mod_conference.c
   freeswitch/branches/gmaruzz/src/mod/applications/mod_dptools/mod_dptools.c
   freeswitch/branches/gmaruzz/src/mod/applications/mod_limit/mod_limit.c
   freeswitch/branches/gmaruzz/src/mod/applications/mod_voicemail/mod_voicemail.c
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_iax/mod_iax.c
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/mod_sofia.c
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/mod_sofia.h
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia.c
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia_glue.c
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia_reg.c
   freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
   freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c
   freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_event_socket/mod_event_socket.c
   freeswitch/branches/gmaruzz/src/mod/formats/mod_shout/Makefile
   freeswitch/branches/gmaruzz/src/mod/languages/mod_managed/freeswitch_wrap.cxx
   freeswitch/branches/gmaruzz/src/mod/languages/mod_managed/managed/swig.cs
   freeswitch/branches/gmaruzz/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
   freeswitch/branches/gmaruzz/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c
   freeswitch/branches/gmaruzz/src/switch_apr.c
   freeswitch/branches/gmaruzz/src/switch_channel.c
   freeswitch/branches/gmaruzz/src/switch_console.c
   freeswitch/branches/gmaruzz/src/switch_core.c
   freeswitch/branches/gmaruzz/src/switch_core_io.c
   freeswitch/branches/gmaruzz/src/switch_core_session.c
   freeswitch/branches/gmaruzz/src/switch_core_state_machine.c
   freeswitch/branches/gmaruzz/src/switch_dso.c
   freeswitch/branches/gmaruzz/src/switch_event.c
   freeswitch/branches/gmaruzz/src/switch_ivr.c
   freeswitch/branches/gmaruzz/src/switch_ivr_async.c
   freeswitch/branches/gmaruzz/src/switch_ivr_bridge.c
   freeswitch/branches/gmaruzz/src/switch_ivr_originate.c
   freeswitch/branches/gmaruzz/src/switch_log.c
   freeswitch/branches/gmaruzz/src/switch_rtp.c
   freeswitch/branches/gmaruzz/src/switch_xml.c
   freeswitch/branches/gmaruzz/support-d/.screenrc

Modified: freeswitch/branches/gmaruzz/Freeswitch.2008.sln
==============================================================================
--- freeswitch/branches/gmaruzz/Freeswitch.2008.sln	(original)
+++ freeswitch/branches/gmaruzz/Freeswitch.2008.sln	Wed Jan  7 10:17:00 2009
@@ -831,6 +831,10 @@
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aprtoolkit", "libs\openmrcp\aprtoolkit\aprtoolkit.2008.vcproj", "{13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_fsv", "src\mod\applications\mod_fsv\mod_fsv.2008.vcproj", "{E3246D17-E29B-4AB5-962A-C69B0C5837BB}"
 	ProjectSection(ProjectDependencies) = postProject
@@ -1726,6 +1730,7 @@
 		{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.Build.0 = Debug|Any CPU
 		{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.ActiveCfg = Release|Any CPU
+		{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.Build.0 = Release|Any CPU
 		{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.ActiveCfg = Release|Any CPU
 		{E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.ActiveCfg = Debug|Win32
 		{E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.Build.0 = Debug|Win32
@@ -1770,8 +1775,10 @@
 		{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.Build.0 = Release|Win32
 		{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|Win32
 		{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.Build.0 = Debug|Win32
 		{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.ActiveCfg = Debug|Win32
 		{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.ActiveCfg = Release|Win32
+		{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.Build.0 = Release|Win32
 		{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|Win32
 		{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|Win32.ActiveCfg = Debug|Win32
 		{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|Win32.Build.0 = Debug|Win32

Modified: freeswitch/branches/gmaruzz/Makefile.am
==============================================================================
--- freeswitch/branches/gmaruzz/Makefile.am	(original)
+++ freeswitch/branches/gmaruzz/Makefile.am	Wed Jan  7 10:17:00 2009
@@ -158,13 +158,18 @@
 CLEANFILES     = src/include/switch_version.h src/include/switch_swigable_cpp.h
 BUILT_SOURCES  = src/include/switch_version.h src/include/switch_swigable_cpp.h
 
-bin_PROGRAMS = freeswitch
+bin_PROGRAMS = freeswitch fs_cli
+fs_cli_SOURCES = libs/esl/src/esl.c libs/esl/src/esl_config.c libs/esl/src/esl_event.c libs/esl/src/esl_threadmutex.c libs/esl/fs_cli.c
 freeswitch_SOURCES = src/switch.c
-nodist_freeswitch_SOURCES = src/include/switch_version.h 
+nodist_freeswitch_SOURCES = src/include/switch_version.h
+fs_cli_CFLAGS = $(AM_CFLAGS) -Ilibs/esl/src/include 
+fs_cli_LDFLAGS = $(AM_LDFLAGS) -lpthread
 freeswitch_CFLAGS = $(AM_CFLAGS) $(CORE_CFLAGS)
 freeswitch_LDFLAGS = $(AM_LDFLAGS) -rpath $(libdir)
 freeswitch_LDADD = libfreeswitch.la libs/apr/libapr-1.la
 if ADD_LIBEDIT
+fs_cli_CFLAGS += -DHAVE_EDITLINE -Ilibs/libedit/src
+fs_cli_LDADD = libs/libedit/src/.libs/libedit.a
 freeswitch_CFLAGS    += -Ilibs/libedit/src -DSWITCH_HAVE_LIBEDIT
 freeswitch_LDADD      += libs/libedit/src/.libs/libedit.a
 endif

Modified: freeswitch/branches/gmaruzz/build/modules.conf.in
==============================================================================
--- freeswitch/branches/gmaruzz/build/modules.conf.in	(original)
+++ freeswitch/branches/gmaruzz/build/modules.conf.in	Wed Jan  7 10:17:00 2009
@@ -11,6 +11,7 @@
 applications/mod_limit
 applications/mod_expr
 applications/mod_esf
+#applications/mod_easyroute
 applications/mod_fsv
 #applications/mod_soundtouch
 #applications/mod_rss

Modified: freeswitch/branches/gmaruzz/build/sounds_version.txt
==============================================================================
--- freeswitch/branches/gmaruzz/build/sounds_version.txt	(original)
+++ freeswitch/branches/gmaruzz/build/sounds_version.txt	Wed Jan  7 10:17:00 2009
@@ -1 +1 @@
-1.0.6
+1.0.7

Modified: freeswitch/branches/gmaruzz/conf/autoload_configs/conference.conf.xml
==============================================================================
--- freeswitch/branches/gmaruzz/conf/autoload_configs/conference.conf.xml	(original)
+++ freeswitch/branches/gmaruzz/conf/autoload_configs/conference.conf.xml	Wed Jan  7 10:17:00 2009
@@ -150,7 +150,7 @@
       <!--<param name="tts-engine" value="flite"/>-->
       <!--<param name="tts-voice" value="kal16"/>-->
     </profile>
-    <!--
+
     <profile name="cdquality">
       <param name="domain" value="$${domain}"/>
       <param name="rate" value="48000"/>
@@ -173,6 +173,6 @@
       <param name="caller-id-number" value="$${outbound_caller_id}"/>
       <param name="comfort-noise" value="true"/>
     </profile>
-    -->
+
   </profiles>
 </configuration>

Modified: freeswitch/branches/gmaruzz/conf/dialplan/default.xml
==============================================================================
--- freeswitch/branches/gmaruzz/conf/dialplan/default.xml	(original)
+++ freeswitch/branches/gmaruzz/conf/dialplan/default.xml	Wed Jan  7 10:17:00 2009
@@ -188,13 +188,8 @@
     </extension>
 
     <extension name="extension-intercom">
-      <!-- <condition field="${sip_to_params}" expression="intercom\=true"/> -->
       <condition field="destination_number" expression="^8(10[01][0-9])$">
 	<action application="set" data="dialed_extension=$1"/>
-	<!-- This Alert-Info seems to be a case for Intercom for Polycom which sip_auto_answer=true covers already. -->
-	<!--<action application="export"><![CDATA[alert_info=<sip:${domain_name}>;Ring;Answer]]></action>-->
-	<action application="export"><![CDATA[sip_h_Call-Info=<sip:${domain_name}>;answer-after=0]]></action>
-	<action application="export" data="sip_invite_params=intercom=true"/>
 	<action application="export" data="sip_auto_answer=true"/>
 	<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
       </condition>
@@ -240,6 +235,24 @@
       </condition>
     </extension>
 
+    <extension name="group_dial_sales">
+      <condition field="destination_number" expression="^2000$">
+	<action application="bridge" data="${group_call(sales@${domain_name})}"/>
+      </condition>
+    </extension>
+
+    <extension name="group_dial_support">
+      <condition field="destination_number" expression="^2001$">
+	<action application="bridge" data="group/support@${domain_name}"/>
+      </condition>
+    </extension>
+
+    <extension name="group_dial_billing">
+      <condition field="destination_number" expression="^2002$">
+	<action application="bridge" data="group/billing@${domain_name}"/>
+      </condition>
+    </extension>
+
     <!-- voicemail operator extension -->
     <extension name="operator">
       <condition field="destination_number" expression="^operator$|^0$">
@@ -287,30 +300,69 @@
 	<action application="conference" data="$1-${domain_name}@ultrawideband"/>
       </condition>
     </extension>
+    <!-- MONO 48kHz conferences -->
+    <extension name="cdquality_conferences">
+      <condition field="destination_number" expression="^(33\d{2})$">
+	<action application="answer"/>
+	<action application="conference" data="$1-${domain_name}@cdquality"/>
+      </condition>
+    </extension>
     
     <!-- dial the freeswitch conference via SIP-->
     <extension name="freeswitch_public_conf_via_sip">
-      <condition field="destination_number" expression="^9(888|1616)$">
+      <condition field="destination_number" expression="^9(888|1616|3232)$">
 	<action application="bridge" data="sofia/${use_profile}/$1 at conference.freeswitch.org"/>
       </condition>
     </extension>
 
-    <!--This extension will start a conference and invite several people upon entering -->
-    <extension name="mad_boss">
+    <!--
+	This extension will start a conference and invite a group.
+	At anytime the participant can dial *2 to bridge directly to the boss. 
+	All other callers are then hung up on.
+    -->
+    <extension name="mad_boss_intercom">
       <condition field="destination_number" expression="^0911$">
+	<action application="set" data="conference_auto_outcall_caller_id_name=Mad Boss1"/>
+	<action application="set" data="conference_auto_outcall_caller_id_number=0911"/>
+	<action application="set" data="conference_auto_outcall_timeout=60"/>
+	<action application="set" data="conference_auto_outcall_flags=mute"/>
+	<action application="set" data="conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer='bind_meta_app 2 a s1 intercept::${uuid}'}"/>
+	<action application="set" data="sip_exclude_contact=${network_addr}"/>
+	<action application="conference_set_auto_outcall" data="${group_call(sales)}"/>
+	<action application="conference" data="madboss_intercom1 at default+flags{endconf|deaf}"/>
+      </condition>
+    </extension>
 
+    <!--
+	This extension will start a conference and invite a few of people.
+	At anytime the participant can dial *2 to bridge directly to the boss. 
+	All other callers are then hung up on.
+    -->
+    <extension name="mad_boss_intercom">
+      <condition field="destination_number" expression="^0912$">
+	<action application="set" data="conference_auto_outcall_caller_id_name=Mad Boss2"/>
+	<action application="set" data="conference_auto_outcall_caller_id_number=0912"/>
+	<action application="set" data="conference_auto_outcall_timeout=60"/>
+	<action application="set" data="conference_auto_outcall_flags=mute"/>
+	<action application="set" data="conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer='bind_meta_app 2 a s1 intercept::${uuid}'}"/>
+	<action application="set" data="sip_exclude_contact=${network_addr}"/>
+	<action application="conference_set_auto_outcall" data="loopback/9999"/>
+	<action application="conference" data="madboss_intercom2 at default+flags{endconf|deaf}"/>
+      </condition>
+    </extension>
+
+    <!--This extension will start a conference and invite several people upon entering -->
+    <extension name="mad_boss">
+      <condition field="destination_number" expression="^0913$">
 	<!--These params effect the outcalls made once you join-->
 	<action application="set" data="conference_auto_outcall_caller_id_name=Mad Boss"/>
 	<action application="set" data="conference_auto_outcall_caller_id_number=0911"/>
 	<action application="set" data="conference_auto_outcall_timeout=60"/>
 	<action application="set" data="conference_auto_outcall_flags=none"/>
 	<!--<action application="set" data="conference_auto_outcall_announce=say:You have been called into an emergency conference"/>-->
-
 	<!--Add as many of these as you need, These are the people you are going to call-->
-	<action application="conference_set_auto_outcall" data="sofia/gateway/$${default_provider}/19184238080"/>
-	<action application="conference_set_auto_outcall" data="sofia/default/888 at conference.freeswitch.org"/>
-
-	<action application="conference" data="cool at default"/>
+	<action application="conference_set_auto_outcall" data="loopback/9999"/>
+	<action application="conference" data="madboss3 at default"/>
       </condition>
     </extension>
 

Modified: freeswitch/branches/gmaruzz/conf/directory/default.xml
==============================================================================
--- freeswitch/branches/gmaruzz/conf/directory/default.xml	(original)
+++ freeswitch/branches/gmaruzz/conf/directory/default.xml	Wed Jan  7 10:17:00 2009
@@ -31,7 +31,48 @@
       <variable name="transfer_fallback_extension" value="operator"/>
     </variables>
 
-    <X-PRE-PROCESS cmd="include" data="default/*.xml"/>
+    <groups>
+      <group name="default">
+	<users>
+	  <X-PRE-PROCESS cmd="include" data="default/*.xml"/>
+	</users>
+      </group>
+
+      <group name="sales">
+	<users>
+	  <!--
+	      type="pointer" is a pointer so you can have the 
+	      same user in multiple groups.  It basically means
+	      to keep searching for the user in the directory.
+	  -->
+	  <user id="1000" type="pointer"/>
+	  <user id="1001" type="pointer"/>
+	  <user id="1002" type="pointer"/>
+	  <user id="1003" type="pointer"/>
+	  <user id="1004" type="pointer"/>
+	</users>
+      </group>
+
+      <group name="billing">
+	<users>
+	  <user id="1005" type="pointer"/>
+	  <user id="1006" type="pointer"/>
+	  <user id="1007" type="pointer"/>
+	  <user id="1008" type="pointer"/>
+	  <user id="1009" type="pointer"/>
+	</users>
+      </group>
+
+      <group name="support">
+	<users>
+	  <user id="1010" type="pointer"/>
+	  <user id="1011" type="pointer"/>
+	  <user id="1012" type="pointer"/>
+	  <user id="1013" type="pointer"/>
+	  <user id="1014" type="pointer"/>
+	</users>
+      </group>
+    </groups>
 
   </domain>
 </include>

Modified: freeswitch/branches/gmaruzz/conf/directory/default/brian.xml
==============================================================================
--- freeswitch/branches/gmaruzz/conf/directory/default/brian.xml	(original)
+++ freeswitch/branches/gmaruzz/conf/directory/default/brian.xml	Wed Jan  7 10:17:00 2009
@@ -1,7 +1,7 @@
 <include>
   <!-- ipauth if you have an ip= in the user attributes ie ip="1.2.3.4"  -->
   <!-- <user id="brian" ip="1.2.3.4"> -->
-  <user id="brian" mailbox="9999" cidr="1.2.3.4/24"> 
+  <user id="brian" mailbox="9999" cidr="192.0.2.0/24">
     <!-- Outbound Registrations Related to this user -->
     <gateways>
       <!--<gateway name="asterlink.com">-->

Modified: freeswitch/branches/gmaruzz/conf/sip_profiles/internal-ipv6.xml
==============================================================================
--- freeswitch/branches/gmaruzz/conf/sip_profiles/internal-ipv6.xml	(original)
+++ freeswitch/branches/gmaruzz/conf/sip_profiles/internal-ipv6.xml	Wed Jan  7 10:17:00 2009
@@ -115,17 +115,6 @@
     <!-- set to true to have the profile determine stun is not useful and turn it off globally-->
     <!--<param name="stun-auto-disable" value="true"/>-->
 
-    <!-- TLS: disabled by default, set to "true" to enable -->
-    <param name="tls" value="$${internal_ssl_enable}"/>
-    <!-- additional bind parameters for TLS -->
-    <param name="tls-bind-params" value="transport=tls"/>
-    <!-- Port to listen on for TLS requests. (5061 will be used if unspecified) -->
-    <param name="tls-sip-port" value="$${internal_tls_port}"/>
-    <!-- Location of the agent.pem and cafile.pem ssl certificates (needed for TLS server) -->
-    <param name="tls-cert-dir" value="$${internal_ssl_dir}"/>
-    <!-- TLS version ("sslv23" (default), "tlsv1"). NOTE: Phones may not work with TLSv1 -->
-    <param name="tls-version" value="$${sip_tls_version}"/>
-
   </settings>
 </profile>
 

Modified: freeswitch/branches/gmaruzz/conf/vars.xml
==============================================================================
--- freeswitch/branches/gmaruzz/conf/vars.xml	(original)
+++ freeswitch/branches/gmaruzz/conf/vars.xml	Wed Jan  7 10:17:00 2009
@@ -80,6 +80,12 @@
   -->
   <X-PRE-PROCESS cmd="set" data="bind_server_ip=auto"/>
 
+  <!-- NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
+       
+       If you're going to load test FreeSWITCH please input real IP addresses
+       for external_rtp_ip and external_sip_ip
+  -->
+
   <!-- external_rtp_ip
        Used as the public IP address for SDP.
        Can be an ip address or a string like "stun:stun.server.com" 

Modified: freeswitch/branches/gmaruzz/debian/changelog
==============================================================================
--- freeswitch/branches/gmaruzz/debian/changelog	(original)
+++ freeswitch/branches/gmaruzz/debian/changelog	Wed Jan  7 10:17:00 2009
@@ -1,3 +1,296 @@
+freeswitch (1.0.2-1) unstable; urgency=low
+
+   * all: don't add module interfaces before returning from error conditions in module load functions (MDXMLINT-36)
+   * all: fixed multiple memory leaks
+   * all: improved module unloading/reloading support
+   * build: add support for --switchconfdir (FSBUILD-84)
+   * build: fixed netbsd build
+   * build: make freeswitch stop graceflly with /etc/init.d/freeswitch stop on debian add working dir to start-stop-dir so freeswitch dumps core in workdir
+   * build: multiple packaging fixes
+   * build: user freeswitch not added to audio group on deb install (FSBUILD-95)
+   * Configuration: many updates to default configuration
+   * core: Add ability to choose uuid from originate string, originate_uuid var (use at your own risk) 
+   * core: add bridge_generate_comfort_noise option for bridge to generate comfort noise to the A leg when there is no audio on the B leg
+   * core: add chan vars to param event during hangup hook
+   * core: add exec directive to xml preprocessor (not available on windows)
+   * core: add force_transfer_dialplan and force_transfer_context variables
+   * core: add hashing to event header lookup 
+   * core: add hits to tone_detect
+   * core: add last_dtmf_duration variable
+   * core: add msleep function to swigged languages
+   * core: add park_after_bridge variable
+   * core: add per leg timeouts and specific cause codes in reject_on_single_fail
+   * core: add runtime selection of the module dir (FSCORE-198)
+   * core: add scheduler support for heartbeat
+   * core: add session heartbeat feature
+   * core: add session.destroy psuedo method to sort of destroy a session at least for the sake of FS
+   * core: add session.unsetInputCallback
+   * core: add strftime format string validation for user supplied values
+   * core: add vars param to switch_ivr_originate for recursion (MODAPP-175)
+   * core: added a "group" concept to the user directory
+   * core: added ability to do dns lookup to find ip with host: like stun: (FSCORE-219)
+   * core: added better locking for codec changes during a call
+   * core: added current_application and current_application_data variables
+   * core: added error/ magic endpoint so modules can return error causes in situations like sofia_contact
+   * core: added read_result channel variable
+   * core: added support for "F" to indicate flash in dtmf (FSCORE-213)
+   * core: allow calls to be stolen from originate
+   * core: allow you to get the privacy bits in the caller_profile
+   * core: change dso code to load symbols local
+   * core: changes core flags to be array based so we have more
+   * core: eavesdrop causes the people being eavesdropped on to not hear ach other (MODAPP-140)
+   * core: expose time table to variable interface via caller field lookup 
+   * core: fix 100% cpu when sending parked call to moh (FSCORE-234)
+   * core: fix bridge app to make sure both channels are ready for media when one is only in ringing state
+   * core: fix buffer overflow (FSCORE-188)
+   * core: fix conference dial by allowing multiple braces in originate, fix bad pointer op (FSCORE-208)
+   * core: fix double detection of DTMF in IVR (FSCORE-221)
+   * core: fix hangup_after_bridge is false on a bridge started with the intercept app
+   * core: fix issue where pid file is accidentally truncated
+   * core: fix ivr timeout (FSCORE-181)
+   * core: fix memory leak in alias tab completion code
+   * core: fix min digits in read app
+   * core: fix out-of-bounds pointer in variable expansion (FSCORE-171)
+   * core: fix segfault in media bugs when in bypass media (FSCORE-193)
+   * core: fix segfault on gtalk to sip calls (FSCORE-212)
+   * core: fix segfault on reloadxml (FSCORE-176)
+   * core: fix segfault on trasfering eavesdopping party (FSCORE-210)
+   * core: fix segfault using switch_system function (FSCORE-196)
+   * core: fix session.bridge
+   * core: fix setting effective_caller_id_name / effective_caller_id_number on bridge dialstring (MODAPP-122)
+   * core: fix stream_raw_write (MODAPP-145)
+   * core: fix using resampling on ringback file
+   * core: fixed performance bottleneck in sqlite db's
+   * core: fixed race in reloadxml
+   * core: increment app before execute in case it returns to execute it will go to the next item in the list and not the same
+   * core: ivr menu max_failures and max_timeouts now default to 3 if not specified or invalid (less than 1) values are specified (FSCORE-244)
+   * core: ivr_menu max-timeouts option, result in ivr_menu_status var (FSCORE-183)
+   * core: let b legs use park_after_bridge too
+   * core: make events less verbose unless verbose_events is set
+   * core: parse private events during originate
+   * core: pass pdd data to a leg on oubound calls using bridge
+   * core: prevent crash in crazy situation with xml interface lookup failures (FSCORE-169)
+   * core: reduce cpu requirement for generated comfort noise
+   * core: remove interface names from core db on unload
+   * core: reworked timing resulting in significant performance increase and better rtp timing
+   * core: rewrite switch_play_and_get_digits (MODAPP-166)
+   * core: session.recordFile never terminates (MODLANG-79)
+   * core: session.transfer make dialplan and context optional
+   * core: set_user app now sets domain vars as well as user vars
+   * core: tone_detect not triggering app after tone detection (MODAPP-182)
+   * core: unprivileged user setting bigger stack for switch_system thread failure (FSCORE-197)
+   * core: user_exists returns false when fetching a user from XML Curl or other xml interfaces
+   * libesl: added c event socket library and fs_cli
+   * libsndfile: fix autoconf 2.62 support (LBSNDF-5)
+   * mod commands: add "all" modifier to "break" command
+   * mod_celt: added new module
+   * mod_commands: Add support for more than 2 variables to uuid_setvar_multi (MODAPP-171)
+   * mod_commands: Add support for passing the cause of hangup to the uuid_kill command (FSCORE-217)
+   * mod_commands: add attr lookup to user_data
+   * mod_commands: add domain_exists fsapi command
+   * mod_commands: add eval fsapi command
+   * mod_commands: add flush_dtmf app and uuid_flush_dtmf api command
+   * mod_commands: add fsctl send_sighup, fsctl shutdown asap, unsched_api commands
+   * mod_commands: add fsctl shutdown [elegant|restart|cancel]
+   * mod_commands: add new syntax to uuid_setvar to allow you to unset a var. <uuid> <var> [value]   (MODAPP-167)
+   * mod_commands: add reload fsapi command to reload a module
+   * mod_commands: add system fsapi and application (MODAPP-138)
+   * mod_commands: added hupall fsapi command
+   * mod_commands: added strftime_tz api command
+   * mod_commands: break all now stops broadcast too
+   * mod_commands: fix api command sent through sched_api was getting the last char lopped off
+   * mod_commands: fix race on transfer with -both
+   * mod_commands: fix system dialplan app problems (MODAPP-86)
+   * mod_commands: only send content-type on status when it really is http.
+   * mod_conference: add fsapi to stop async playback too
+   * mod_conference: add video caps to mod_conference with video follow audio
+   * mod_conference: better sound prefix handling when using say: and allow say: on kick sounds.
+   * mod_conference: fix race in record
+   * mod_conference: fix runaway thread when floor holder has no video and other people do have video
+   * mod_conference: fix seg when kicking many members quickly (MODAPP-129)
+   * mod_conference: fix segfault on invalid chat event
+   * mod_conference: perpetual sound does not auto-mute, you can do that yourself if you want it 
+   * mod_dialplan_xml: add Hunt- vars in dialplan lookup after transfer
+   * mod_dialplan_xml: fail call on extensions with nested conditions
+   * mod_dingaling: (LBDING-7) fix segfault on os x
+   * mod_dingaling: end call on ice timeout
+   * mod_dingaling: fix presence on jabber to be less protocol ambiguous
+   * mod_dingaling: fix segfault (LBDING-10)
+   * mod_dingaling: update to support latest client from google
+   * mod_dptools: add a mechanism to tell if a file played from sendmsg over event socket
+   * mod_dptools: add playback_terminator support to phrase and say app
+   * mod_dptools: add playback_terminator_used variable (MODAPP-132)
+   * mod_dptools: add presence application
+   * mod_dptools: fix originate api not parsing users properly (FSCORE-246)
+   * mod_dptools: fix record and record_session to create directory if it does not exist (FSCORE-250)
+   * mod_dptools: fixed limit and + parsing bug in record_session app (MODAPP-148)
+   * mod_dptools: remove_bugs added to remove all media bugs on a session
+   * mod_erlang_event: add new module
+   * mod_event_socket:  missing : after Content-Length in event socket (MODEVENT-33)
+   * mod_event_socket: add event socket listener filters
+   * mod_event_socket: add stateful listener fsapi commands for ajax-y type event interface over http
+   * mod_event_socket: fix arg parsing errors (MODEVENT-34)
+   * mod_event_socket: fix shutdown segfault race (MODEVENT-32)
+   * mod_event_socket: inbound connection to event_socket can now take over an existing channel with 'myevents <uuid>' to take on the behaviour of an outbound socket
+   * mod_event_socket: let any channel get messages
+   * mod_event_socket: make event socket wait for hangup on outbound mode and send disconnect message
+   * mod_expr: fix endless loop
+   * mod_fax: new module
+   * mod_fifo: add fifo_consumer_wrapup_time var (MODAPP-117)
+   * mod_fifo: added callback agents
+   * mod_fifo: honor keyword silence (MODAPP-118)
+   * mod_flite: added windows build
+   * mod_fsv: fix in a windows enviroment opening the record file in text mode. (MODAPP-169)
+   * mod_http: added new module
+   * mod_java: updated to new module api to support read/write locks on interface
+   * mod_limit: accept dialplan context for transfer (MODAPP-161)
+   * mod_limit: added hashtable based limit functions
+   * mod_limit: prevent empty error log message (MODAPP-134)
+   * mod_local_stream: add start_local_stream and stop_local_stream fsapi commands to start/stop dynamically (MODFORM-13)
+   * mod_local_stream: fix leak and improve error checking
+   * mod_local_stream: fix seg when no timer name specified in config file. (MODFORM-16)
+   * mod_loopback: add new module
+   * mod_lua: add local scripts directory support (MODLANG-86)
+   * mod_lua: don't eval blank string
+   * mod_lua: fix originate
+   * mod_lua: fix segfault (MODLANG-77)
+   * mod_lua: update to lua 5.1.4 (MODLANG-87)
+   * mod_lumenvox: removed
+   * mod_managed: new module replaces mod_mono now supports native .net runtime on windows as well
+   * mod_opal: added to trunk (still very beta)
+   * mod_perl: fix segfault (MODLANG-77)
+   * mod_pocketsphinx: fix rpm build
+   * mod_portaudio: fix cpu race on inbound call to pa when no ring file is set
+   * mod_radius_cdr: dictionary update for cause code changes (MODEVENT-27)
+   * mod_radius_cdr: fix unload (MODEVENT-29)
+   * mod_shout: add stereo recording broadcast support
+   * mod_shout: added windows build
+   * mod_shout: fix segfault when recording mp3's (MODFORM-12)
+   * mod_shout: improved stability of mp3 decoding
+   * mod_siren: added new module
+   * mod_sndfile added support to record 16bit for the various rates including 48kHz
+   * mod_sofia: Add filter to "sofia status profile XXX" (MODENDP-138)
+   * mod_sofia: Add force-register-db-domain which works in conjunction with force-register-domain. 
+   * mod_sofia: Add optional <variables> and <params> tag to <gateway> tag.
+   * mod_sofia: Challenge the right realm when to_host is outside the users domain. (MODENDP-136)
+   * mod_sofia: Improve notify messages through a proxy (MODENDP-147)
+   * mod_sofia: MWI for multiple domains (MODAPP-126)
+   * mod_sofia: Move "a=sendrecv" from session to media section of SDP (MODENDP-148)
+   * mod_sofia: add 200 OK re-invite without sdp
+   * mod_sofia: add custom sofia::gateway_state event (MODENDP-112)
+   * mod_sofia: add fire events for the refer SIP NOTIFY event package (MODENDP-152)
+   * mod_sofia: add more params for xml_curl directory lookup
+   * mod_sofia: add new auto vals for challenge-realm param <param name="challenge-realm" value="auto_from|auto_to|<hardcoded_val>"/>
+   * mod_sofia: add option to turn of auto_restart of sofia profiles on ip change
+   * mod_sofia: add params to use sip callid as uuid on inbound calls and uuid as sip callid on outbound calls
+   * mod_sofia: add parsing of Privacy header for privacy info (MODENDP-133)
+   * mod_sofia: add proto_specific_hangup_cause to both legs
+   * mod_sofia: add proxy 3pcc mode
+   * mod_sofia: add redirect variable to channel as well as partner channe (MODENDP-135)
+   * mod_sofia: add sip-forbid-register to user params to refuse to let a certian user register
+   * mod_sofia: add sip: into register-proxy when it's not specified
+   * mod_sofia: add sip_history_info var for inbound invites.
+   * mod_sofia: add sip_via_protocol variable
+   * mod_sofia: add sofia xmlstatus (MODENDP-156)
+   * mod_sofia: add support for params other than Replaces in Refer-To (MODENDP-143)
+   * mod_sofia: add support for profiles sharing databases so that you can have a domain that uses multiple profiles for split dns type setups
+   * mod_sofia: add support for refer transfer involving multiple machines 
+   * mod_sofia: add support to send a notify in the invite dialog by specifying the uuid of the call. (SFSIP-92)
+   * mod_sofia: add suppress_from_cidname var to not have display name in from header (MODENDP-153)
+   * mod_sofia: added sip_hangup_disposition variable
+   * mod_sofia: allow send_message and notify events to send a message/notify without a body if needed.
+   * mod_sofia: append -1 .. -N postfix after any X-headers as vars that have the same name
+   * mod_sofia: cache auth_gateway_name in sofia for challenged bye
+   * mod_sofia: cancel proxy or no-media mode if you purposely answer or pre_answer
+   * mod_sofia: correct result code mapping for Unallocated Number (MODENDP-124)
+   * mod_sofia: disable 100rel by default
+   * mod_sofia: don't accept crypto in the RTP/AVP (MODENDP-126)
+   * mod_sofia: don't put CN in sdp answer if it was not in the offer.
+   * mod_sofia: fix Incorrect IP address shows up in SDP "o" field when multiple external IPs available and FS not bound to first (MODENDP-132)
+   * mod_sofia: fix Wrong RTP media port destination after reinvite/UNHOLD (SFSIP-82)
+   * mod_sofia: fix bug on linksys where they lie about the ptime and handle linksys transfer problem
+   * mod_sofia: fix chat (send an IM) assumes that the user's profile is the same as their domain, which isn't necessarily so (SFSIP-83)
+   * mod_sofia: fix dtmf handling of broken info dtmf endpoints
+   * mod_sofia: fix eyebeam presence to be RFC compliant (MODENDP-144)
+   * mod_sofia: fix ip change detection when in proxy mode
+   * mod_sofia: fix register_proxy ignoring the paramaters (MODENDP-121)
+   * mod_sofia: fix remote session refresh triggers request glare (MODENDP-131)
+   * mod_sofia: fix rtp auto adjust running when it should not
+   * mod_sofia: fix rtp sent to wrong port after some re-INVITE scenarios (MODENDP-141)
+   * mod_sofia: fix sending of cn packets across bridge when we shouldn't
+   * mod_sofia: fix sqlite issue with select of the sip contact
+   * mod_sofia: fixed segfault on invalid presence payload
+   * mod_sofia: gateway ping needs to look for 501 (SFSIP-78)
+   * mod_sofia: handle multi contact register responses and register timeout better
+   * mod_sofia: improve gateway resilience
+   * mod_sofia: log ip and port you get reply to invite from
+   * mod_sofia: make multiple-registations=true use the contact method and call-id option to do it the old way
+   * mod_sofia: make proxy mode pull the port from m=image as well
+   * mod_sofia: make register-proxy preserve the url composed from proxy but target the packets to desired address (MODENDP-121)
+   * mod_sofia: many fixes for sonus rtp issues silence_when_idle=400 chanvar to send generated silence duing sleeps etc
+   * mod_sofia: many fixes in presence handling
+   * mod_sofia: passthrough t.38 fixes
+   * mod_sofia: pick ipv4 or ipv6 based on sipip instead of having mixed in sdp
+   * mod_sofia: send NOTIFY on TCP/UDP depending on the SUBSCRIBE (SFSIP-104)
+   * mod_sofia: setting profile option multiple-registrations=contact key multi reg off the contact string
+   * mod_sofia: wait for a reply on refer
+   * mod_soundtouch: fixes and improvements, many options changed (MODAPP-149)
+   * mod_soundtouch: updated to new module api
+   * mod_spidermonkey: Segmentation fault in check_hangup_hook at mod_spidermonkey.c:1589 (MODLANG-74)
+   * mod_spidermonkey: fix bug in apiExecute
+   * mod_spidermonkey: fix memory pool handling and leaks
+   * mod_spidermonkey: limit recursion busting through the stack (FSCORE-202)
+   * mod_spidermonkey: make session.getVariable return blank string not the word false 
+   * mod_spidermonkey_curl: add optional content-type arg
+   * mod_spidermonkey_odbc: fix numRows and add numCols
+   * mod_spidermonkey_odbc: fix segfault (MODLANG-75)
+   * mod_stress: new module for voice stress analysis
+   * mod_syslog: don't log blank lines (FSCORE-163)
+   * mod_tone_stream: let silence_stream://0 indicate perpetual silence
+   * mod_vmd: add new module to detect voicemail "beep"
+   * mod_voicemail: Add vm_alternate_greet_id param to directory entry (MODAPP-174)
+   * mod_voicemail: Patch to add voicemail preference controlling date announcement new param 'play-date-announcement' to values 'first' 'last' or 'never'  defaults to first to retain previous behavior (MODAPP-121)
+   * mod_voicemail: Update mwi light after delete vm via web. (MODAPP-124)
+   * mod_voicemail: add ability to get to options without listening to every saved message (MODAPP-115)
+   * mod_voicemail: add ability to skip greeting when leaving a voicemail. (MODAPP-181)
+   * mod_voicemail: add change-pass-key config file option
+   * mod_voicemail: add forwarding support
+   * mod_voicemail: add local dtmf driven alternat vm pass
+   * mod_voicemail: add proper notification of a vm message being too short
+   * mod_voicemail: add support for auth via a1-hash
+   * mod_voicemail: add the "storage-dir" parameter to be set on a per-user basis (MODAPP-133)
+   * mod_voicemail: add voicemail_greeting_path variable
+   * mod_voicemail: added voicemail_alternate_greet_id variable
+   * mod_voicemail: allow changing of password from voicemail to update user directory if using non-static config (MODAPP-156)
+   * mod_voicemail: created email date (int overflow)  (MODAPP-125)
+   * mod_voicemail: don't try to deliver vm when no file was recorded. (MODAPP-133)
+   * mod_voicemail: fix MWI with xml_curl used for directory (MODAPP-176)
+   * mod_voicemail: fix Voicemail messages occasionally lost / stranded (MODAPP-178)
+   * mod_voicemail: fix invalid event after message deleted (MODAPP-170)
+   * mod_voicemail: fix mwi for phones with multiple registrations problem (MODAPP-153)
+   * mod_voicemail: fix voicemail segfault on incorrect password (FSCORE-187)
+   * mod_voicemail: fix voicemail_inject error handling (MODAPP-133)
+   * mod_voicemail: fix voicemail_inject usage api call
+   * mod_voicemail: improve error checking (MODAPP-142)
+   * mod_voicemail: localize notification emails (MODAPP-139)
+   * mod_voicemail: make more multi-domain friendly (MODAPP-162)
+   * mod_voicemail: make playback created file macros optional (MODAPP-150)
+   * mod_voicemail: recognize operator key in more places (MODAPP-159)
+   * mod_voicemail: web interface displays incorrect created / last heard dates (MODAPP-123)
+   * mod_wanpipe: removed
+   * mod_xml_cdr: add https support
+   * mod_xml_cdr: add optional a-leg prefix to xml cdr filenames (MDXMLINT-39)
+   * mod_xml_cdr: add support for fallback webserver for cdr posting (FSCORE-238)
+   * mod_xml_curl: Allow specification of HTTP method, and dynamic expansion of variables in URI. (MDXMLINT-41)
+   * mod_xml_curl: added redirect following (max 10)
+   * mod_xml_ldap: almost a complete rewrite of this module
+   * mod_xml_rpc: allow setting of global realm without a global user (MDXMLINT-45)
+   * mod_xml_rpc: fix multiple segfaults
+   * mod_xml_rpc: fix segfault on originate via http
+   * sofia-sip: updated to 1.12.10 (plus a few patches)
+
+ -- Mike Jerris <mike at jerris.com>  Mon, 29 Dec 2008 14:46:00 -0500
+
 freeswitch (1.0.1-1) unstable; urgency=low
 
    * FIX: prevent intercept race condition that can also be solved with continue_on_fail=originator_cancel
@@ -295,7 +588,7 @@
      Fixed mod_iax race conditions
      Fixed ptime negotiation issues when re-packetizing
      Added ip based acl lists
-	
+   * 
  -- Michael Jerris <mike at jerris.com>  Wed, 9 Apr 2008 12:58:22 -0400
     
 freeswitch (1.0~rc1-1) unstable; urgency=low

Modified: freeswitch/branches/gmaruzz/debian/freeswitch.install
==============================================================================
--- freeswitch/branches/gmaruzz/debian/freeswitch.install	(original)
+++ freeswitch/branches/gmaruzz/debian/freeswitch.install	Wed Jan  7 10:17:00 2009
@@ -1,5 +1,6 @@
 opt/freeswitch/htdocs/*
 opt/freeswitch/bin/freeswitch
+opt/freeswitch/bin/fs_cli
 opt/freeswitch/bin/scripts/*
 opt/freeswitch/lib/libfreeswitch*.so*
 opt/freeswitch/lib/libopenzap*.so*

Modified: freeswitch/branches/gmaruzz/docs/ChangeLog
==============================================================================
--- freeswitch/branches/gmaruzz/docs/ChangeLog	(original)
+++ freeswitch/branches/gmaruzz/docs/ChangeLog	Wed Jan  7 10:17:00 2009
@@ -1,3 +1,294 @@
+freeswitch (1.0.2)
+
+	all: don't add module interfaces before returning from error conditions in module load functions (MDXMLINT-36)
+	all: fixed multiple memory leaks
+	all: improved module unloading/reloading support
+	build: add support for --switchconfdir (FSBUILD-84)
+	build: fixed netbsd build
+	build: make freeswitch stop graceflly with /etc/init.d/freeswitch stop on debian add working dir to start-stop-dir so freeswitch dumps core in workdir
+	build: multiple packaging fixes
+	build: user freeswitch not added to audio group on deb install (FSBUILD-95)
+	Configuration: many updates to default configuration
+	core: Add ability to choose uuid from originate string, originate_uuid var (use at your own risk) 
+	core: add bridge_generate_comfort_noise option for bridge to generate comfort noise to the A leg when there is no audio on the B leg
+	core: add chan vars to param event during hangup hook
+	core: add exec directive to xml preprocessor (not available on windows)
+	core: add force_transfer_dialplan and force_transfer_context variables
+	core: add hashing to event header lookup 
+	core: add hits to tone_detect
+	core: add last_dtmf_duration variable
+	core: add msleep function to swigged languages
+	core: add park_after_bridge variable
+	core: add per leg timeouts and specific cause codes in reject_on_single_fail
+	core: add runtime selection of the module dir (FSCORE-198)
+	core: add scheduler support for heartbeat
+	core: add session heartbeat feature
+	core: add session.destroy psuedo method to sort of destroy a session at least for the sake of FS
+	core: add session.unsetInputCallback
+	core: add strftime format string validation for user supplied values
+	core: add vars param to switch_ivr_originate for recursion (MODAPP-175)
+	core: added a "group" concept to the user directory
+	core: added ability to do dns lookup to find ip with host: like stun: (FSCORE-219)
+	core: added better locking for codec changes during a call
+	core: added current_application and current_application_data variables
+	core: added error/ magic endpoint so modules can return error causes in situations like sofia_contact
+	core: added read_result channel variable
+	core: added support for "F" to indicate flash in dtmf (FSCORE-213)
+	core: allow calls to be stolen from originate
+	core: allow you to get the privacy bits in the caller_profile
+	core: change dso code to load symbols local
+	core: changes core flags to be array based so we have more
+	core: eavesdrop causes the people being eavesdropped on to not hear ach other (MODAPP-140)
+	core: expose time table to variable interface via caller field lookup 
+	core: fix 100% cpu when sending parked call to moh (FSCORE-234)
+	core: fix bridge app to make sure both channels are ready for media when one is only in ringing state
+	core: fix buffer overflow (FSCORE-188)
+	core: fix conference dial by allowing multiple braces in originate, fix bad pointer op (FSCORE-208)
+	core: fix double detection of DTMF in IVR (FSCORE-221)
+	core: fix hangup_after_bridge is false on a bridge started with the intercept app
+	core: fix issue where pid file is accidentally truncated
+	core: fix ivr timeout (FSCORE-181)
+	core: fix memory leak in alias tab completion code
+	core: fix min digits in read app
+	core: fix out-of-bounds pointer in variable expansion (FSCORE-171)
+	core: fix segfault in media bugs when in bypass media (FSCORE-193)
+	core: fix segfault on gtalk to sip calls (FSCORE-212)
+	core: fix segfault on reloadxml (FSCORE-176)
+	core: fix segfault on trasfering eavesdopping party (FSCORE-210)
+	core: fix segfault using switch_system function (FSCORE-196)
+	core: fix session.bridge
+	core: fix setting effective_caller_id_name / effective_caller_id_number on bridge dialstring (MODAPP-122)
+	core: fix stream_raw_write (MODAPP-145)
+	core: fix using resampling on ringback file
+	core: fixed performance bottleneck in sqlite db's
+	core: fixed race in reloadxml
+	core: increment app before execute in case it returns to execute it will go to the next item in the list and not the same
+	core: ivr menu max_failures and max_timeouts now default to 3 if not specified or invalid (less than 1) values are specified (FSCORE-244)
+	core: ivr_menu max-timeouts option, result in ivr_menu_status var (FSCORE-183)
+	core: let b legs use park_after_bridge too
+	core: make events less verbose unless verbose_events is set
+	core: parse private events during originate
+	core: pass pdd data to a leg on oubound calls using bridge
+	core: prevent crash in crazy situation with xml interface lookup failures (FSCORE-169)
+	core: reduce cpu requirement for generated comfort noise
+	core: remove interface names from core db on unload
+	core: reworked timing resulting in significant performance increase and better rtp timing
+	core: rewrite switch_play_and_get_digits (MODAPP-166)
+	core: session.recordFile never terminates (MODLANG-79)
+	core: session.transfer make dialplan and context optional
+	core: set_user app now sets domain vars as well as user vars
+	core: tone_detect not triggering app after tone detection (MODAPP-182)
+	core: unprivileged user setting bigger stack for switch_system thread failure (FSCORE-197)
+	core: user_exists returns false when fetching a user from XML Curl or other xml interfaces
+	libesl: added c event socket library and fs_cli
+	libsndfile: fix autoconf 2.62 support (LBSNDF-5)
+	mod commands: add "all" modifier to "break" command
+	mod_celt: added new module
+	mod_commands: Add support for more than 2 variables to uuid_setvar_multi (MODAPP-171)
+	mod_commands: Add support for passing the cause of hangup to the uuid_kill command (FSCORE-217)
+	mod_commands: add attr lookup to user_data
+	mod_commands: add domain_exists fsapi command
+	mod_commands: add eval fsapi command
+	mod_commands: add flush_dtmf app and uuid_flush_dtmf api command
+	mod_commands: add fsctl send_sighup, fsctl shutdown asap, unsched_api commands
+	mod_commands: add fsctl shutdown [elegant|restart|cancel]
+	mod_commands: add new syntax to uuid_setvar to allow you to unset a var. <uuid> <var> [value]   (MODAPP-167)
+	mod_commands: add reload fsapi command to reload a module
+	mod_commands: add system fsapi and application (MODAPP-138)
+	mod_commands: added hupall fsapi command
+	mod_commands: added strftime_tz api command
+	mod_commands: break all now stops broadcast too
+	mod_commands: fix api command sent through sched_api was getting the last char lopped off
+	mod_commands: fix race on transfer with -both
+	mod_commands: fix system dialplan app problems (MODAPP-86)
+	mod_commands: only send content-type on status when it really is http.
+	mod_conference: add fsapi to stop async playback too
+	mod_conference: add video caps to mod_conference with video follow audio
+	mod_conference: better sound prefix handling when using say: and allow say: on kick sounds.
+	mod_conference: fix race in record
+	mod_conference: fix runaway thread when floor holder has no video and other people do have video
+	mod_conference: fix seg when kicking many members quickly (MODAPP-129)
+	mod_conference: fix segfault on invalid chat event
+	mod_conference: perpetual sound does not auto-mute, you can do that yourself if you want it 
+	mod_dialplan_xml: add Hunt- vars in dialplan lookup after transfer
+	mod_dialplan_xml: fail call on extensions with nested conditions
+	mod_dingaling: (LBDING-7) fix segfault on os x
+	mod_dingaling: end call on ice timeout
+	mod_dingaling: fix presence on jabber to be less protocol ambiguous
+	mod_dingaling: fix segfault (LBDING-10)
+	mod_dingaling: update to support latest client from google
+	mod_dptools: add a mechanism to tell if a file played from sendmsg over event socket
+	mod_dptools: add playback_terminator support to phrase and say app
+	mod_dptools: add playback_terminator_used variable (MODAPP-132)
+	mod_dptools: add presence application
+	mod_dptools: fix originate api not parsing users properly (FSCORE-246)
+	mod_dptools: fix record and record_session to create directory if it does not exist (FSCORE-250)
+	mod_dptools: fixed limit and + parsing bug in record_session app (MODAPP-148)
+	mod_dptools: remove_bugs added to remove all media bugs on a session
+	mod_erlang_event: add new module
+	mod_event_socket:  missing : after Content-Length in event socket (MODEVENT-33)
+	mod_event_socket: add event socket listener filters
+	mod_event_socket: add stateful listener fsapi commands for ajax-y type event interface over http
+	mod_event_socket: fix arg parsing errors (MODEVENT-34)
+	mod_event_socket: fix shutdown segfault race (MODEVENT-32)
+	mod_event_socket: inbound connection to event_socket can now take over an existing channel with 'myevents <uuid>' to take on the behaviour of an outbound socket
+	mod_event_socket: let any channel get messages
+	mod_event_socket: make event socket wait for hangup on outbound mode and send disconnect message
+	mod_expr: fix endless loop
+	mod_fax: new module
+	mod_fifo: add fifo_consumer_wrapup_time var (MODAPP-117)
+	mod_fifo: added callback agents
+	mod_fifo: honor keyword silence (MODAPP-118)
+	mod_flite: added windows build
+	mod_fsv: fix in a windows enviroment opening the record file in text mode. (MODAPP-169)
+	mod_http: added new module
+	mod_java: updated to new module api to support read/write locks on interface
+	mod_limit: accept dialplan context for transfer (MODAPP-161)
+	mod_limit: added hashtable based limit functions
+	mod_limit: prevent empty error log message (MODAPP-134)
+	mod_local_stream: add start_local_stream and stop_local_stream fsapi commands to start/stop dynamically (MODFORM-13)
+	mod_local_stream: fix leak and improve error checking
+	mod_local_stream: fix seg when no timer name specified in config file. (MODFORM-16)
+	mod_loopback: add new module
+	mod_lua: add local scripts directory support (MODLANG-86)
+	mod_lua: don't eval blank string
+	mod_lua: fix originate
+	mod_lua: fix segfault (MODLANG-77)
+	mod_lua: update to lua 5.1.4 (MODLANG-87)
+	mod_lumenvox: removed
+	mod_managed: new module replaces mod_mono now supports native .net runtime on windows as well
+	mod_opal: added to trunk (still very beta)
+	mod_perl: fix segfault (MODLANG-77)
+	mod_pocketsphinx: fix rpm build
+	mod_portaudio: fix cpu race on inbound call to pa when no ring file is set
+	mod_radius_cdr: dictionary update for cause code changes (MODEVENT-27)
+	mod_radius_cdr: fix unload (MODEVENT-29)
+	mod_shout: add stereo recording broadcast support
+	mod_shout: added windows build
+	mod_shout: fix segfault when recording mp3's (MODFORM-12)
+	mod_shout: improved stability of mp3 decoding
+	mod_siren: added new module
+	mod_sndfile added support to record 16bit for the various rates including 48kHz
+	mod_sofia: Add filter to "sofia status profile XXX" (MODENDP-138)
+	mod_sofia: Add force-register-db-domain which works in conjunction with force-register-domain. 
+	mod_sofia: Add optional <variables> and <params> tag to <gateway> tag.
+	mod_sofia: Challenge the right realm when to_host is outside the users domain. (MODENDP-136)
+	mod_sofia: Improve notify messages through a proxy (MODENDP-147)
+	mod_sofia: MWI for multiple domains (MODAPP-126)
+	mod_sofia: Move "a=sendrecv" from session to media section of SDP (MODENDP-148)
+	mod_sofia: add 200 OK re-invite without sdp
+	mod_sofia: add custom sofia::gateway_state event (MODENDP-112)
+	mod_sofia: add fire events for the refer SIP NOTIFY event package (MODENDP-152)
+	mod_sofia: add more params for xml_curl directory lookup
+	mod_sofia: add new auto vals for challenge-realm param <param name="challenge-realm" value="auto_from|auto_to|<hardcoded_val>"/>
+	mod_sofia: add option to turn of auto_restart of sofia profiles on ip change
+	mod_sofia: add params to use sip callid as uuid on inbound calls and uuid as sip callid on outbound calls
+	mod_sofia: add parsing of Privacy header for privacy info (MODENDP-133)
+	mod_sofia: add proto_specific_hangup_cause to both legs
+	mod_sofia: add proxy 3pcc mode
+	mod_sofia: add redirect variable to channel as well as partner channe (MODENDP-135)
+	mod_sofia: add sip-forbid-register to user params to refuse to let a certian user register
+	mod_sofia: add sip: into register-proxy when it's not specified
+	mod_sofia: add sip_history_info var for inbound invites.
+	mod_sofia: add sip_via_protocol variable
+	mod_sofia: add sofia xmlstatus (MODENDP-156)
+	mod_sofia: add support for params other than Replaces in Refer-To (MODENDP-143)
+	mod_sofia: add support for profiles sharing databases so that you can have a domain that uses multiple profiles for split dns type setups
+	mod_sofia: add support for refer transfer involving multiple machines 
+	mod_sofia: add support to send a notify in the invite dialog by specifying the uuid of the call. (SFSIP-92)
+	mod_sofia: add suppress_from_cidname var to not have display name in from header (MODENDP-153)
+	mod_sofia: added sip_hangup_disposition variable
+	mod_sofia: allow send_message and notify events to send a message/notify without a body if needed.
+	mod_sofia: append -1 .. -N postfix after any X-headers as vars that have the same name
+	mod_sofia: cache auth_gateway_name in sofia for challenged bye
+	mod_sofia: cancel proxy or no-media mode if you purposely answer or pre_answer
+	mod_sofia: correct result code mapping for Unallocated Number (MODENDP-124)
+	mod_sofia: disable 100rel by default
+	mod_sofia: don't accept crypto in the RTP/AVP (MODENDP-126)
+	mod_sofia: don't put CN in sdp answer if it was not in the offer.
+	mod_sofia: fix Incorrect IP address shows up in SDP "o" field when multiple external IPs available and FS not bound to first (MODENDP-132)
+	mod_sofia: fix Wrong RTP media port destination after reinvite/UNHOLD (SFSIP-82)
+	mod_sofia: fix bug on linksys where they lie about the ptime and handle linksys transfer problem
+	mod_sofia: fix chat (send an IM) assumes that the user's profile is the same as their domain, which isn't necessarily so (SFSIP-83)
+	mod_sofia: fix dtmf handling of broken info dtmf endpoints
+	mod_sofia: fix eyebeam presence to be RFC compliant (MODENDP-144)
+	mod_sofia: fix ip change detection when in proxy mode
+	mod_sofia: fix register_proxy ignoring the paramaters (MODENDP-121)
+	mod_sofia: fix remote session refresh triggers request glare (MODENDP-131)
+	mod_sofia: fix rtp auto adjust running when it should not
+	mod_sofia: fix rtp sent to wrong port after some re-INVITE scenarios (MODENDP-141)
+	mod_sofia: fix sending of cn packets across bridge when we shouldn't
+	mod_sofia: fix sqlite issue with select of the sip contact
+	mod_sofia: fixed segfault on invalid presence payload
+	mod_sofia: gateway ping needs to look for 501 (SFSIP-78)
+	mod_sofia: handle multi contact register responses and register timeout better
+	mod_sofia: improve gateway resilience
+	mod_sofia: log ip and port you get reply to invite from
+	mod_sofia: make multiple-registations=true use the contact method and call-id option to do it the old way
+	mod_sofia: make proxy mode pull the port from m=image as well
+	mod_sofia: make register-proxy preserve the url composed from proxy but target the packets to desired address (MODENDP-121)
+	mod_sofia: many fixes for sonus rtp issues silence_when_idle=400 chanvar to send generated silence duing sleeps etc
+	mod_sofia: many fixes in presence handling
+	mod_sofia: passthrough t.38 fixes
+	mod_sofia: pick ipv4 or ipv6 based on sipip instead of having mixed in sdp
+	mod_sofia: send NOTIFY on TCP/UDP depending on the SUBSCRIBE (SFSIP-104)
+	mod_sofia: setting profile option multiple-registrations=contact key multi reg off the contact string
+	mod_sofia: wait for a reply on refer
+	mod_soundtouch: fixes and improvements, many options changed (MODAPP-149)
+	mod_soundtouch: updated to new module api
+	mod_spidermonkey: Segmentation fault in check_hangup_hook at mod_spidermonkey.c:1589 (MODLANG-74)
+	mod_spidermonkey: fix bug in apiExecute
+	mod_spidermonkey: fix memory pool handling and leaks
+	mod_spidermonkey: limit recursion busting through the stack (FSCORE-202)
+	mod_spidermonkey: make session.getVariable return blank string not the word false 
+	mod_spidermonkey_curl: add optional content-type arg
+	mod_spidermonkey_odbc: fix numRows and add numCols
+	mod_spidermonkey_odbc: fix segfault (MODLANG-75)
+	mod_stress: new module for voice stress analysis
+	mod_syslog: don't log blank lines (FSCORE-163)
+	mod_tone_stream: let silence_stream://0 indicate perpetual silence
+	mod_vmd: add new module to detect voicemail "beep"
+	mod_voicemail: Add vm_alternate_greet_id param to directory entry (MODAPP-174)
+	mod_voicemail: Patch to add voicemail preference controlling date announcement new param 'play-date-announcement' to values 'first' 'last' or 'never'  defaults to first to retain previous behavior (MODAPP-121)
+	mod_voicemail: Update mwi light after delete vm via web. (MODAPP-124)
+	mod_voicemail: add ability to get to options without listening to every saved message (MODAPP-115)
+	mod_voicemail: add ability to skip greeting when leaving a voicemail. (MODAPP-181)
+	mod_voicemail: add change-pass-key config file option
+	mod_voicemail: add forwarding support
+	mod_voicemail: add local dtmf driven alternat vm pass
+	mod_voicemail: add proper notification of a vm message being too short
+	mod_voicemail: add support for auth via a1-hash
+	mod_voicemail: add the "storage-dir" parameter to be set on a per-user basis (MODAPP-133)
+	mod_voicemail: add voicemail_greeting_path variable
+	mod_voicemail: added voicemail_alternate_greet_id variable
+	mod_voicemail: allow changing of password from voicemail to update user directory if using non-static config (MODAPP-156)
+	mod_voicemail: created email date (int overflow)  (MODAPP-125)
+	mod_voicemail: don't try to deliver vm when no file was recorded. (MODAPP-133)
+	mod_voicemail: fix MWI with xml_curl used for directory (MODAPP-176)
+	mod_voicemail: fix Voicemail messages occasionally lost / stranded (MODAPP-178)
+	mod_voicemail: fix invalid event after message deleted (MODAPP-170)
+	mod_voicemail: fix mwi for phones with multiple registrations problem (MODAPP-153)
+	mod_voicemail: fix voicemail segfault on incorrect password (FSCORE-187)
+	mod_voicemail: fix voicemail_inject error handling (MODAPP-133)
+	mod_voicemail: fix voicemail_inject usage api call
+	mod_voicemail: improve error checking (MODAPP-142)
+	mod_voicemail: localize notification emails (MODAPP-139)
+	mod_voicemail: make more multi-domain friendly (MODAPP-162)
+	mod_voicemail: make playback created file macros optional (MODAPP-150)
+	mod_voicemail: recognize operator key in more places (MODAPP-159)
+	mod_voicemail: web interface displays incorrect created / last heard dates (MODAPP-123)
+	mod_wanpipe: removed
+	mod_xml_cdr: add https support
+	mod_xml_cdr: add optional a-leg prefix to xml cdr filenames (MDXMLINT-39)
+	mod_xml_cdr: add support for fallback webserver for cdr posting (FSCORE-238)
+	mod_xml_curl: Allow specification of HTTP method, and dynamic expansion of variables in URI. (MDXMLINT-41)
+	mod_xml_curl: added redirect following (max 10)
+	mod_xml_ldap: almost a complete rewrite of this module
+	mod_xml_rpc: allow setting of global realm without a global user (MDXMLINT-45)
+	mod_xml_rpc: fix multiple segfaults
+	mod_xml_rpc: fix segfault on originate via http
+	sofia-sip: updated to 1.12.10 (plus a few patches)
+
 freeswitch (1.0.1)
 
 	FIX: prevent intercept race condition that can also be solved with continue_on_fail=originator_cancel

Modified: freeswitch/branches/gmaruzz/docs/Doxygen.conf
==============================================================================
--- freeswitch/branches/gmaruzz/docs/Doxygen.conf	(original)
+++ freeswitch/branches/gmaruzz/docs/Doxygen.conf	Wed Jan  7 10:17:00 2009
@@ -4,7 +4,7 @@
 # Project related configuration options
 #---------------------------------------------------------------------------
 PROJECT_NAME           = FreeSWITCH
-PROJECT_NUMBER         = 1.0.1
+PROJECT_NUMBER         = 1.0.2
 OUTPUT_DIRECTORY       = .
 CREATE_SUBDIRS         = NO
 OUTPUT_LANGUAGE        = English

Modified: freeswitch/branches/gmaruzz/libs/esl/Makefile
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/Makefile	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/Makefile	Wed Jan  7 10:17:00 2009
@@ -1,11 +1,10 @@
-PWD=$(shell pwd)
-INCS=-I$(PWD)/src/include
+INCS=-Isrc/include
 LIBEDIT_DIR=../../libs/libedit
 DEBUG=-g -ggdb
 PICKY=-O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
-CFLAGS=$(INCS) -D_GNU_SOURCE $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY)
+CFLAGS=$(INCS) -DHAVE_EDITLINE $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY)
 MYLIB=libesl.a
-LIBS=-lesl -lncurses -lpthread
+LIBS=-lncurses -lpthread -lesl
 LDFLAGS=-L.
 OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o src/esl_config.o
 SRC=src/esl.c src/esl_event.c src/esl_threadmutex.c src/esl_config.c

Modified: freeswitch/branches/gmaruzz/libs/esl/fs_cli.2008.vcproj
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/fs_cli.2008.vcproj	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/fs_cli.2008.vcproj	Wed Jan  7 10:17:00 2009
@@ -21,7 +21,6 @@
 			OutputDirectory="$(ConfigurationName)"
 			IntermediateDirectory="$(ConfigurationName)"
 			ConfigurationType="1"
-			InheritedPropertySheets="..\..\w32\winlibs.vsprops"
 			CharacterSet="2"
 			BuildLogFile="$(IntDir)\BuildLog $(ProjectName).htm"
 			>
@@ -43,8 +42,8 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="&quot;$(InputDir)\src\include&quot;"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS"
+				AdditionalIncludeDirectories="&quot;$(ProjectDir)getopt&quot;;&quot;$(ProjectDir)src/include&quot;"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ESL_DECLARE_STATIC"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -66,6 +65,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="Ws2_32.lib"
 				OutputFile="$(SolutionDir)$(ConfigurationName)/fs_cli.exe"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(OutDir)"
@@ -103,7 +103,6 @@
 			OutputDirectory="$(ConfigurationName)"
 			IntermediateDirectory="$(ConfigurationName)"
 			ConfigurationType="1"
-			InheritedPropertySheets="..\..\w32\winlibs.vsprops"
 			CharacterSet="2"
 			BuildLogFile="$(IntDir)\BuildLog $(ProjectName).htm"
 			>
@@ -124,8 +123,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="&quot;$(InputDir)\src\include&quot;"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS"
+				AdditionalIncludeDirectories="&quot;$(ProjectDir)getopt&quot;;&quot;$(ProjectDir)src/include&quot;"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ESL_DECLARE_STATIC"
 				RuntimeLibrary="2"
 				UsePrecompiledHeader="0"
 				WarningLevel="4"
@@ -144,6 +143,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="Ws2_32.lib"
 				OutputFile="$(SolutionDir)$(ConfigurationName)/fs_cli.exe"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(OutDir)"
@@ -191,6 +191,10 @@
 				RelativePath="fs_cli.c"
 				>
 			</File>
+			<File
+				RelativePath=".\getopt\getopt_long.c"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="Header Files"
@@ -198,51 +202,7 @@
 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
 			>
 			<File
-				RelativePath="..\..\src\include\switch.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_buffer.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_caller.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_channel.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_config.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_console.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_core.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_frame.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_loadable_module.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_module_interfaces.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_types.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\include\switch_utils.h"
+				RelativePath=".\getopt\getopt.h"
 				>
 			</File>
 		</Filter>

Modified: freeswitch/branches/gmaruzz/libs/esl/fs_cli.c
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/fs_cli.c	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/fs_cli.c	Wed Jan  7 10:17:00 2009
@@ -1,3 +1,7 @@
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 600
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <esl.h>
@@ -6,14 +10,45 @@
 #ifdef WIN32
 #define strdup(src) _strdup(src)
 #define usleep(time) Sleep(time/1000)
+#define fileno _fileno
+#define read _read
+#include <io.h>
 #else
 #include <sys/select.h>
+#include <unistd.h>
+#endif
+
+#include <getopt.h>
+
+#ifdef HAVE_EDITLINE
 #include <histedit.h>
-#define HAVE_EDITLINE
 #endif
 
 static char prompt_str[512] = "";
-static char hostname[512] = "";
+
+typedef struct {
+	char name[128];
+	char host[128];
+	esl_port_t port;
+	char pass[128];
+	int debug;
+	const char *console_fnkeys[12];
+	char loglevel[128];
+	int quiet;
+} cli_profile_t;
+
+static cli_profile_t profiles[128] = {{{0}}};
+static cli_profile_t internal_profile = {{ 0 }};
+static int pcount = 0;
+
+static esl_handle_t *global_handle;
+static cli_profile_t *global_profile;
+
+static int process_command(esl_handle_t *handle, const char *cmd);
+
+static int running = 1;
+static int thread_running = 0;
+
 
 #ifdef HAVE_EDITLINE
 static char *prompt(EditLine * e)
@@ -24,10 +59,86 @@
 static EditLine *el;
 static History *myhistory;
 static HistEvent ev;
-#endif
 
-static int running = 1;
-static int thread_running = 0;
+
+
+/*
+ * If a fnkey is configured then process the command
+ */
+static unsigned char console_fnkey_pressed(int i)
+{
+	const char *c;
+
+	assert((i > 0) && (i <= 12));
+
+	c = global_profile->console_fnkeys[i - 1];
+
+	/* This new line is necessary to avoid output to begin after the ">" of the CLI's prompt */
+	printf("%s\n", c);
+	printf("\n");
+	
+	if (c == NULL) {
+		esl_log(ESL_LOG_ERROR, "FUNCTION KEY F%d IS NOT BOUND, please edit your config.\n", i);
+		return CC_REDISPLAY;
+	}
+
+	if (process_command(global_handle, c)) {
+		running = thread_running = 0;
+	}
+
+	return CC_REDISPLAY;
+}
+
+static unsigned char console_f1key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(1);
+}
+static unsigned char console_f2key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(2);
+}
+static unsigned char console_f3key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(3);
+}
+static unsigned char console_f4key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(4);
+}
+static unsigned char console_f5key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(5);
+}
+static unsigned char console_f6key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(6);
+}
+static unsigned char console_f7key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(7);
+}
+static unsigned char console_f8key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(8);
+}
+static unsigned char console_f9key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(9);
+}
+static unsigned char console_f10key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(10);
+}
+static unsigned char console_f11key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(11);
+}
+static unsigned char console_f12key(EditLine * el, int ch)
+{
+	return console_fnkey_pressed(12);
+}
+
+#endif
 
 static void handle_SIGINT(int sig)
 {
@@ -35,9 +146,31 @@
 	return;
 }
 
-static const char* COLORS[] = { ESL_SEQ_DEFAULT_COLOR, ESL_SEQ_FRED, ESL_SEQ_FRED, 
-								ESL_SEQ_FRED, ESL_SEQ_FMAGEN, ESL_SEQ_FCYAN, ESL_SEQ_FGREEN, ESL_SEQ_FYELLOW };
 
+#ifdef WIN32
+static HANDLE hStdout;
+static WORD wOldColorAttrs;
+static CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
+
+static WORD 
+#else
+static const char*
+#endif
+COLORS[] = { ESL_SEQ_DEFAULT_COLOR, ESL_SEQ_FRED, ESL_SEQ_FRED, 
+			ESL_SEQ_FRED, ESL_SEQ_FMAGEN, ESL_SEQ_FCYAN, ESL_SEQ_FGREEN, ESL_SEQ_FYELLOW };
+
+static int usage(char *name){
+	printf("Usage: %s [-H <host>] [-P <port>] [-p <secret>] [-d <level>] [-x command] [profile]\n\n", name);
+	printf("  -?,-h --help                    Usage Information\n");
+	printf("  -H, --host=hostname             Host to connect\n");
+	printf("  -P, --port=port                 Port to connect (1 - 65535)\n");
+	printf("  -p, --password=FILENAME         Password\n");
+	printf("  -x, --execute=command           Execute Command and Exit\n");
+	printf("  -l, --loglevel=command          Log Level\n");
+	printf("  -q, --quiet			          Disable logging\n");
+	printf("  -d, --debug=level               Debug Level (0 - 7)\n\n");
+	return 1;
+}
 
 static void *msg_thread_run(esl_thread_t *me, void *obj)
 {
@@ -59,26 +192,37 @@
 
 				if (!esl_strlen_zero(type)) {
 					if (!strcasecmp(type, "log/data")) {
-						int level = 0, tchannel = 0;
+						int level = 0;
 						const char *lname = esl_event_get_header(handle->last_event, "log-level");
-						const char *channel = esl_event_get_header(handle->last_event, "text-channel");
-						const char *file = esl_event_get_header(handle->last_event, "log-file");
-					
-						if (channel) {
-							tchannel = atoi(channel);
-						}
-
+#ifdef WIN32
+						DWORD len = (DWORD) strlen(handle->last_event->body);
+						DWORD outbytes = 0;
+#endif			
 						if (lname) {
 							level = atoi(lname);
 						}
-
-						if (tchannel == 0 || (file && !strcmp(file, "switch_console.c"))) {
-							printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR);
-						}
+						
+						
+#ifdef WIN32
+						
+						SetConsoleTextAttribute(hStdout, COLORS[level]);
+						WriteFile(hStdout, handle->last_event->body, len, &outbytes, NULL);
+						SetConsoleTextAttribute(hStdout, wOldColorAttrs);
+#else
+						printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR);
+#endif
+							
 						known++;
 					} else if (!strcasecmp(type, "text/disconnect-notice")) {
 						running = thread_running = 0;
 						known++;
+					} else if (!strcasecmp(type, "text/event-plain")) {
+						char *foo;
+						esl_event_serialize(handle->last_ievent, &foo, ESL_FALSE);
+						printf("RECV EVENT\n%s\n", foo);
+						free(foo);
+
+						known++;
 					}
 				}
 				
@@ -99,48 +243,77 @@
 
 static int process_command(esl_handle_t *handle, const char *cmd) 
 {
-	if (
-		!strcasecmp(cmd, "exit") ||
-		!strcasecmp(cmd, "quit") ||
-		!strcasecmp(cmd, "bye")
-		) {
-		return -1;
-	}
+	if ((*cmd == '/' && cmd++) || !strncasecmp(cmd, "...", 3)) {
+		
+		if (!strcasecmp(cmd, "help")) {
+			printf(
+				   "Command                    \tDescription\n"
+				   "-----------------------------------------------\n"
+				   "/help                      \tHelp\n"
+				   "/exit, /quit, /bye, ...    \tExit the program.\n"
+				   "/event, /noevent, /nixevent\tEvent commands.\n"
+				   "/log, /nolog               \tLog commands.\n"
+				   "/filter                    \tFilter commands.\n"
+				   "\n"
+				   );
+
+			goto end;
+		}
+
+		if (
+			!strcasecmp(cmd, "exit") ||
+			!strcasecmp(cmd, "quit") ||
+			!strcasecmp(cmd, "...") ||
+			!strcasecmp(cmd, "bye")
+			) {
+			esl_log(ESL_LOG_INFO, "Goodbye!\nSee you at ClueCon http://www.cluecon.com/\n");
+			return -1;
+		}
+
+		if (
+			!strncasecmp(cmd, "event", 5) || 
+			!strncasecmp(cmd, "noevent", 7) ||
+			!strncasecmp(cmd, "nixevent", 8) ||
+			!strncasecmp(cmd, "log", 3) || 
+			!strncasecmp(cmd, "nolog", 5) || 
+			!strncasecmp(cmd, "filter", 6)
+			) {
 
-	if (
-		!strncasecmp(cmd, "event", 5) || 
-		!strncasecmp(cmd, "noevent", 7) ||
-		!strncasecmp(cmd, "nixevent", 8) ||
-		!strncasecmp(cmd, "log", 3) || 
-		!strncasecmp(cmd, "nolog", 5) || 
-		!strncasecmp(cmd, "filter", 6)
-		) {
+			esl_send_recv(handle, cmd);	
 
-		esl_send_recv(handle, cmd);			
-		printf("%s\n", handle->last_sr_reply);
+			printf("%s\n", handle->last_sr_reply);
 
-		goto end;
+			goto end;
+		}
+		
+		if (!strncasecmp(cmd, "debug", 5)){
+			int tmp_debug = atoi(cmd+6);
+			if (tmp_debug > -1 && tmp_debug < 8){
+				esl_global_set_default_logger(tmp_debug);
+				printf("fs_cli debug level set to %d\n", tmp_debug);
+			} else {
+				printf("fs_cli debug level must be 0 - 7\n");
+			}
+			goto end;
+		}
+	
+		printf("Unknown command [%s]\n", cmd);
+	} else {
+		char cmd_str[1024] = "";
+
+		snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", cmd);
+		esl_send_recv(handle, cmd_str);
+		if (handle->last_sr_event && handle->last_sr_event->body) {
+			printf("%s\n", handle->last_sr_event->body);
+		}
 	}
 	
-	printf("Unknown command [%s]\n", cmd);
-
  end:
 
 	return 0;
 
 }
 
-typedef struct {
-	char name[128];
-	char host[128];
-	esl_port_t port;
-	char pass[128];
-} cli_profile_t;
-
-static cli_profile_t profiles[128] = {{{0}}};
-static int pcount;
-
-
 static int get_profile(const char *name, cli_profile_t **profile)
 {
 	int x;
@@ -155,86 +328,315 @@
 	return -1;
 }
 
+#ifndef HAVE_EDITLINE
+static char command_buf[2048] = "";
+
+static const char *basic_gets(int *cnt)
+{
+	int x = 0;
+
+	printf("%s", prompt_str);
+
+	memset(&command_buf, 0, sizeof(command_buf));
+	for (x = 0; x < (sizeof(command_buf) - 1); x++) {
+		int c = getchar();
+		if (c < 0) {
+			int y = read(fileno(stdin), command_buf, sizeof(command_buf) - 1);
+			command_buf[y - 1] = '\0';
+			break;
+		}
+		
+		command_buf[x] = (char) c;
+		
+		if (command_buf[x] == '\n') {
+			command_buf[x] = '\0';
+			break;
+		}
+	}
+
+	*cnt = x;
+
+	return command_buf;
+
+}
+#endif
+
+
+static void print_banner(FILE *stream)
+{
+	fprintf(stream,
+			
+
+			"           _____ ____     ____ _     ___            \n"
+			"          |  ___/ ___|   / ___| |   |_ _|           \n"
+			"          | |_  \\___ \\  | |   | |    | |            \n"
+			"          |  _|  ___) | | |___| |___ | |            \n"
+			"          |_|   |____/   \\____|_____|___|           \n"
+			"\n"
+			"*****************************************************\n"
+			"* Anthony Minessale II, Ken Rice, Michael Jerris    *\n"
+			"* FreeSWITCH (http://www.freeswitch.org)            *\n"
+			"* Brought to you by ClueCon http://www.cluecon.com/ *\n"
+			"*****************************************************\n"
+			"\n\n"
+			);
+}
+
+
+static void set_fn_keys(cli_profile_t *profile)
+{
+	profile->console_fnkeys[0] = "help";
+	profile->console_fnkeys[1] = "status";
+	profile->console_fnkeys[2] = "show channels";
+	profile->console_fnkeys[3] = "show calls";
+	profile->console_fnkeys[4] = "sofia status";
+	profile->console_fnkeys[5] = "reloadxml";
+	profile->console_fnkeys[6] = "/log console";
+	profile->console_fnkeys[7] = "/log debug";
+	profile->console_fnkeys[8] = "sofia status profile internal";
+	profile->console_fnkeys[9] = "fsctl pause";
+	profile->console_fnkeys[10] = "fsctl resume";
+	profile->console_fnkeys[11] = "version";
+}
+
+
 int main(int argc, char *argv[])
 {
 	esl_handle_t handle = {{0}};
 	int count = 0;
 	const char *line = NULL;
 	char cmd_str[1024] = "";
-	char hfile[512] = "/tmp/fs_cli_history";
-	char cfile[512] = "/tmp/fs_cli_config";
-	char *home = getenv("HOME");
 	esl_config_t cfg;
-	cli_profile_t *profile = &profiles[0];
-	int cur = 0;
-	
-	strncpy(profiles[0].host, "localhost", sizeof(profiles[0].host));
-	strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass));
-	strncpy(profiles[0].name, "default", sizeof(profiles[0].name));
-	profiles[0].port = 8021;
-	pcount++;
+	cli_profile_t *profile = NULL;
+	int rv = 0;
+
+#ifndef WIN32
+	char hfile[512] = "/etc/fs_cli_history";
+	char cfile[512] = "/etc/fs_cli.conf";
+	char dft_cfile[512] = "/etc/fs_cli.conf";
+#else
+	char hfile[512] = "fs_cli_history";
+	char cfile[512] = "fs_cli.conf";
+	char dft_cfile[512] = "fs_cli.conf";
+#endif
+	char *home = getenv("HOME");
+	/* Vars for optargs */
+	int opt;
+	static struct option options[] = {
+		{"help", 0, 0, 'h'},
+		{"host", 1, 0, 'H'},
+		{"port", 1, 0, 'P'},
+		{"password", 1, 0, 'p'},
+		{"debug", 1, 0, 'd'},
+		{"execute", 1, 0, 'x'},
+		{"loglevel", 1, 0, 'l'},
+		{"quiet", 0, 0, 'q'},
+		{0, 0, 0, 0}
+	};
+
+	char temp_host[128];
+	int argv_host = 0;
+	char temp_pass[128];
+	int argv_pass = 0 ;
+	int temp_port = 0;
+	int argv_port = 0;
+	int temp_log = -1;
+	int argv_error = 0;
+	int argv_exec = 0;
+	char argv_command[256] = "";
+	char argv_loglevel[128] = "";
+	int argv_quiet = 0;
 	
+
+	strncpy(internal_profile.host, "127.0.0.1", sizeof(internal_profile.host));
+	strncpy(internal_profile.pass, "ClueCon", sizeof(internal_profile.pass));
+	strncpy(internal_profile.name, "internal", sizeof(internal_profile.name));
+	internal_profile.port = 8021;
+	set_fn_keys(&internal_profile);
+
+
 	if (home) {
 		snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home);
-		snprintf(cfile, sizeof(cfile), "%s/.fs_cli_config", home);
+		snprintf(cfile, sizeof(cfile), "%s/.fs_cli_conf", home);
 	}
 	
 	signal(SIGINT, handle_SIGINT);
-	gethostname(hostname, sizeof(hostname));
 
-	handle.debug = 0;
-	esl_global_set_default_logger(7);
+	esl_global_set_default_logger(6); /* default debug level to 6 (info) */
+	
+	for(;;) {
+		int option_index = 0;
+		opt = getopt_long(argc, argv, "H:U:P:S:p:d:x:l:qh?", options, &option_index);
+		if (opt == -1) break;
+		switch (opt)
+		{
+			case 'H':
+				esl_set_string(temp_host, optarg);
+				argv_host = 1;
+				break;
+			case 'P':
+				temp_port= atoi(optarg);
+				if (temp_port > 0 && temp_port < 65536){
+					argv_port = 1;
+				} else {
+					printf("ERROR: Port must be in range 1 - 65535\n");
+					argv_error = 1;
+				}
+				break;
+			case 'p':
+				esl_set_string(temp_pass, optarg);
+				argv_pass = 1;
+				break;
+			case 'd':
+				temp_log=atoi(optarg);
+				if (temp_log < 0 || temp_log > 7){
+					printf("ERROR: Debug level should be 0 - 7.\n");
+					argv_error = 1;
+				} else {
+					esl_global_set_default_logger(temp_log);
+				}
+				break;
+			case 'x':
+				argv_exec = 1;
+				esl_set_string(argv_command, optarg);
+				break;
+			case 'l':
+				esl_set_string(argv_loglevel, optarg);
+				break;
+			case 'q':
+				argv_quiet = 1;
+				break;
+				
+			case 'h':
+			case '?':
+				print_banner(stdout);
+				usage(argv[0]);
+				return 0;
+			default:
+				opt = 0;
+		}
+	}
 	
-	if (esl_config_open_file(&cfg, cfile)) {
+	if (argv_error){
+		printf("\n");
+		return usage(argv[0]);
+	}
+
+	if (!(rv = esl_config_open_file(&cfg, cfile))) {
+		rv = esl_config_open_file(&cfg, dft_cfile);
+	}
+
+	if (rv) {
 		char *var, *val;
 		char cur_cat[128] = "";
 
 		while (esl_config_next_pair(&cfg, &var, &val)) {
 			if (strcmp(cur_cat, cfg.category)) {
-				cur++;
 				esl_set_string(cur_cat, cfg.category);
-				esl_set_string(profiles[cur].name, cur_cat);
-				esl_set_string(profiles[cur].host, "localhost");
-				esl_set_string(profiles[cur].pass, "ClueCon");
-				profiles[cur].port = 8021;
-				esl_log(ESL_LOG_INFO, "Found Profile [%s]\n", profiles[cur].name);
+				esl_set_string(profiles[pcount].name, cur_cat);
+				esl_set_string(profiles[pcount].host, "localhost");
+				esl_set_string(profiles[pcount].pass, "ClueCon");
+				profiles[pcount].port = 8021;
+				set_fn_keys(&profiles[pcount]);
+				esl_log(ESL_LOG_DEBUG, "Found Profile [%s]\n", profiles[pcount].name);
 				pcount++;
 			}
 			
 			if (!strcasecmp(var, "host")) {
-				esl_set_string(profiles[cur].host, val);
+				esl_set_string(profiles[pcount-1].host, val);
 			} else if (!strcasecmp(var, "password")) {
-				esl_set_string(profiles[cur].pass, val);
+				esl_set_string(profiles[pcount-1].pass, val);
 			} else if (!strcasecmp(var, "port")) {
 				int pt = atoi(val);
 				if (pt > 0) {
-					profiles[cur].port = (esl_port_t)pt;
+					profiles[pcount-1].port = (esl_port_t)pt;
 				}
-			}
+			} else if (!strcasecmp(var, "debug")) {
+				int dt = atoi(val);
+				if (dt > -1 && dt < 8){
+					 profiles[pcount-1].debug = dt;
+				}	
+ 			} else if(!strcasecmp(var, "loglevel")) {
+ 				esl_set_string(profiles[pcount-1].loglevel, val);
+ 			} else if(!strcasecmp(var, "quiet")) {
+ 				profiles[pcount-1].quiet = esl_true(val);
+			} else if (!strncasecmp(var, "key_F", 5)) {
+				char *key = var + 5;
+
+				if (key) {
+					int i = atoi(key);
+				
+					if (i > 0 && i < 13) {
+						profiles[pcount-1].console_fnkeys[i - 1] = strdup(val);
+					}
+				}
+			} 
 		}
 		esl_config_close_file(&cfg);
 	}
-
-	if (argv[1]) {
-		if (get_profile(argv[1], &profile)) {
-			esl_log(ESL_LOG_INFO, "Chosen profile %s does not exist using builtin default\n", argv[1]);
-			profile = &profiles[0];
-		} else {
-			esl_log(ESL_LOG_INFO, "Chosen profile %s\n", profile->name);
+	
+	if (optind < argc) {
+		get_profile(argv[optind], &profile);
+	}
+	
+	if (!profile) {
+		if (get_profile("default", &profile)) {
+			esl_log(ESL_LOG_DEBUG, "profile default does not exist using builtin profile\n");
+			profile = &internal_profile;
 		}
 	}
 
-	esl_log(ESL_LOG_INFO, "Using profile %s\n", profile->name);
-		
-	gethostname(hostname, sizeof(hostname));
-	snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->name);
+	if (temp_log < 0 ) {
+		esl_global_set_default_logger(profile->debug);
+	}	
+
+	if (argv_host) {
+		esl_set_string(profile->host, temp_host);
+	}
+	if (argv_port) {
+		profile->port = (esl_port_t)temp_port;
+	}
+	if (argv_pass) {
+		esl_set_string(profile->pass, temp_pass);
+	}
+	
+	if (*argv_loglevel) {
+		esl_set_string(profile->loglevel, argv_loglevel);
+		profile->quiet = 0;
+	}
 
+	esl_log(ESL_LOG_DEBUG, "Using profile %s [%s]\n", profile->name, profile->host);
 	
+	if (argv_host) {
+		if (argv_port && profile->port != 8021) {
+			snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s:%u@%s> ", profile->host, profile->port, profile->name);
+		} else {
+			snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s@%s> ", profile->host, profile->name);
+		}
+	} else {
+		snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->name);
+	}
+
 	if (esl_connect(&handle, profile->host, profile->port, profile->pass)) {
+		esl_global_set_default_logger(3);
 		esl_log(ESL_LOG_ERROR, "Error Connecting [%s]\n", handle.err);
 		return -1;
 	}
-	
+
+
+	if (argv_exec){
+		snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", argv_command);
+		esl_send_recv(&handle, cmd_str);
+		if (handle.last_sr_event && handle.last_sr_event->body) {
+			printf("%s\n", handle.last_sr_event->body);
+		}
+		esl_disconnect(&handle);
+		return 0;
+	} 
+
+	global_handle = &handle;
+	global_profile = profile;
+
 	esl_thread_create_detached(msg_thread_run, &handle);
 
 #ifdef HAVE_EDITLINE
@@ -243,6 +645,39 @@
 	el_set(el, EL_EDITOR, "emacs");
 	myhistory = history_init();
 
+	el_set(el, EL_ADDFN, "f1-key", "F1 KEY PRESS", console_f1key);
+	el_set(el, EL_ADDFN, "f2-key", "F2 KEY PRESS", console_f2key);
+	el_set(el, EL_ADDFN, "f3-key", "F3 KEY PRESS", console_f3key);
+	el_set(el, EL_ADDFN, "f4-key", "F4 KEY PRESS", console_f4key);
+	el_set(el, EL_ADDFN, "f5-key", "F5 KEY PRESS", console_f5key);
+	el_set(el, EL_ADDFN, "f6-key", "F6 KEY PRESS", console_f6key);
+	el_set(el, EL_ADDFN, "f7-key", "F7 KEY PRESS", console_f7key);
+	el_set(el, EL_ADDFN, "f8-key", "F8 KEY PRESS", console_f8key);
+	el_set(el, EL_ADDFN, "f9-key", "F9 KEY PRESS", console_f9key);
+	el_set(el, EL_ADDFN, "f10-key", "F10 KEY PRESS", console_f10key);
+	el_set(el, EL_ADDFN, "f11-key", "F11 KEY PRESS", console_f11key);
+	el_set(el, EL_ADDFN, "f12-key", "F12 KEY PRESS", console_f12key);
+
+	el_set(el, EL_BIND, "\033OP", "f1-key", NULL);
+	el_set(el, EL_BIND, "\033OQ", "f2-key", NULL);
+	el_set(el, EL_BIND, "\033OR", "f3-key", NULL);
+	el_set(el, EL_BIND, "\033OS", "f4-key", NULL);
+
+
+	el_set(el, EL_BIND, "\033[11~", "f1-key", NULL);
+	el_set(el, EL_BIND, "\033[12~", "f2-key", NULL);
+	el_set(el, EL_BIND, "\033[13~", "f3-key", NULL);
+	el_set(el, EL_BIND, "\033[14~", "f4-key", NULL);
+	el_set(el, EL_BIND, "\033[15~", "f5-key", NULL);
+	el_set(el, EL_BIND, "\033[17~", "f6-key", NULL);
+	el_set(el, EL_BIND, "\033[18~", "f7-key", NULL);
+	el_set(el, EL_BIND, "\033[19~", "f8-key", NULL);
+	el_set(el, EL_BIND, "\033[20~", "f9-key", NULL);
+	el_set(el, EL_BIND, "\033[21~", "f10-key", NULL);
+	el_set(el, EL_BIND, "\033[23~", "f11-key", NULL);
+	el_set(el, EL_BIND, "\033[24~", "f12-key", NULL);
+
+
 	if (myhistory == 0) {
 		esl_log(ESL_LOG_ERROR, "history could not be initialized\n");
 		goto done;
@@ -251,17 +686,31 @@
 	history(myhistory, &ev, H_SETSIZE, 800);
 	el_set(el, EL_HIST, history, myhistory);
 	history(myhistory, &ev, H_LOAD, hfile);
+
+
+#endif
+#ifdef WIN32
+	hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
+	if (hStdout != INVALID_HANDLE_VALUE && GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) {
+		wOldColorAttrs = csbiInfo.wAttributes;
+	}
 #endif
 
-	snprintf(cmd_str, sizeof(cmd_str), "log info\n\n");
-	esl_send_recv(&handle, cmd_str);
+	if (!argv_quiet && !profile->quiet) {
+		snprintf(cmd_str, sizeof(cmd_str), "log %s\n\n", profile->loglevel);	
+		esl_send_recv(&handle, cmd_str);
+	}
+
+	print_banner(stdout);
 
-	esl_log(ESL_LOG_INFO, "FS CLI Ready.\n");
+	esl_log(ESL_LOG_INFO, "FS CLI Ready.\nenter /help for a list of commands.\n");
 
 	while (running) {
 
 #ifdef HAVE_EDITLINE
 		line = el_gets(el, &count);
+#else
+		line = basic_gets(&count);
 #endif
 
 		if (count > 1) {
@@ -282,19 +731,9 @@
 #ifdef HAVE_EDITLINE
 				history(myhistory, &ev, H_ENTER, line);
 #endif
-
-				if (!strncasecmp(cmd, "...", 3)) {
-					goto done;
-				} else if (*cmd == '/') {
-					if (process_command(&handle, cmd + 1)) {
-						running = 0;
-					}
-				} else {
-					snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", cmd);
-					esl_send_recv(&handle, cmd_str);
-					if (handle.last_sr_event) {
-						printf("%s\n", handle.last_sr_event->body);
-					}
+				
+				if (process_command(&handle, cmd)) {
+					running = 0;
 				}
 
 #ifdef HAVE_EDITLINE
@@ -309,10 +748,8 @@
 
 	}
 
-
- done:
-	
 #ifdef HAVE_EDITLINE
+ done:
 	history(myhistory, &ev, H_SAVE, hfile);
 
 	/* Clean up our memory */

Modified: freeswitch/branches/gmaruzz/libs/esl/src/esl.2008.vcproj
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/src/esl.2008.vcproj	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/src/esl.2008.vcproj	Wed Jan  7 10:17:00 2009
@@ -20,7 +20,7 @@
 			Name="Debug|Win32"
 			OutputDirectory="$(SolutionDir)Debug"
 			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="2"
+			ConfigurationType="4"
 			CharacterSet="1"
 			>
 			<Tool
@@ -42,14 +42,14 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="include"
-				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;ESL_EXPORTS"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;ESL_DECLARE_STATIC"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
 				UsePrecompiledHeader="0"
 				WarningLevel="4"
 				WarnAsError="true"
-				DebugInformationFormat="4"
+				DebugInformationFormat="3"
 				DisableSpecificWarnings="4706;4100"
 				EnablePREfast="true"
 			/>
@@ -63,22 +63,12 @@
 				Name="VCPreLinkEventTool"
 			/>
 			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Ws2_32.lib"
-				ModuleDefinitionFile=""
-				OptimizeReferences="1"
-				EnableCOMDATFolding="1"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				Name="VCLibrarianTool"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
 			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
 				Name="VCXDCMakeTool"
 			/>
 			<Tool
@@ -88,9 +78,6 @@
 				Name="VCFxCopTool"
 			/>
 			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
 				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
@@ -98,7 +85,7 @@
 			Name="Release|Win32"
 			OutputDirectory="$(SolutionDir)Release"
 			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="2"
+			ConfigurationType="4"
 			CharacterSet="1"
 			WholeProgramOptimization="1"
 			>
@@ -120,7 +107,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				AdditionalIncludeDirectories="include"
-				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;ESL_EXPORTS"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;ESL_DECLARE_STATIC"
 				RuntimeLibrary="2"
 				UsePrecompiledHeader="0"
 				WarningLevel="4"
@@ -139,20 +126,12 @@
 				Name="VCPreLinkEventTool"
 			/>
 			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Ws2_32.lib"
-				ModuleDefinitionFile=""
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				Name="VCLibrarianTool"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
 			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
 				Name="VCXDCMakeTool"
 			/>
 			<Tool
@@ -162,9 +141,6 @@
 				Name="VCFxCopTool"
 			/>
 			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
 				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>

Modified: freeswitch/branches/gmaruzz/libs/esl/src/esl.c
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/src/esl.c	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/src/esl.c	Wed Jan  7 10:17:00 2009
@@ -368,12 +368,14 @@
 {
 	char *txt;
 
+	if (!handle->connected) {
+		return ESL_FAIL;
+	}
+
 	esl_event_serialize(handle->last_ievent, &txt, ESL_TRUE);
 
-	if (handle->debug) {
-		esl_log(ESL_LOG_DEBUG, "SEND EVENT\n%s\n", txt);
-	}
-	
+	esl_log(ESL_LOG_DEBUG, "SEND EVENT\n%s\n", txt);
+		
 	send(handle->sock, "sendevent\n", 10, 0);
 	send(handle->sock, txt, strlen(txt), 0);
 	send(handle->sock, "\n\n", 2, 0);
@@ -390,6 +392,10 @@
 	char arg_buf[512] = "";
 	char send_buf[1292] = "";
 	
+	if (!handle->connected) {
+		return ESL_FAIL;
+	}
+
 	if (uuid) {
 		snprintf(cmd_buf, sizeof(cmd_buf), "sendmsg %s", uuid);
 	}
@@ -482,6 +488,16 @@
 	char sendbuf[256];
 	int rval = 0;
 	const char *hval;
+#ifdef WIN32
+	WORD wVersionRequested = MAKEWORD(2, 0);
+	WSADATA wsaData;
+	int err = WSAStartup(wVersionRequested, &wsaData);
+	if (err != 0) {
+		snprintf(handle->err, sizeof(handle->err), "WSAStartup Error");
+		return ESL_FAIL;
+	}
+
+#endif
 
 	if (!handle->mutex) {
 		esl_mutex_create(&handle->mutex);
@@ -562,24 +578,33 @@
 
 ESL_DECLARE(esl_status_t) esl_disconnect(esl_handle_t *handle)
 {
+	esl_mutex_t *mutex = handle->mutex;
+	esl_status_t status = ESL_FAIL;
+	
+	if (mutex) {
+		esl_mutex_lock(mutex);
+	}
+
 	esl_event_safe_destroy(&handle->last_event);
 	esl_event_safe_destroy(&handle->last_sr_event);
 	esl_event_safe_destroy(&handle->last_ievent);
 	esl_event_safe_destroy(&handle->info_event);
 
-	if (handle->mutex) {
-		esl_mutex_destroy(&handle->mutex);
-	}
-
 	if (handle->sock != ESL_SOCK_INVALID) {
 		closesocket(handle->sock);
 		handle->sock = ESL_SOCK_INVALID;
-		return ESL_SUCCESS;
+		status = ESL_SUCCESS;
 	}
 	
 	handle->connected = 0;
 
-	return ESL_FAIL;
+	if (mutex) {
+		esl_mutex_unlock(mutex);
+		esl_mutex_destroy(&mutex);
+	}
+
+
+	return status;
 }
 
 ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event)
@@ -589,6 +614,10 @@
 	int max, activity;
 	esl_status_t status = ESL_SUCCESS;
 
+	if (!handle->connected) {
+		return ESL_FAIL;
+	}
+
 	tv.tv_usec = ms * 1000;
 
 	esl_mutex_lock(handle->mutex);
@@ -624,7 +653,7 @@
 
  done:
 
-	esl_mutex_unlock(handle->mutex);
+	if (handle->mutex) esl_mutex_unlock(handle->mutex);
 
 	return status;
 
@@ -644,6 +673,11 @@
 	esl_ssize_t len;
 	int zc = 0;
 	
+
+	if (!handle->connected) {
+		return ESL_FAIL;
+	}
+
 	esl_mutex_lock(handle->mutex);
 
 	esl_event_safe_destroy(&handle->last_event);
@@ -689,9 +723,7 @@
 				
 				if (hname && hval) {
 					esl_url_decode(hval);
-					if (handle->debug > 1) {
-						esl_log(ESL_LOG_DEBUG, "RECV HEADER [%s] = [%s]\n", hname, hval);
-					}
+					esl_log(ESL_LOG_DEBUG, "RECV HEADER [%s] = [%s]\n", hname, hval);
 					esl_event_add_header_string(revent, ESL_STACK_BOTTOM, hname, hval);
 				}
 
@@ -783,10 +815,7 @@
 			
 				if (hname && hval) {
 					esl_url_decode(hval);
-
-					if (handle->debug > 1) {
-						esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval);
-					}
+					esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval);
 					esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval);
 				}
 				
@@ -815,8 +844,8 @@
 				handle->last_ievent->body = body;
 			}
 
-
-			if (handle->debug) {
+			
+			if (esl_log_level >= 7) {
 				char *foo;
 				esl_event_serialize(handle->last_ievent, &foo, ESL_FALSE);
 				esl_log(ESL_LOG_DEBUG, "RECV EVENT\n%s\n", foo);
@@ -824,7 +853,7 @@
 			}
 		}
 		
-		if (handle->debug) {
+		if (esl_log_level >= 7) {
 			char *foo;
 			esl_event_serialize(revent, &foo, ESL_FALSE);
 			esl_log(ESL_LOG_DEBUG, "RECV MESSAGE\n%s\n", foo);
@@ -847,17 +876,19 @@
 {
 	const char *e = cmd + strlen(cmd) -1;
 	
-	if (handle->debug) {
-		esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd);
+	if (!handle->connected) {
+		return ESL_FAIL;
 	}
+
+	esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd);
 	
-	if (send(handle->sock, cmd, strlen(cmd), 0)) {
+	if (send(handle->sock, cmd, strlen(cmd), 0) != (int)strlen(cmd)) {
 		strerror_r(handle->errnum, handle->err, sizeof(handle->err));
 		return ESL_FAIL;
 	}
-
+	
 	if (!(*e == '\n' && *(e-1) == '\n')) {
-		if (send(handle->sock, "\n\n", 2, 0)) {
+		if (send(handle->sock, "\n\n", 2, 0) != 2) {
 			strerror_r(handle->errnum, handle->err, sizeof(handle->err));
 			return ESL_FAIL;
 		}
@@ -873,8 +904,16 @@
 	const char *hval;
 	esl_status_t status;
 	
+	if (!handle->connected) {
+		return ESL_FAIL;
+	}
+
 	esl_mutex_lock(handle->mutex);
-	esl_send(handle, cmd);
+
+	if ((status = esl_send(handle, cmd))) {
+		return status;
+	}
+
 	status = esl_recv_event(handle, &handle->last_sr_event);
 	
 	if (handle->last_sr_event) {

Modified: freeswitch/branches/gmaruzz/libs/esl/src/esl_event.c
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/src/esl_event.c	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/src/esl_event.c	Wed Jan  7 10:17:00 2009
@@ -313,41 +313,41 @@
 
 int vasprintf(char **ret, const char *format, va_list ap);
 
-static int esl_vasprintf(char **ret, const char *fmt, va_list ap)
-{
-#ifndef WIN32
-	return vasprintf(ret, fmt, ap);
-#else
-	char *buf;
-	int len;
-	size_t buflen;
-	va_list ap2;
-	char *tmp = NULL;
-
-#ifdef _MSC_VER
-#if _MSC_VER >= 1500
-	/* hack for incorrect assumption in msvc header files for code analysis */
-	__analysis_assume(tmp);
-#endif
-	ap2 = ap;
-#else
-	va_copy(ap2, ap);
-#endif
-
-	len = vsnprintf(tmp, 0, fmt, ap2);
-
-	if (len > 0 && (buf = malloc((buflen = (size_t) (len + 1)))) != NULL) {
-		len = vsnprintf(buf, buflen, fmt, ap);
-		*ret = buf;
-	} else {
-		*ret = NULL;
-		len = -1;
-	}
-
-	va_end(ap2);
-	return len;
-#endif
-}
+static int esl_vasprintf(char **ret, const char *fmt, va_list ap)
+{
+#if !defined(WIN32) && !defined(__sun)
+	return vasprintf(ret, fmt, ap);
+#else
+	char *buf;
+	int len;
+	size_t buflen;
+	va_list ap2;
+	char *tmp = NULL;
+
+#ifdef _MSC_VER
+#if _MSC_VER >= 1500
+	/* hack for incorrect assumption in msvc header files for code analysis */
+	__analysis_assume(tmp);
+#endif
+	ap2 = ap;
+#else
+	va_copy(ap2, ap);
+#endif
+
+	len = vsnprintf(tmp, 0, fmt, ap2);
+
+	if (len > 0 && (buf = malloc((buflen = (size_t) (len + 1)))) != NULL) {
+		len = vsnprintf(buf, buflen, fmt, ap);
+		*ret = buf;
+	} else {
+		*ret = NULL;
+		len = -1;
+	}
+
+	va_end(ap2);
+	return len;
+#endif
+}
 
 
 ESL_DECLARE(esl_status_t) esl_event_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *fmt, ...)

Modified: freeswitch/branches/gmaruzz/libs/esl/src/include/esl.h
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/src/include/esl.h	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/src/include/esl.h	Wed Jan  7 10:17:00 2009
@@ -42,6 +42,15 @@
 typedef struct esl_event_header esl_event_header_t;
 typedef struct esl_event esl_event_t;
 
+#ifdef WIN32
+#define ESL_SEQ_FWHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY
+#define ESL_SEQ_FRED FOREGROUND_RED | FOREGROUND_INTENSITY
+#define ESL_SEQ_FMAGEN FOREGROUND_BLUE | FOREGROUND_RED
+#define ESL_SEQ_FCYAN FOREGROUND_GREEN | FOREGROUND_BLUE
+#define ESL_SEQ_FGREEN FOREGROUND_GREEN
+#define ESL_SEQ_FYELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
+#define ESL_SEQ_DEFAULT_COLOR ESL_SEQ_FWHITE
+#else
 #define ESL_SEQ_ESC "\033["
 /* Ansi Control character suffixes */
 #define ESL_SEQ_HOME_CHAR 'H'
@@ -95,6 +104,7 @@
 #define ESL_SEQ_CLEARLINE ESL_SEQ_ESC ESL_SEQ_CLEARLINE_CHAR_STR
 #define ESL_SEQ_CLEARLINEEND ESL_SEQ_ESC ESL_SEQ_CLEARLINEEND_CHAR
 #define ESL_SEQ_CLEARSCR ESL_SEQ_ESC ESL_SEQ_CLEARSCR_CHAR ESL_SEQ_HOME
+#endif
 
 #if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__) && !defined(__NetBSD__)
 #define _XOPEN_SOURCE 600
@@ -246,7 +256,6 @@
 	esl_event_t *last_sr_event;
 	esl_event_t *last_ievent;
 	esl_event_t *info_event;
-	int debug;
 	int connected;
 	struct sockaddr_in addr;
 	esl_mutex_t *mutex;

Modified: freeswitch/branches/gmaruzz/libs/esl/src/include/esl_config.h
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/src/include/esl_config.h	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/src/include/esl_config.h	Wed Jan  7 10:17:00 2009
@@ -70,6 +70,34 @@
 #define esl_is_file_path(file) ((*file == '/') || strstr(file, SWITCH_URL_SEPARATOR))
 #endif
 
+/*!
+  \brief Evaluate the truthfullness of a string expression
+  \param expr a string expression
+  \return true or false 
+*/
+#define esl_true(expr)\
+(expr && ( !strcasecmp(expr, "yes") ||\
+!strcasecmp(expr, "on") ||\
+!strcasecmp(expr, "true") ||\
+!strcasecmp(expr, "enabled") ||\
+!strcasecmp(expr, "active") ||\
+!strcasecmp(expr, "allow") ||\
+atoi(expr))) ? 1 : 0
+
+/*!
+  \brief Evaluate the falsefullness of a string expression
+  \param expr a string expression
+  \return true or false 
+*/
+#define esl_false(expr)\
+(expr && ( !strcasecmp(expr, "no") ||\
+!strcasecmp(expr, "off") ||\
+!strcasecmp(expr, "false") ||\
+!strcasecmp(expr, "disabled") ||\
+!strcasecmp(expr, "inactive") ||\
+!strcasecmp(expr, "disallow") ||\
+!atoi(expr))) ? 1 : 0
+
 typedef struct esl_config esl_config_t;
 
 /*! \brief A simple file handle representing an open configuration file **/

Modified: freeswitch/branches/gmaruzz/libs/esl/testclient.c
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/testclient.c	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/testclient.c	Wed Jan  7 10:17:00 2009
@@ -7,8 +7,6 @@
 {
 	esl_handle_t handle = {{0}};
 
-	handle.debug = 1;
-	
 	esl_connect(&handle, "localhost", 8021, "ClueCon");
 
 	esl_send_recv(&handle, "api status\n\n");

Modified: freeswitch/branches/gmaruzz/libs/esl/testserver.c
==============================================================================
--- freeswitch/branches/gmaruzz/libs/esl/testserver.c	(original)
+++ freeswitch/branches/gmaruzz/libs/esl/testserver.c	Wed Jan  7 10:17:00 2009
@@ -13,7 +13,6 @@
 
 
 	esl_attach_handle(&handle, client_sock, addr);
-	handle.debug = 2;
 
 	printf("Connected! %d\n", handle.sock);
 	

Modified: freeswitch/branches/gmaruzz/libs/libg722_1/src/dct4.h
==============================================================================
--- freeswitch/branches/gmaruzz/libs/libg722_1/src/dct4.h	(original)
+++ freeswitch/branches/gmaruzz/libs/libg722_1/src/dct4.h	Wed Jan  7 10:17:00 2009
@@ -1,1515 +1,1515 @@
 static const float max_dct_core_a[] =
 {
-     5.572937315437795e-02f,
-     5.435713103213160e-02f,
-     5.164643594289910e-02f,
-     4.766403419605858e-02f,
-     4.250798573945089e-02f,
-     3.630524959802148e-02f,
-     2.920855772127337e-02f,
-     2.139265421578210e-02f,
-     1.304999256534943e-02f,
-     4.385996787515619e-03f,
-     5.435713103213160e-02f,
-     4.250798573945089e-02f,
-     2.139265421578210e-02f,
-    -4.385996787515612e-03f,
-    -2.920855772127336e-02f,
-    -4.766403419605858e-02f,
-    -5.572937315437795e-02f,
-    -5.164643594289911e-02f,
-    -3.630524959802151e-02f,
-    -1.304999256534941e-02f,
-     5.164643594289910e-02f,
-     2.139265421578210e-02f,
-    -2.139265421578209e-02f,
-    -5.164643594289910e-02f,
-    -5.164643594289911e-02f,
-    -2.139265421578213e-02f,
-     2.139265421578211e-02f,
-     5.164643594289909e-02f,
-     5.164643594289910e-02f,
-     2.139265421578213e-02f,
-     4.766403419605858e-02f,
-    -4.385996787515612e-03f,
-    -5.164643594289910e-02f,
-    -4.250798573945090e-02f,
-     1.304999256534939e-02f,
-     5.435713103213161e-02f,
-     3.630524959802152e-02f,
-    -2.139265421578210e-02f,
-    -5.572937315437795e-02f,
-    -2.920855772127336e-02f,
-     4.250798573945089e-02f,
-    -2.920855772127336e-02f,
-    -5.164643594289911e-02f,
-     1.304999256534939e-02f,
-     5.572937315437795e-02f,
-     4.385996787515657e-03f,
-    -5.435713103213161e-02f,
-    -2.139265421578214e-02f,
-     4.766403419605858e-02f,
-     3.630524959802153e-02f,
-     3.630524959802148e-02f,
-    -4.766403419605858e-02f,
-    -2.139265421578213e-02f,
-     5.435713103213161e-02f,
-     4.385996787515657e-03f,
-    -5.572937315437795e-02f,
-     1.304999256534937e-02f,
-     5.164643594289910e-02f,
-    -2.920855772127332e-02f,
-    -4.250798573945090e-02f,
-     2.920855772127337e-02f,
-    -5.572937315437795e-02f,
-     2.139265421578211e-02f,
-     3.630524959802152e-02f,
-    -5.435713103213161e-02f,
-     1.304999256534937e-02f,
-     4.250798573945089e-02f,
-    -5.164643594289908e-02f,
-     4.385996787515504e-03f,
-     4.766403419605861e-02f,
-     2.139265421578210e-02f,
-    -5.164643594289911e-02f,
-     5.164643594289909e-02f,
-    -2.139265421578210e-02f,
-    -2.139265421578214e-02f,
-     5.164643594289910e-02f,
-    -5.164643594289908e-02f,
-     2.139265421578208e-02f,
-     2.139265421578216e-02f,
-    -5.164643594289915e-02f,
-     1.304999256534943e-02f,
-    -3.630524959802151e-02f,
-     5.164643594289910e-02f,
-    -5.572937315437795e-02f,
-     4.766403419605858e-02f,
-    -2.920855772127332e-02f,
-     4.385996787515504e-03f,
-     2.139265421578216e-02f,
-    -4.250798573945092e-02f,
-     5.435713103213160e-02f,
-     4.385996787515619e-03f,
-    -1.304999256534941e-02f,
-     2.139265421578213e-02f,
-    -2.920855772127336e-02f,
-     3.630524959802153e-02f,
-    -4.250798573945090e-02f,
-     4.766403419605861e-02f,
-    -5.164643594289915e-02f,
-     5.435713103213160e-02f,
-    -5.572937315437796e-02f
+     5.572937315437795e-02,
+     5.435713103213160e-02,
+     5.164643594289910e-02,
+     4.766403419605858e-02,
+     4.250798573945089e-02,
+     3.630524959802148e-02,
+     2.920855772127337e-02,
+     2.139265421578210e-02,
+     1.304999256534943e-02,
+     4.385996787515619e-03,
+     5.435713103213160e-02,
+     4.250798573945089e-02,
+     2.139265421578210e-02,
+    -4.385996787515612e-03,
+    -2.920855772127336e-02,
+    -4.766403419605858e-02,
+    -5.572937315437795e-02,
+    -5.164643594289911e-02,
+    -3.630524959802151e-02,
+    -1.304999256534941e-02,
+     5.164643594289910e-02,
+     2.139265421578210e-02,
+    -2.139265421578209e-02,
+    -5.164643594289910e-02,
+    -5.164643594289911e-02,
+    -2.139265421578213e-02,
+     2.139265421578211e-02,
+     5.164643594289909e-02,
+     5.164643594289910e-02,
+     2.139265421578213e-02,
+     4.766403419605858e-02,
+    -4.385996787515612e-03,
+    -5.164643594289910e-02,
+    -4.250798573945090e-02,
+     1.304999256534939e-02,
+     5.435713103213161e-02,
+     3.630524959802152e-02,
+    -2.139265421578210e-02,
+    -5.572937315437795e-02,
+    -2.920855772127336e-02,
+     4.250798573945089e-02,
+    -2.920855772127336e-02,
+    -5.164643594289911e-02,
+     1.304999256534939e-02,
+     5.572937315437795e-02,
+     4.385996787515657e-03,
+    -5.435713103213161e-02,
+    -2.139265421578214e-02,
+     4.766403419605858e-02,
+     3.630524959802153e-02,
+     3.630524959802148e-02,
+    -4.766403419605858e-02,
+    -2.139265421578213e-02,
+     5.435713103213161e-02,
+     4.385996787515657e-03,
+    -5.572937315437795e-02,
+     1.304999256534937e-02,
+     5.164643594289910e-02,
+    -2.920855772127332e-02,
+    -4.250798573945090e-02,
+     2.920855772127337e-02,
+    -5.572937315437795e-02,
+     2.139265421578211e-02,
+     3.630524959802152e-02,
+    -5.435713103213161e-02,
+     1.304999256534937e-02,
+     4.250798573945089e-02,
+    -5.164643594289908e-02,
+     4.385996787515504e-03,
+     4.766403419605861e-02,
+     2.139265421578210e-02,
+    -5.164643594289911e-02,
+     5.164643594289909e-02,
+    -2.139265421578210e-02,
+    -2.139265421578214e-02,
+     5.164643594289910e-02,
+    -5.164643594289908e-02,
+     2.139265421578208e-02,
+     2.139265421578216e-02,
+    -5.164643594289915e-02,
+     1.304999256534943e-02,
+    -3.630524959802151e-02,
+     5.164643594289910e-02,
+    -5.572937315437795e-02,
+     4.766403419605858e-02,
+    -2.920855772127332e-02,
+     4.385996787515504e-03,
+     2.139265421578216e-02,
+    -4.250798573945092e-02,
+     5.435713103213160e-02,
+     4.385996787515619e-03,
+    -1.304999256534941e-02,
+     2.139265421578213e-02,
+    -2.920855772127336e-02,
+     3.630524959802153e-02,
+    -4.250798573945090e-02,
+     4.766403419605861e-02,
+    -5.164643594289915e-02,
+     5.435713103213160e-02,
+    -5.572937315437796e-02
 };
 
 static const float dct_core_a[] =
 {
-     7.881323533747238e-02f,
-     7.687259191733195e-02f,
-     7.303909015868119e-02f,
-     6.740712359748102e-02f,
-     6.011536994189358e-02f,
-     5.134337636686234e-02f,
-     4.130713846678219e-02f,
-     3.025378172711701e-02f,
-     1.845547647478522e-02f,
-     6.202736141429415e-03f,
-     7.687259191733195e-02f,
-     6.011536994189358e-02f,
-     3.025378172711701e-02f,
-    -6.202736141429404e-03f,
-    -4.130713846678218e-02f,
-    -6.740712359748102e-02f,
-    -7.881323533747238e-02f,
-    -7.303909015868121e-02f,
-    -5.134337636686238e-02f,
-    -1.845547647478519e-02f,
-     7.303909015868119e-02f,
-     3.025378172711701e-02f,
-    -3.025378172711701e-02f,
-    -7.303909015868119e-02f,
-    -7.303909015868121e-02f,
-    -3.025378172711705e-02f,
-     3.025378172711703e-02f,
-     7.303909015868118e-02f,
-     7.303909015868119e-02f,
-     3.025378172711706e-02f,
-     6.740712359748102e-02f,
-    -6.202736141429404e-03f,
-    -7.303909015868119e-02f,
-    -6.011536994189359e-02f,
-     1.845547647478516e-02f,
-     7.687259191733196e-02f,
-     5.134337636686239e-02f,
-    -3.025378172711702e-02f,
-    -7.881323533747238e-02f,
-    -4.130713846678218e-02f,
-     6.011536994189358e-02f,
-    -4.130713846678218e-02f,
-    -7.303909015868121e-02f,
-     1.845547647478516e-02f,
-     7.881323533747238e-02f,
-     6.202736141429469e-03f,
-    -7.687259191733196e-02f,
-    -3.025378172711707e-02f,
-     6.740712359748102e-02f,
-     5.134337636686240e-02f,
-     5.134337636686234e-02f,
-    -6.740712359748102e-02f,
-    -3.025378172711705e-02f,
-     7.687259191733196e-02f,
-     6.202736141429469e-03f,
-    -7.881323533747238e-02f,
-     1.845547647478515e-02f,
-     7.303909015868119e-02f,
-    -4.130713846678212e-02f,
-    -6.011536994189359e-02f,
-     4.130713846678219e-02f,
-    -7.881323533747238e-02f,
-     3.025378172711703e-02f,
-     5.134337636686239e-02f,
-    -7.687259191733196e-02f,
-     1.845547647478515e-02f,
-     6.011536994189358e-02f,
-    -7.303909015868118e-02f,
-     6.202736141429252e-03f,
-     6.740712359748108e-02f,
-     3.025378172711701e-02f,
-    -7.303909015868121e-02f,
-     7.303909015868118e-02f,
-    -3.025378172711702e-02f,
-    -3.025378172711707e-02f,
-     7.303909015868119e-02f,
-    -7.303909015868118e-02f,
-     3.025378172711699e-02f,
-     3.025378172711710e-02f,
-    -7.303909015868128e-02f,
-     1.845547647478522e-02f,
-    -5.134337636686238e-02f,
-     7.303909015868119e-02f,
-    -7.881323533747238e-02f,
-     6.740712359748102e-02f,
-    -4.130713846678212e-02f,
-     6.202736141429252e-03f,
-     3.025378172711710e-02f,
-    -6.011536994189360e-02f,
-     7.687259191733195e-02f,
-     6.202736141429415e-03f,
-    -1.845547647478519e-02f,
-     3.025378172711706e-02f,
-    -4.130713846678218e-02f,
-     5.134337636686240e-02f,
-    -6.011536994189359e-02f,
-     6.740712359748108e-02f,
-    -7.303909015868128e-02f,
-     7.687259191733195e-02f,
-    -7.881323533747239e-02f
+     7.881323533747238e-02,
+     7.687259191733195e-02,
+     7.303909015868119e-02,
+     6.740712359748102e-02,
+     6.011536994189358e-02,
+     5.134337636686234e-02,
+     4.130713846678219e-02,
+     3.025378172711701e-02,
+     1.845547647478522e-02,
+     6.202736141429415e-03,
+     7.687259191733195e-02,
+     6.011536994189358e-02,
+     3.025378172711701e-02,
+    -6.202736141429404e-03,
+    -4.130713846678218e-02,
+    -6.740712359748102e-02,
+    -7.881323533747238e-02,
+    -7.303909015868121e-02,
+    -5.134337636686238e-02,
+    -1.845547647478519e-02,
+     7.303909015868119e-02,
+     3.025378172711701e-02,
+    -3.025378172711701e-02,
+    -7.303909015868119e-02,
+    -7.303909015868121e-02,
+    -3.025378172711705e-02,
+     3.025378172711703e-02,
+     7.303909015868118e-02,
+     7.303909015868119e-02,
+     3.025378172711706e-02,
+     6.740712359748102e-02,
+    -6.202736141429404e-03,
+    -7.303909015868119e-02,
+    -6.011536994189359e-02,
+     1.845547647478516e-02,
+     7.687259191733196e-02,
+     5.134337636686239e-02,
+    -3.025378172711702e-02,
+    -7.881323533747238e-02,
+    -4.130713846678218e-02,
+     6.011536994189358e-02,
+    -4.130713846678218e-02,
+    -7.303909015868121e-02,
+     1.845547647478516e-02,
+     7.881323533747238e-02,
+     6.202736141429469e-03,
+    -7.687259191733196e-02,
+    -3.025378172711707e-02,
+     6.740712359748102e-02,
+     5.134337636686240e-02,
+     5.134337636686234e-02,
+    -6.740712359748102e-02,
+    -3.025378172711705e-02,
+     7.687259191733196e-02,
+     6.202736141429469e-03,
+    -7.881323533747238e-02,
+     1.845547647478515e-02,
+     7.303909015868119e-02,
+    -4.130713846678212e-02,
+    -6.011536994189359e-02,
+     4.130713846678219e-02,
+    -7.881323533747238e-02,
+     3.025378172711703e-02,
+     5.134337636686239e-02,
+    -7.687259191733196e-02,
+     1.845547647478515e-02,
+     6.011536994189358e-02,
+    -7.303909015868118e-02,
+     6.202736141429252e-03,
+     6.740712359748108e-02,
+     3.025378172711701e-02,
+    -7.303909015868121e-02,
+     7.303909015868118e-02,
+    -3.025378172711702e-02,
+    -3.025378172711707e-02,
+     7.303909015868119e-02,
+    -7.303909015868118e-02,
+     3.025378172711699e-02,
+     3.025378172711710e-02,
+    -7.303909015868128e-02,
+     1.845547647478522e-02,
+    -5.134337636686238e-02,
+     7.303909015868119e-02,
+    -7.881323533747238e-02,
+     6.740712359748102e-02,
+    -4.130713846678212e-02,
+     6.202736141429252e-03,
+     3.025378172711710e-02,
+    -6.011536994189360e-02,
+     7.687259191733195e-02,
+     6.202736141429415e-03,
+    -1.845547647478519e-02,
+     3.025378172711706e-02,
+    -4.130713846678218e-02,
+     5.134337636686240e-02,
+    -6.011536994189359e-02,
+     6.740712359748108e-02,
+    -7.303909015868128e-02,
+     7.687259191733195e-02,
+    -7.881323533747239e-02
 };
 
 static const cos_msin_t cos_msin_5[5] =
 {
-    {9.969173337331280e-01f, -7.845909572784494e-02f},
-    {9.723699203976766e-01f, -2.334453638559054e-01f},
-    {9.238795325112867e-01f, -3.826834323650898e-01f},
-    {8.526401643540922e-01f, -5.224985647159488e-01f},
-    {7.604059656000309e-01f, -6.494480483301837e-01f}
+    {9.969173337331280e-01, -7.845909572784494e-02},
+    {9.723699203976766e-01, -2.334453638559054e-01},
+    {9.238795325112867e-01, -3.826834323650898e-01},
+    {8.526401643540922e-01, -5.224985647159488e-01},
+    {7.604059656000309e-01, -6.494480483301837e-01}
 };
 
 static const cos_msin_t cos_msin_10[10] =
 {
-    {9.992290362407229e-01f, -3.925981575906861e-02f},
-    {9.930684569549263e-01f, -1.175373974578376e-01f},
-    {9.807852804032304e-01f, -1.950903220161282e-01f},
-    {9.624552364536473e-01f, -2.714404498650743e-01f},
-    {9.381913359224842e-01f, -3.461170570774930e-01f},
-    {9.081431738250813e-01f, -4.186597375374281e-01f},
-    {8.724960070727972e-01f, -4.886212414969549e-01f},
-    {8.314696123025452e-01f, -5.555702330196022e-01f},
-    {7.853169308807449e-01f, -6.190939493098340e-01f},
-    {7.343225094356856e-01f, -6.788007455329417e-01f}
+    {9.992290362407229e-01, -3.925981575906861e-02},
+    {9.930684569549263e-01, -1.175373974578376e-01},
+    {9.807852804032304e-01, -1.950903220161282e-01},
+    {9.624552364536473e-01, -2.714404498650743e-01},
+    {9.381913359224842e-01, -3.461170570774930e-01},
+    {9.081431738250813e-01, -4.186597375374281e-01},
+    {8.724960070727972e-01, -4.886212414969549e-01},
+    {8.314696123025452e-01, -5.555702330196022e-01},
+    {7.853169308807449e-01, -6.190939493098340e-01},
+    {7.343225094356856e-01, -6.788007455329417e-01}
 };
 
 static const cos_msin_t cos_msin_20[20] =
 {
-    {9.998072404820648e-01f, -1.963369246062830e-02f},
-    {9.982656101847159e-01f, -5.887080365118903e-02f},
-    {9.951847266721969e-01f, -9.801714032956060e-02f},
-    {9.905693404435773e-01f, -1.370123416819680e-01f},
-    {9.844265680898916e-01f, -1.757962799343545e-01f},
-    {9.767658813208724e-01f, -2.143091530650507e-01f},
-    {9.675990923602598e-01f, -2.524915770151580e-01f},
-    {9.569403357322088e-01f, -2.902846772544623e-01f},
-    {9.448060464668780e-01f, -3.276301795616935e-01f},
-    {9.312149347588036e-01f, -3.644704998791496e-01f},
-    {9.161879571171360e-01f, -4.007488331031410e-01f},
-    {8.997482840522215e-01f, -4.364092406733421e-01f},
-    {8.819212643483550e-01f, -4.713967368259976e-01f},
-    {8.627343859777918e-01f, -5.056573733779846e-01f},
-    {8.422172337162865e-01f, -5.391383229110002e-01f},
-    {8.204014435255136e-01f, -5.717879602276122e-01f},
-    {7.973206537727071e-01f, -6.035559419535714e-01f},
-    {7.730104533627370e-01f, -6.343932841636455e-01f},
-    {7.475083268625968e-01f, -6.642524379112817e-01f},
-    {7.208535967029188e-01f, -6.930873625456359e-01f}
+    {9.998072404820648e-01, -1.963369246062830e-02},
+    {9.982656101847159e-01, -5.887080365118903e-02},
+    {9.951847266721969e-01, -9.801714032956060e-02},
+    {9.905693404435773e-01, -1.370123416819680e-01},
+    {9.844265680898916e-01, -1.757962799343545e-01},
+    {9.767658813208724e-01, -2.143091530650507e-01},
+    {9.675990923602598e-01, -2.524915770151580e-01},
+    {9.569403357322088e-01, -2.902846772544623e-01},
+    {9.448060464668780e-01, -3.276301795616935e-01},
+    {9.312149347588036e-01, -3.644704998791496e-01},
+    {9.161879571171360e-01, -4.007488331031410e-01},
+    {8.997482840522215e-01, -4.364092406733421e-01},
+    {8.819212643483550e-01, -4.713967368259976e-01},
+    {8.627343859777918e-01, -5.056573733779846e-01},
+    {8.422172337162865e-01, -5.391383229110002e-01},
+    {8.204014435255136e-01, -5.717879602276122e-01},
+    {7.973206537727071e-01, -6.035559419535714e-01},
+    {7.730104533627370e-01, -6.343932841636455e-01},
+    {7.475083268625968e-01, -6.642524379112817e-01},
+    {7.208535967029188e-01, -6.930873625456359e-01}
 };
 
 static const cos_msin_t cos_msin_40[40] =
 {
-    {9.999518089593280e-01f, -9.817319337149617e-03f},
-    {9.995663085020212e-01f, -2.944817324796316e-02f},
-    {9.987954562051724e-01f, -4.906767432741801e-02f},
-    {9.976395492470157e-01f, -6.866825888437376e-02f},
-    {9.960990332516871e-01f, -8.824237052036951e-02f},
-    {9.941745021174282e-01f, -1.077824630427593e-01f},
-    {9.918666977876260e-01f, -1.272810033739132e-01f},
-    {9.891765099647810e-01f, -1.467304744553617e-01f},
-    {9.861049757675088e-01f, -1.661233781457655e-01f},
-    {9.826532793307118e-01f, -1.854522381115909e-01f},
-    {9.788227513490724e-01f, -2.047096027093796e-01f},
-    {9.746148685640450e-01f, -2.238880478584984e-01f},
-    {9.700312531945440e-01f, -2.429801799032639e-01f},
-    {9.650736723115474e-01f, -2.619786384633375e-01f},
-    {9.597440371568574e-01f, -2.808760992712921e-01f},
-    {9.540444024062804e-01f, -2.996652769962566e-01f},
-    {9.479769653775104e-01f, -3.183389280525497e-01f},
-    {9.415440651830208e-01f, -3.368898533922201e-01f},
-    {9.347481818282924e-01f, -3.553109012804161e-01f},
-    {9.275919352557240e-01f, -3.735949700525164e-01f},
-    {9.200780843345949e-01f, -3.917350108519559e-01f},
-    {9.122095257974677e-01f, -4.097240303476953e-01f},
-    {9.039892931234433e-01f, -4.275550934302821e-01f},
-    {8.954205553686970e-01f, -4.452213258854682e-01f},
-    {8.865066159447464e-01f, -4.627159170443501e-01f},
-    {8.772509113449243e-01f, -4.800321224090111e-01f},
-    {8.676570098195440e-01f, -4.971632662526544e-01f},
-    {8.577286100002721e-01f, -5.141027441932217e-01f},
-    {8.474695394742344e-01f, -5.308440257395095e-01f},
-    {8.368837533084094e-01f, -5.473806568087964e-01f},
-    {8.259753325248732e-01f, -5.637062622150167e-01f},
-    {8.147484825274894e-01f, -5.798145481265136e-01f},
-    {8.032075314806449e-01f, -5.956993044924334e-01f},
-    {7.913569286406602e-01f, -6.113544074368165e-01f},
-    {7.792012426405167e-01f, -6.267738216194696e-01f},
-    {7.667451597285615e-01f, -6.419516025627030e-01f},
-    {7.539934819618694e-01f, -6.568818989430414e-01f},
-    {7.409511253549591e-01f, -6.715589548470183e-01f},
-    {7.276231179845748e-01f, -6.859771119901928e-01f},
-    {7.140145980512683e-01f, -7.001308118985236e-01f}
+    {9.999518089593280e-01, -9.817319337149617e-03},
+    {9.995663085020212e-01, -2.944817324796316e-02},
+    {9.987954562051724e-01, -4.906767432741801e-02},
+    {9.976395492470157e-01, -6.866825888437376e-02},
+    {9.960990332516871e-01, -8.824237052036951e-02},
+    {9.941745021174282e-01, -1.077824630427593e-01},
+    {9.918666977876260e-01, -1.272810033739132e-01},
+    {9.891765099647810e-01, -1.467304744553617e-01},
+    {9.861049757675088e-01, -1.661233781457655e-01},
+    {9.826532793307118e-01, -1.854522381115909e-01},
+    {9.788227513490724e-01, -2.047096027093796e-01},
+    {9.746148685640450e-01, -2.238880478584984e-01},
+    {9.700312531945440e-01, -2.429801799032639e-01},
+    {9.650736723115474e-01, -2.619786384633375e-01},
+    {9.597440371568574e-01, -2.808760992712921e-01},
+    {9.540444024062804e-01, -2.996652769962566e-01},
+    {9.479769653775104e-01, -3.183389280525497e-01},
+    {9.415440651830208e-01, -3.368898533922201e-01},
+    {9.347481818282924e-01, -3.553109012804161e-01},
+    {9.275919352557240e-01, -3.735949700525164e-01},
+    {9.200780843345949e-01, -3.917350108519559e-01},
+    {9.122095257974677e-01, -4.097240303476953e-01},
+    {9.039892931234433e-01, -4.275550934302821e-01},
+    {8.954205553686970e-01, -4.452213258854682e-01},
+    {8.865066159447464e-01, -4.627159170443501e-01},
+    {8.772509113449243e-01, -4.800321224090111e-01},
+    {8.676570098195440e-01, -4.971632662526544e-01},
+    {8.577286100002721e-01, -5.141027441932217e-01},
+    {8.474695394742344e-01, -5.308440257395095e-01},
+    {8.368837533084094e-01, -5.473806568087964e-01},
+    {8.259753325248732e-01, -5.637062622150167e-01},
+    {8.147484825274894e-01, -5.798145481265136e-01},
+    {8.032075314806449e-01, -5.956993044924334e-01},
+    {7.913569286406602e-01, -6.113544074368165e-01},
+    {7.792012426405167e-01, -6.267738216194696e-01},
+    {7.667451597285615e-01, -6.419516025627030e-01},
+    {7.539934819618694e-01, -6.568818989430414e-01},
+    {7.409511253549591e-01, -6.715589548470183e-01},
+    {7.276231179845748e-01, -6.859771119901928e-01},
+    {7.140145980512683e-01, -7.001308118985236e-01}
 };
 
 static const cos_msin_t cos_msin_80[80] =
 {
-    {9.999879521672569e-01f, -4.908718807997990e-03f},
-    {9.998915712471080e-01f, -1.472568331145852e-02f},
-    {9.996988186962042e-01f, -2.454122852291229e-02f},
-    {9.994097130924373e-01f, -3.435440839968228e-02f},
-    {9.990242823004072e-01f, -4.416427712706736e-02f},
-    {9.985425634687357e-01f, -5.396988920950188e-02f},
-    {9.979646030264866e-01f, -6.377029956168449e-02f},
-    {9.972904566786902e-01f, -7.356456359966743e-02f},
-    {9.965201894009746e-01f, -8.335173733189745e-02f},
-    {9.956538754333033e-01f, -9.313087745019979e-02f},
-    {9.946915982728195e-01f, -1.029010414206961e-01f},
-    {9.936334506657989e-01f, -1.126612875746478e-01f},
-    {9.924795345987100e-01f, -1.224106751992162e-01f},
-    {9.912299612883853e-01f, -1.321482646281301e-01f},
-    {9.898848511713010e-01f, -1.418731173322532e-01f},
-    {9.884443338919700e-01f, -1.515842960100411e-01f},
-    {9.869085482904458e-01f, -1.612808646778805e-01f},
-    {9.852776423889412e-01f, -1.709618887603012e-01f},
-    {9.835517733775615e-01f, -1.806264351800528e-01f},
-    {9.817311075991542e-01f, -1.902735724480359e-01f},
-    {9.798158205332763e-01f, -1.999023707530817e-01f},
-    {9.778060967792817e-01f, -2.095119020515688e-01f},
-    {9.757021300385286e-01f, -2.191012401568698e-01f},
-    {9.735041230957107e-01f, -2.286694608286194e-01f},
-    {9.712122877993118e-01f, -2.382156418617946e-01f},
-    {9.688268450411880e-01f, -2.477388631755984e-01f},
-    {9.663480247352773e-01f, -2.572382069021397e-01f},
-    {9.637760657954398e-01f, -2.667127574748984e-01f},
-    {9.611112161124317e-01f, -2.761616017169707e-01f},
-    {9.583537325300114e-01f, -2.855838289290823e-01f},
-    {9.555038808201862e-01f, -2.949785309773635e-01f},
-    {9.525619356575953e-01f, -3.043448023808773e-01f},
-    {9.495281805930367e-01f, -3.136817403988915e-01f},
-    {9.464029080261377e-01f, -3.229884451178863e-01f},
-    {9.431864191771733e-01f, -3.322640195382908e-01f},
-    {9.398790240580331e-01f, -3.415075696609363e-01f},
-    {9.364810414423427e-01f, -3.507182045732232e-01f},
-    {9.329927988347390e-01f, -3.598950365349881e-01f},
-    {9.294146324393044e-01f, -3.690371810640665e-01f},
-    {9.257468871271640e-01f, -3.781437570215405e-01f},
-    {9.219899164032445e-01f, -3.872138866966656e-01f},
-    {9.181440823722039e-01f, -3.962466958914656e-01f},
-    {9.142097557035307e-01f, -4.052413140049899e-01f},
-    {9.101873155958178e-01f, -4.141968741172237e-01f},
-    {9.060771497402148e-01f, -4.231125130726441e-01f},
-    {9.018796542830616e-01f, -4.319873715634118e-01f},
-    {8.975952337877069e-01f, -4.408205942121939e-01f},
-    {8.932243011955153e-01f, -4.496113296546065e-01f},
-    {8.887672777860675e-01f, -4.583587306212713e-01f},
-    {8.842245931365562e-01f, -4.670619540194765e-01f},
-    {8.795966850803829e-01f, -4.757201610144369e-01f},
-    {8.748839996649583e-01f, -4.843325171101412e-01f},
-    {8.700869911087115e-01f, -4.928981922297840e-01f},
-    {8.652061217573113e-01f, -5.014163607957690e-01f},
-    {8.602418620391045e-01f, -5.098862018092806e-01f},
-    {8.551946904197751e-01f, -5.183068989294132e-01f},
-    {8.500650933562288e-01f, -5.266776405518521e-01f},
-    {8.448535652497071e-01f, -5.349976198870972e-01f},
-    {8.395606083981356e-01f, -5.432660350382236e-01f},
-    {8.341867329477124e-01f, -5.514820890781694e-01f},
-    {8.287324568437381e-01f, -5.596449901265460e-01f},
-    {8.231983057806959e-01f, -5.677539514259605e-01f},
-    {8.175848131515837e-01f, -5.758081914178453e-01f},
-    {8.118925199965048e-01f, -5.838069338177863e-01f},
-    {8.061219749505210e-01f, -5.917494076903429e-01f},
-    {8.002737341907743e-01f, -5.996348475233523e-01f},
-    {7.943483613828813e-01f, -6.074624933017110e-01f},
-    {7.883464276266063e-01f, -6.152315905806268e-01f},
-    {7.822685114008164e-01f, -6.229413905583340e-01f},
-    {7.761151985077279e-01f, -6.305911501482637e-01f},
-    {7.698870820164444e-01f, -6.381801320506653e-01f},
-    {7.635847622057965e-01f, -6.457076048236672e-01f},
-    {7.572088465064846e-01f, -6.531728429537768e-01f},
-    {7.507599494425343e-01f, -6.605751269258050e-01f},
-    {7.442386925720670e-01f, -6.679137432922161e-01f},
-    {7.376457044273930e-01f, -6.751879847418903e-01f},
-    {7.309816204544317e-01f, -6.823971501682968e-01f},
-    {7.242470829514670e-01f, -6.895405447370668e-01f},
-    {7.174427410072399e-01f, -6.966174799529642e-01f},
-    {7.105692504383896e-01f, -7.036272737262429e-01f}
+    {9.999879521672569e-01, -4.908718807997990e-03},
+    {9.998915712471080e-01, -1.472568331145852e-02},
+    {9.996988186962042e-01, -2.454122852291229e-02},
+    {9.994097130924373e-01, -3.435440839968228e-02},
+    {9.990242823004072e-01, -4.416427712706736e-02},
+    {9.985425634687357e-01, -5.396988920950188e-02},
+    {9.979646030264866e-01, -6.377029956168449e-02},
+    {9.972904566786902e-01, -7.356456359966743e-02},
+    {9.965201894009746e-01, -8.335173733189745e-02},
+    {9.956538754333033e-01, -9.313087745019979e-02},
+    {9.946915982728195e-01, -1.029010414206961e-01},
+    {9.936334506657989e-01, -1.126612875746478e-01},
+    {9.924795345987100e-01, -1.224106751992162e-01},
+    {9.912299612883853e-01, -1.321482646281301e-01},
+    {9.898848511713010e-01, -1.418731173322532e-01},
+    {9.884443338919700e-01, -1.515842960100411e-01},
+    {9.869085482904458e-01, -1.612808646778805e-01},
+    {9.852776423889412e-01, -1.709618887603012e-01},
+    {9.835517733775615e-01, -1.806264351800528e-01},
+    {9.817311075991542e-01, -1.902735724480359e-01},
+    {9.798158205332763e-01, -1.999023707530817e-01},
+    {9.778060967792817e-01, -2.095119020515688e-01},
+    {9.757021300385286e-01, -2.191012401568698e-01},
+    {9.735041230957107e-01, -2.286694608286194e-01},
+    {9.712122877993118e-01, -2.382156418617946e-01},
+    {9.688268450411880e-01, -2.477388631755984e-01},
+    {9.663480247352773e-01, -2.572382069021397e-01},
+    {9.637760657954398e-01, -2.667127574748984e-01},
+    {9.611112161124317e-01, -2.761616017169707e-01},
+    {9.583537325300114e-01, -2.855838289290823e-01},
+    {9.555038808201862e-01, -2.949785309773635e-01},
+    {9.525619356575953e-01, -3.043448023808773e-01},
+    {9.495281805930367e-01, -3.136817403988915e-01},
+    {9.464029080261377e-01, -3.229884451178863e-01},
+    {9.431864191771733e-01, -3.322640195382908e-01},
+    {9.398790240580331e-01, -3.415075696609363e-01},
+    {9.364810414423427e-01, -3.507182045732232e-01},
+    {9.329927988347390e-01, -3.598950365349881e-01},
+    {9.294146324393044e-01, -3.690371810640665e-01},
+    {9.257468871271640e-01, -3.781437570215405e-01},
+    {9.219899164032445e-01, -3.872138866966656e-01},
+    {9.181440823722039e-01, -3.962466958914656e-01},
+    {9.142097557035307e-01, -4.052413140049899e-01},
+    {9.101873155958178e-01, -4.141968741172237e-01},
+    {9.060771497402148e-01, -4.231125130726441e-01},
+    {9.018796542830616e-01, -4.319873715634118e-01},
+    {8.975952337877069e-01, -4.408205942121939e-01},
+    {8.932243011955153e-01, -4.496113296546065e-01},
+    {8.887672777860675e-01, -4.583587306212713e-01},
+    {8.842245931365562e-01, -4.670619540194765e-01},
+    {8.795966850803829e-01, -4.757201610144369e-01},
+    {8.748839996649583e-01, -4.843325171101412e-01},
+    {8.700869911087115e-01, -4.928981922297840e-01},
+    {8.652061217573113e-01, -5.014163607957690e-01},
+    {8.602418620391045e-01, -5.098862018092806e-01},
+    {8.551946904197751e-01, -5.183068989294132e-01},
+    {8.500650933562288e-01, -5.266776405518521e-01},
+    {8.448535652497071e-01, -5.349976198870972e-01},
+    {8.395606083981356e-01, -5.432660350382236e-01},
+    {8.341867329477124e-01, -5.514820890781694e-01},
+    {8.287324568437381e-01, -5.596449901265460e-01},
+    {8.231983057806959e-01, -5.677539514259605e-01},
+    {8.175848131515837e-01, -5.758081914178453e-01},
+    {8.118925199965048e-01, -5.838069338177863e-01},
+    {8.061219749505210e-01, -5.917494076903429e-01},
+    {8.002737341907743e-01, -5.996348475233523e-01},
+    {7.943483613828813e-01, -6.074624933017110e-01},
+    {7.883464276266063e-01, -6.152315905806268e-01},
+    {7.822685114008164e-01, -6.229413905583340e-01},
+    {7.761151985077279e-01, -6.305911501482637e-01},
+    {7.698870820164444e-01, -6.381801320506653e-01},
+    {7.635847622057965e-01, -6.457076048236672e-01},
+    {7.572088465064846e-01, -6.531728429537768e-01},
+    {7.507599494425343e-01, -6.605751269258050e-01},
+    {7.442386925720670e-01, -6.679137432922161e-01},
+    {7.376457044273930e-01, -6.751879847418903e-01},
+    {7.309816204544317e-01, -6.823971501682968e-01},
+    {7.242470829514670e-01, -6.895405447370668e-01},
+    {7.174427410072399e-01, -6.966174799529642e-01},
+    {7.105692504383896e-01, -7.036272737262429e-01}
 };
 
 static const cos_msin_t cos_msin_160[160] =
 {
-    {9.999969880372782e-01f, -2.454366796460292e-03f},
-    {9.999728924443673e-01f, -7.363041249779567e-03f},
-    {9.999247018391445e-01f, -1.227153828571993e-02f},
-    {9.998524173827948e-01f, -1.717973963077875e-02f},
-    {9.997560408170603e-01f, -2.208752701857829e-02f},
-    {9.996355744641984e-01f, -2.699478219271537e-02f},
-    {9.994910212269259e-01f, -3.190138690961086e-02f},
-    {9.993223845883495e-01f, -3.680722294135883e-02f},
-    {9.991296686118811e-01f, -4.171217207857533e-02f},
-    {9.989128779411404e-01f, -4.661611613324671e-02f},
-    {9.986720177998429e-01f, -5.151893694157748e-02f},
-    {9.984070939916740e-01f, -5.642051636683749e-02f},
-    {9.981181129001492e-01f, -6.132073630220858e-02f},
-    {9.978050814884601e-01f, -6.621947867363034e-02f},
-    {9.974680072993071e-01f, -7.111662544264533e-02f},
-    {9.971068984547168e-01f, -7.601205860924312e-02f},
-    {9.967217636558474e-01f, -8.090566021470375e-02f},
-    {9.963126121827780e-01f, -8.579731234443989e-02f},
-    {9.958794538942858e-01f, -9.068689713083816e-02f},
-    {9.954222992276077e-01f, -9.557429675609919e-02f},
-    {9.949411591981900e-01f, -1.004593934550765e-01f},
-    {9.944360453994218e-01f, -1.053420695181141e-01f},
-    {9.939069700023561e-01f, -1.102222072938831e-01f},
-    {9.933539457554167e-01f, -1.150996891922159e-01f},
-    {9.927769859840909e-01f, -1.199743976869403e-01f},
-    {9.921761045906085e-01f, -1.248462153187112e-01f},
-    {9.915513160536062e-01f, -1.297150246978405e-01f},
-    {9.909026354277800e-01f, -1.345807085071262e-01f},
-    {9.902300783435211e-01f, -1.394431495046788e-01f},
-    {9.895336610065398e-01f, -1.443022305267465e-01f},
-    {9.888134001974757e-01f, -1.491578344905386e-01f},
-    {9.880693132714919e-01f, -1.540098443970461e-01f},
-    {9.873014181578584e-01f, -1.588581433338614e-01f},
-    {9.865097333595187e-01f, -1.637026144779952e-01f},
-    {9.856942779526452e-01f, -1.685431410986913e-01f},
-    {9.848550715861784e-01f, -1.733796065602395e-01f},
-    {9.839921344813541e-01f, -1.782118943247859e-01f},
-    {9.831054874312163e-01f, -1.830398879551410e-01f},
-    {9.821951518001156e-01f, -1.878634711175852e-01f},
-    {9.812611495231950e-01f, -1.926825275846723e-01f},
-    {9.803035031058607e-01f, -1.974969412380297e-01f},
-    {9.793222356232406e-01f, -2.023065960711564e-01f},
-    {9.783173707196277e-01f, -2.071113761922186e-01f},
-    {9.772889326079104e-01f, -2.119111658268416e-01f},
-    {9.762369460689896e-01f, -2.167058493209000e-01f},
-    {9.751614364511810e-01f, -2.214953111433043e-01f},
-    {9.740624296696047e-01f, -2.262794358887845e-01f},
-    {9.729399522055602e-01f, -2.310581082806711e-01f},
-    {9.717940311058891e-01f, -2.358312131736727e-01f},
-    {9.706246939823230e-01f, -2.405986355566504e-01f},
-    {9.694319690108180e-01f, -2.453602605553894e-01f},
-    {9.682158849308760e-01f, -2.501159734353663e-01f},
-    {9.669764710448521e-01f, -2.548656596045146e-01f},
-    {9.657137572172489e-01f, -2.596092046159851e-01f},
-    {9.644277738739964e-01f, -2.643464941709040e-01f},
-    {9.631185520017188e-01f, -2.690774141211269e-01f},
-    {9.617861231469886e-01f, -2.738018504719892e-01f},
-    {9.604305194155658e-01f, -2.785196893850531e-01f},
-    {9.590517734716243e-01f, -2.832308171808502e-01f},
-    {9.576499185369652e-01f, -2.879351203416211e-01f},
-    {9.562249883902162e-01f, -2.926324855140505e-01f},
-    {9.547770173660172e-01f, -2.973227995119985e-01f},
-    {9.533060403541939e-01f, -3.020059493192281e-01f},
-    {9.518120927989161e-01f, -3.066818220921279e-01f},
-    {9.502952106978444e-01f, -3.113503051624320e-01f},
-    {9.487554306012626e-01f, -3.160112860399338e-01f},
-    {9.471927896111967e-01f, -3.206646524151973e-01f},
-    {9.456073253805213e-01f, -3.253102921622629e-01f},
-    {9.439990761120522e-01f, -3.299480933413494e-01f},
-    {9.423680805576258e-01f, -3.345779442015508e-01f},
-    {9.407143780171653e-01f, -3.391997331835298e-01f},
-    {9.390380083377340e-01f, -3.438133489222048e-01f},
-    {9.373390119125750e-01f, -3.484186802494346e-01f},
-    {9.356174296801376e-01f, -3.530156161966958e-01f},
-    {9.338733031230915e-01f, -3.576040459977578e-01f},
-    {9.321066742673269e-01f, -3.621838590913509e-01f},
-    {9.303175856809415e-01f, -3.667549451238308e-01f},
-    {9.285060804732156e-01f, -3.713171939518375e-01f},
-    {9.266722022935726e-01f, -3.758704956449495e-01f},
-    {9.248159953305278e-01f, -3.804147404883323e-01f},
-    {9.229375043106232e-01f, -3.849498189853822e-01f},
-    {9.210367744973499e-01f, -3.894756218603648e-01f},
-    {9.191138516900578e-01f, -3.939920400610481e-01f},
-    {9.171687822228516e-01f, -3.984989647613298e-01f},
-    {9.152016129634744e-01f, -4.029962873638600e-01f},
-    {9.132123913121788e-01f, -4.074838995026576e-01f},
-    {9.112011652005843e-01f, -4.119616930457218e-01f},
-    {9.091679830905224e-01f, -4.164295600976372e-01f},
-    {9.071128939728691e-01f, -4.208873930021739e-01f},
-    {9.050359473663644e-01f, -4.253350843448814e-01f},
-    {9.029371933164189e-01f, -4.297725269556770e-01f},
-    {9.008166823939081e-01f, -4.341996139114278e-01f},
-    {8.986744656939538e-01f, -4.386162385385277e-01f},
-    {8.965105948346932e-01f, -4.430222944154668e-01f},
-    {8.943251219560346e-01f, -4.474176753753967e-01f},
-    {8.921180997184014e-01f, -4.518022755086881e-01f},
-    {8.898895813014630e-01f, -4.561759891654830e-01f},
-    {8.876396204028539e-01f, -4.605387109582400e-01f},
-    {8.853682712368793e-01f, -4.648903357642744e-01f},
-    {8.830755885332088e-01f, -4.692307587282903e-01f},
-    {8.807616275355579e-01f, -4.735598752649081e-01f},
-    {8.784264440003567e-01f, -4.778775810611837e-01f},
-    {8.760700941954066e-01f, -4.821837720791227e-01f},
-    {8.736926348985243e-01f, -4.864783445581868e-01f},
-    {8.712941233961736e-01f, -4.907611950177941e-01f},
-    {8.688746174820854e-01f, -4.950322202598127e-01f},
-    {8.664341754558650e-01f, -4.992913173710469e-01f},
-    {8.639728561215868e-01f, -5.035383837257176e-01f},
-    {8.614907187863783e-01f, -5.077733169879345e-01f},
-    {8.589878232589904e-01f, -5.119960151141624e-01f},
-    {8.564642298483565e-01f, -5.162063763556797e-01f},
-    {8.539199993621391e-01f, -5.204042992610306e-01f},
-    {8.513551931052652e-01f, -5.245896826784689e-01f},
-    {8.487698728784481e-01f, -5.287624257583958e-01f},
-    {8.461641009766995e-01f, -5.329224279557898e-01f},
-    {8.435379401878270e-01f, -5.370695890326298e-01f},
-    {8.408914537909229e-01f, -5.412038090603096e-01f},
-    {8.382247055548381e-01f, -5.453249884220465e-01f},
-    {8.355377597366458e-01f, -5.494330278152808e-01f},
-    {8.328306810800937e-01f, -5.535278282540700e-01f},
-    {8.301035348140438e-01f, -5.576092910714722e-01f},
-    {8.273563866508998e-01f, -5.616773179219247e-01f},
-    {8.245893027850253e-01f, -5.657318107836131e-01f},
-    {8.218023498911473e-01f, -5.697726719608341e-01f},
-    {8.189955951227504e-01f, -5.737998040863485e-01f},
-    {8.161691061104588e-01f, -5.778131101237274e-01f},
-    {8.133229509604062e-01f, -5.818124933696910e-01f},
-    {8.104571982525948e-01f, -5.857978574564389e-01f},
-    {8.075719170392435e-01f, -5.897691063539708e-01f},
-    {8.046671768431229e-01f, -5.937261443724019e-01f},
-    {8.017430476558816e-01f, -5.976688761642677e-01f},
-    {7.987995999363579e-01f, -6.015972067268220e-01f},
-    {7.958369046088836e-01f, -6.055110414043255e-01f},
-    {7.928550330615741e-01f, -6.094102858903271e-01f},
-    {7.898540571446090e-01f, -6.132948462299359e-01f},
-    {7.868340491684999e-01f, -6.171646288220856e-01f},
-    {7.837950819023488e-01f, -6.210195404217892e-01f},
-    {7.807372285720945e-01f, -6.248594881423863e-01f},
-    {7.776605628587479e-01f, -6.286843794577813e-01f},
-    {7.745651588966166e-01f, -6.324941222046724e-01f},
-    {7.714510912715192e-01f, -6.362886245847729e-01f},
-    {7.683184350189877e-01f, -6.400677951670226e-01f},
-    {7.651672656224590e-01f, -6.438315428897914e-01f},
-    {7.619976590114568e-01f, -6.475797770630733e-01f},
-    {7.588096915597616e-01f, -6.513124073706714e-01f},
-    {7.556034400835709e-01f, -6.550293438723744e-01f},
-    {7.523789818396478e-01f, -6.587304970061237e-01f},
-    {7.491363945234594e-01f, -6.624157775901718e-01f},
-    {7.458757562673048e-01f, -6.660850968252301e-01f},
-    {7.425971456384329e-01f, -6.697383662966099e-01f},
-    {7.393006416371488e-01f, -6.733754979763520e-01f},
-    {7.359863236949099e-01f, -6.769964042253483e-01f},
-    {7.326542716724128e-01f, -6.806009977954530e-01f},
-    {7.293045658576685e-01f, -6.841891918315852e-01f},
-    {7.259372869640676e-01f, -6.877608998738217e-01f},
-    {7.225525161284360e-01f, -6.913160358594803e-01f},
-    {7.191503349090794e-01f, -6.948545141251936e-01f},
-    {7.157308252838186e-01f, -6.983762494089729e-01f},
-    {7.122940696480137e-01f, -7.018811568522627e-01f},
-    {7.088401508125785e-01f, -7.053691520019861e-01f}
+    {9.999969880372782e-01, -2.454366796460292e-03},
+    {9.999728924443673e-01, -7.363041249779567e-03},
+    {9.999247018391445e-01, -1.227153828571993e-02},
+    {9.998524173827948e-01, -1.717973963077875e-02},
+    {9.997560408170603e-01, -2.208752701857829e-02},
+    {9.996355744641984e-01, -2.699478219271537e-02},
+    {9.994910212269259e-01, -3.190138690961086e-02},
+    {9.993223845883495e-01, -3.680722294135883e-02},
+    {9.991296686118811e-01, -4.171217207857533e-02},
+    {9.989128779411404e-01, -4.661611613324671e-02},
+    {9.986720177998429e-01, -5.151893694157748e-02},
+    {9.984070939916740e-01, -5.642051636683749e-02},
+    {9.981181129001492e-01, -6.132073630220858e-02},
+    {9.978050814884601e-01, -6.621947867363034e-02},
+    {9.974680072993071e-01, -7.111662544264533e-02},
+    {9.971068984547168e-01, -7.601205860924312e-02},
+    {9.967217636558474e-01, -8.090566021470375e-02},
+    {9.963126121827780e-01, -8.579731234443989e-02},
+    {9.958794538942858e-01, -9.068689713083816e-02},
+    {9.954222992276077e-01, -9.557429675609919e-02},
+    {9.949411591981900e-01, -1.004593934550765e-01},
+    {9.944360453994218e-01, -1.053420695181141e-01},
+    {9.939069700023561e-01, -1.102222072938831e-01},
+    {9.933539457554167e-01, -1.150996891922159e-01},
+    {9.927769859840909e-01, -1.199743976869403e-01},
+    {9.921761045906085e-01, -1.248462153187112e-01},
+    {9.915513160536062e-01, -1.297150246978405e-01},
+    {9.909026354277800e-01, -1.345807085071262e-01},
+    {9.902300783435211e-01, -1.394431495046788e-01},
+    {9.895336610065398e-01, -1.443022305267465e-01},
+    {9.888134001974757e-01, -1.491578344905386e-01},
+    {9.880693132714919e-01, -1.540098443970461e-01},
+    {9.873014181578584e-01, -1.588581433338614e-01},
+    {9.865097333595187e-01, -1.637026144779952e-01},
+    {9.856942779526452e-01, -1.685431410986913e-01},
+    {9.848550715861784e-01, -1.733796065602395e-01},
+    {9.839921344813541e-01, -1.782118943247859e-01},
+    {9.831054874312163e-01, -1.830398879551410e-01},
+    {9.821951518001156e-01, -1.878634711175852e-01},
+    {9.812611495231950e-01, -1.926825275846723e-01},
+    {9.803035031058607e-01, -1.974969412380297e-01},
+    {9.793222356232406e-01, -2.023065960711564e-01},
+    {9.783173707196277e-01, -2.071113761922186e-01},
+    {9.772889326079104e-01, -2.119111658268416e-01},
+    {9.762369460689896e-01, -2.167058493209000e-01},
+    {9.751614364511810e-01, -2.214953111433043e-01},
+    {9.740624296696047e-01, -2.262794358887845e-01},
+    {9.729399522055602e-01, -2.310581082806711e-01},
+    {9.717940311058891e-01, -2.358312131736727e-01},
+    {9.706246939823230e-01, -2.405986355566504e-01},
+    {9.694319690108180e-01, -2.453602605553894e-01},
+    {9.682158849308760e-01, -2.501159734353663e-01},
+    {9.669764710448521e-01, -2.548656596045146e-01},
+    {9.657137572172489e-01, -2.596092046159851e-01},
+    {9.644277738739964e-01, -2.643464941709040e-01},
+    {9.631185520017188e-01, -2.690774141211269e-01},
+    {9.617861231469886e-01, -2.738018504719892e-01},
+    {9.604305194155658e-01, -2.785196893850531e-01},
+    {9.590517734716243e-01, -2.832308171808502e-01},
+    {9.576499185369652e-01, -2.879351203416211e-01},
+    {9.562249883902162e-01, -2.926324855140505e-01},
+    {9.547770173660172e-01, -2.973227995119985e-01},
+    {9.533060403541939e-01, -3.020059493192281e-01},
+    {9.518120927989161e-01, -3.066818220921279e-01},
+    {9.502952106978444e-01, -3.113503051624320e-01},
+    {9.487554306012626e-01, -3.160112860399338e-01},
+    {9.471927896111967e-01, -3.206646524151973e-01},
+    {9.456073253805213e-01, -3.253102921622629e-01},
+    {9.439990761120522e-01, -3.299480933413494e-01},
+    {9.423680805576258e-01, -3.345779442015508e-01},
+    {9.407143780171653e-01, -3.391997331835298e-01},
+    {9.390380083377340e-01, -3.438133489222048e-01},
+    {9.373390119125750e-01, -3.484186802494346e-01},
+    {9.356174296801376e-01, -3.530156161966958e-01},
+    {9.338733031230915e-01, -3.576040459977578e-01},
+    {9.321066742673269e-01, -3.621838590913509e-01},
+    {9.303175856809415e-01, -3.667549451238308e-01},
+    {9.285060804732156e-01, -3.713171939518375e-01},
+    {9.266722022935726e-01, -3.758704956449495e-01},
+    {9.248159953305278e-01, -3.804147404883323e-01},
+    {9.229375043106232e-01, -3.849498189853822e-01},
+    {9.210367744973499e-01, -3.894756218603648e-01},
+    {9.191138516900578e-01, -3.939920400610481e-01},
+    {9.171687822228516e-01, -3.984989647613298e-01},
+    {9.152016129634744e-01, -4.029962873638600e-01},
+    {9.132123913121788e-01, -4.074838995026576e-01},
+    {9.112011652005843e-01, -4.119616930457218e-01},
+    {9.091679830905224e-01, -4.164295600976372e-01},
+    {9.071128939728691e-01, -4.208873930021739e-01},
+    {9.050359473663644e-01, -4.253350843448814e-01},
+    {9.029371933164189e-01, -4.297725269556770e-01},
+    {9.008166823939081e-01, -4.341996139114278e-01},
+    {8.986744656939538e-01, -4.386162385385277e-01},
+    {8.965105948346932e-01, -4.430222944154668e-01},
+    {8.943251219560346e-01, -4.474176753753967e-01},
+    {8.921180997184014e-01, -4.518022755086881e-01},
+    {8.898895813014630e-01, -4.561759891654830e-01},
+    {8.876396204028539e-01, -4.605387109582400e-01},
+    {8.853682712368793e-01, -4.648903357642744e-01},
+    {8.830755885332088e-01, -4.692307587282903e-01},
+    {8.807616275355579e-01, -4.735598752649081e-01},
+    {8.784264440003567e-01, -4.778775810611837e-01},
+    {8.760700941954066e-01, -4.821837720791227e-01},
+    {8.736926348985243e-01, -4.864783445581868e-01},
+    {8.712941233961736e-01, -4.907611950177941e-01},
+    {8.688746174820854e-01, -4.950322202598127e-01},
+    {8.664341754558650e-01, -4.992913173710469e-01},
+    {8.639728561215868e-01, -5.035383837257176e-01},
+    {8.614907187863783e-01, -5.077733169879345e-01},
+    {8.589878232589904e-01, -5.119960151141624e-01},
+    {8.564642298483565e-01, -5.162063763556797e-01},
+    {8.539199993621391e-01, -5.204042992610306e-01},
+    {8.513551931052652e-01, -5.245896826784689e-01},
+    {8.487698728784481e-01, -5.287624257583958e-01},
+    {8.461641009766995e-01, -5.329224279557898e-01},
+    {8.435379401878270e-01, -5.370695890326298e-01},
+    {8.408914537909229e-01, -5.412038090603096e-01},
+    {8.382247055548381e-01, -5.453249884220465e-01},
+    {8.355377597366458e-01, -5.494330278152808e-01},
+    {8.328306810800937e-01, -5.535278282540700e-01},
+    {8.301035348140438e-01, -5.576092910714722e-01},
+    {8.273563866508998e-01, -5.616773179219247e-01},
+    {8.245893027850253e-01, -5.657318107836131e-01},
+    {8.218023498911473e-01, -5.697726719608341e-01},
+    {8.189955951227504e-01, -5.737998040863485e-01},
+    {8.161691061104588e-01, -5.778131101237274e-01},
+    {8.133229509604062e-01, -5.818124933696910e-01},
+    {8.104571982525948e-01, -5.857978574564389e-01},
+    {8.075719170392435e-01, -5.897691063539708e-01},
+    {8.046671768431229e-01, -5.937261443724019e-01},
+    {8.017430476558816e-01, -5.976688761642677e-01},
+    {7.987995999363579e-01, -6.015972067268220e-01},
+    {7.958369046088836e-01, -6.055110414043255e-01},
+    {7.928550330615741e-01, -6.094102858903271e-01},
+    {7.898540571446090e-01, -6.132948462299359e-01},
+    {7.868340491684999e-01, -6.171646288220856e-01},
+    {7.837950819023488e-01, -6.210195404217892e-01},
+    {7.807372285720945e-01, -6.248594881423863e-01},
+    {7.776605628587479e-01, -6.286843794577813e-01},
+    {7.745651588966166e-01, -6.324941222046724e-01},
+    {7.714510912715192e-01, -6.362886245847729e-01},
+    {7.683184350189877e-01, -6.400677951670226e-01},
+    {7.651672656224590e-01, -6.438315428897914e-01},
+    {7.619976590114568e-01, -6.475797770630733e-01},
+    {7.588096915597616e-01, -6.513124073706714e-01},
+    {7.556034400835709e-01, -6.550293438723744e-01},
+    {7.523789818396478e-01, -6.587304970061237e-01},
+    {7.491363945234594e-01, -6.624157775901718e-01},
+    {7.458757562673048e-01, -6.660850968252301e-01},
+    {7.425971456384329e-01, -6.697383662966099e-01},
+    {7.393006416371488e-01, -6.733754979763520e-01},
+    {7.359863236949099e-01, -6.769964042253483e-01},
+    {7.326542716724128e-01, -6.806009977954530e-01},
+    {7.293045658576685e-01, -6.841891918315852e-01},
+    {7.259372869640676e-01, -6.877608998738217e-01},
+    {7.225525161284360e-01, -6.913160358594803e-01},
+    {7.191503349090794e-01, -6.948545141251936e-01},
+    {7.157308252838186e-01, -6.983762494089729e-01},
+    {7.122940696480137e-01, -7.018811568522627e-01},
+    {7.088401508125785e-01, -7.053691520019861e-01}
 };
 
 static const cos_msin_t cos_msin_320[320] =
 {
-    {9.999992470090361e-01f, -1.227184322288852e-03f},
-    {9.999932230881285e-01f, -3.681545574399692e-03f},
-    {9.999811752826011e-01f, -6.135884649154475e-03f},
-    {9.999631036650289e-01f, -8.590186761797602e-03f},
-    {9.999390083442741e-01f, -1.104443712779613e-02f},
-    {9.999088894654848e-01f, -1.349862096292883e-02f},
-    {9.998727472100952e-01f, -1.595272348337527e-02f},
-    {9.998305817958234e-01f, -1.840672990580482e-02f},
-    {9.997823934766707e-01f, -2.086062544746576e-02f},
-    {9.997281825429201e-01f, -2.331439532627430e-02f},
-    {9.996679493211340e-01f, -2.576802476090363e-02f},
-    {9.996016941741530e-01f, -2.822149897087298e-02f},
-    {9.995294175010931e-01f, -3.067480317663663e-02f},
-    {9.994511197373437e-01f, -3.312792259967294e-02f},
-    {9.993668013545645e-01f, -3.558084246257342e-02f},
-    {9.992764628606833e-01f, -3.803354798913168e-02f},
-    {9.991801047998923e-01f, -4.048602440443251e-02f},
-    {9.990777277526454e-01f, -4.293825693494082e-02f},
-    {9.989693323356542e-01f, -4.539023080859068e-02f},
-    {9.988549192018848e-01f, -4.784193125487429e-02f},
-    {9.987344890405533e-01f, -5.029334350493095e-02f},
-    {9.986080425771219e-01f, -5.274445279163603e-02f},
-    {9.984755805732948e-01f, -5.519524434968993e-02f},
-    {9.983371038270131e-01f, -5.764570341570704e-02f},
-    {9.981926131724506e-01f, -6.009581522830464e-02f},
-    {9.980421094800079e-01f, -6.254556502819182e-02f},
-    {9.978855936563085e-01f, -6.499493805825848e-02f},
-    {9.977230666441916e-01f, -6.744391956366405e-02f},
-    {9.975545294227081e-01f, -6.989249479192657e-02f},
-    {9.973799830071135e-01f, -7.234064899301137e-02f},
-    {9.971994284488623e-01f, -7.478836741942015e-02f},
-    {9.970128668356021e-01f, -7.723563532627951e-02f},
-    {9.968202992911657e-01f, -7.968243797143013e-02f},
-    {9.966217269755658e-01f, -8.212876061551522e-02f},
-    {9.964171510849874e-01f, -8.457458852206962e-02f},
-    {9.962065728517802e-01f, -8.701990695760831e-02f},
-    {9.959899935444517e-01f, -8.946470119171543e-02f},
-    {9.957674144676598e-01f, -9.190895649713272e-02f},
-    {9.955388369622040e-01f, -9.435265814984850e-02f},
-    {9.953042624050182e-01f, -9.679579142918618e-02f},
-    {9.950636922091622e-01f, -9.923834161789306e-02f},
-    {9.948171278238128e-01f, -1.016802940022289e-01f},
-    {9.945645707342554e-01f, -1.041216338720546e-01f},
-    {9.943060224618753e-01f, -1.065623465209208e-01f},
-    {9.940414845641478e-01f, -1.090024172461564e-01f},
-    {9.937709586346295e-01f, -1.114418313489574e-01f},
-    {9.934944463029486e-01f, -1.138805741344751e-01f},
-    {9.932119492347945e-01f, -1.163186309119048e-01f},
-    {9.929234691319088e-01f, -1.187559869945741e-01f},
-    {9.926290077320739e-01f, -1.211926277000318e-01f},
-    {9.923285668091033e-01f, -1.236285383501360e-01f},
-    {9.920221481728309e-01f, -1.260637042711424e-01f},
-    {9.917097536690995e-01f, -1.284981107937932e-01f},
-    {9.913913851797506e-01f, -1.309317432534049e-01f},
-    {9.910670446226119e-01f, -1.333645869899571e-01f},
-    {9.907367339514870e-01f, -1.357966273481804e-01f},
-    {9.904004551561425e-01f, -1.382278496776452e-01f},
-    {9.900582102622971e-01f, -1.406582393328492e-01f},
-    {9.897100013316084e-01f, -1.430877816733065e-01f},
-    {9.893558304616609e-01f, -1.455164620636352e-01f},
-    {9.889956997859536e-01f, -1.479442658736455e-01f},
-    {9.886296114738869e-01f, -1.503711784784285e-01f},
-    {9.882575677307495e-01f, -1.527971852584434e-01f},
-    {9.878795707977051e-01f, -1.552222715996064e-01f},
-    {9.874956229517791e-01f, -1.576464228933781e-01f},
-    {9.871057265058446e-01f, -1.600696245368518e-01f},
-    {9.867098838086088e-01f, -1.624918619328416e-01f},
-    {9.863080972445987e-01f, -1.649131204899699e-01f},
-    {9.859003692341464e-01f, -1.673333856227558e-01f},
-    {9.854867022333751e-01f, -1.697526427517024e-01f},
-    {9.850670987341841e-01f, -1.721708773033852e-01f},
-    {9.846415612642334e-01f, -1.745880747105397e-01f},
-    {9.842100923869290e-01f, -1.770042204121487e-01f},
-    {9.837726947014075e-01f, -1.794192998535309e-01f},
-    {9.833293708425197e-01f, -1.818332984864276e-01f},
-    {9.828801234808157e-01f, -1.842462017690910e-01f},
-    {9.824249553225278e-01f, -1.866579951663718e-01f},
-    {9.819638691095552e-01f, -1.890686641498062e-01f},
-    {9.814968676194470e-01f, -1.914781941977041e-01f},
-    {9.810239536653852e-01f, -1.938865707952361e-01f},
-    {9.805451300961683e-01f, -1.962937794345212e-01f},
-    {9.800603997961936e-01f, -1.986998056147138e-01f},
-    {9.795697656854405e-01f, -2.011046348420919e-01f},
-    {9.790732307194523e-01f, -2.035082526301433e-01f},
-    {9.785707978893183e-01f, -2.059106444996538e-01f},
-    {9.780624702216568e-01f, -2.083117959787937e-01f},
-    {9.775482507785956e-01f, -2.107116926032057e-01f},
-    {9.770281426577544e-01f, -2.131103199160914e-01f},
-    {9.765021489922255e-01f, -2.155076634682986e-01f},
-    {9.759702729505557e-01f, -2.179037088184086e-01f},
-    {9.754325177367266e-01f, -2.202984415328229e-01f},
-    {9.748888865901355e-01f, -2.226918471858500e-01f},
-    {9.743393827855759e-01f, -2.250839113597928e-01f},
-    {9.737840096332177e-01f, -2.274746196450351e-01f},
-    {9.732227704785874e-01f, -2.298639576401283e-01f},
-    {9.726556687025479e-01f, -2.322519109518786e-01f},
-    {9.720827077212779e-01f, -2.346384651954331e-01f},
-    {9.715038909862518e-01f, -2.370236059943672e-01f},
-    {9.709192219842182e-01f, -2.394073189807704e-01f},
-    {9.703287042371799e-01f, -2.417895897953334e-01f},
-    {9.697323413023714e-01f, -2.441704040874346e-01f},
-    {9.691301367722388e-01f, -2.465497475152259e-01f},
-    {9.685220942744174e-01f, -2.489276057457201e-01f},
-    {9.679082174717095e-01f, -2.513039644548766e-01f},
-    {9.672885100620635e-01f, -2.536788093276874e-01f},
-    {9.666629757785506e-01f, -2.560521260582643e-01f},
-    {9.660316183893426e-01f, -2.584239003499241e-01f},
-    {9.653944416976894e-01f, -2.607941179152755e-01f},
-    {9.647514495418958e-01f, -2.631627644763044e-01f},
-    {9.641026457952987e-01f, -2.655298257644607e-01f},
-    {9.634480343662435e-01f, -2.678952875207434e-01f},
-    {9.627876191980606e-01f, -2.702591354957875e-01f},
-    {9.621214042690416e-01f, -2.726213554499490e-01f},
-    {9.614493935924158e-01f, -2.749819331533909e-01f},
-    {9.607715912163253e-01f, -2.773408543861692e-01f},
-    {9.600880012238011e-01f, -2.796981049383182e-01f},
-    {9.593986277327383e-01f, -2.820536706099365e-01f},
-    {9.587034748958716e-01f, -2.844075372112719e-01f},
-    {9.580025469007496e-01f, -2.867596905628075e-01f},
-    {9.572958479697103e-01f, -2.891101164953470e-01f},
-    {9.565833823598556e-01f, -2.914588008500998e-01f},
-    {9.558651543630251e-01f, -2.938057294787664e-01f},
-    {9.551411683057708e-01f, -2.961508882436238e-01f},
-    {9.544114285493304e-01f, -2.984942630176104e-01f},
-    {9.536759394896021e-01f, -3.008358396844112e-01f},
-    {9.529347055571170e-01f, -3.031756041385431e-01f},
-    {9.521877312170133e-01f, -3.055135422854393e-01f},
-    {9.514350209690083e-01f, -3.078496400415349e-01f},
-    {9.506765793473728e-01f, -3.101838833343510e-01f},
-    {9.499124109209025e-01f, -3.125162581025802e-01f},
-    {9.491425202928909e-01f, -3.148467502961706e-01f},
-    {9.483669121011018e-01f, -3.171753458764112e-01f},
-    {9.475855910177411e-01f, -3.195020308160157e-01f},
-    {9.467985617494289e-01f, -3.218267910992075e-01f},
-    {9.460058290371707e-01f, -3.241496127218040e-01f},
-    {9.452073976563291e-01f, -3.264704816913009e-01f},
-    {9.444032724165956e-01f, -3.287893840269567e-01f},
-    {9.435934581619604e-01f, -3.311063057598764e-01f},
-    {9.427779597706842e-01f, -3.334212329330963e-01f},
-    {9.419567821552687e-01f, -3.357341516016679e-01f},
-    {9.411299302624264e-01f, -3.380450478327413e-01f},
-    {9.402974090730516e-01f, -3.403539077056500e-01f},
-    {9.394592236021899e-01f, -3.426607173119944e-01f},
-    {9.386153788990080e-01f, -3.449654627557252e-01f},
-    {9.377658800467635e-01f, -3.472681301532278e-01f},
-    {9.369107321627741e-01f, -3.495687056334055e-01f},
-    {9.360499403983871e-01f, -3.518671753377630e-01f},
-    {9.351835099389476e-01f, -3.541635254204903e-01f},
-    {9.343114460037683e-01f, -3.564577420485457e-01f},
-    {9.334337538460973e-01f, -3.587498114017393e-01f},
-    {9.325504387530866e-01f, -3.610397196728160e-01f},
-    {9.316615060457607e-01f, -3.633274530675394e-01f},
-    {9.307669610789837e-01f, -3.656129978047739e-01f},
-    {9.298668092414279e-01f, -3.678963401165684e-01f},
-    {9.289610559555410e-01f, -3.701774662482391e-01f},
-    {9.280497066775131e-01f, -3.724563624584523e-01f},
-    {9.271327668972442e-01f, -3.747330150193071e-01f},
-    {9.262102421383114e-01f, -3.770074102164183e-01f},
-    {9.252821379579349e-01f, -3.792795343489985e-01f},
-    {9.243484599469451e-01f, -3.815493737299417e-01f},
-    {9.234092137297489e-01f, -3.838169146859046e-01f},
-    {9.224644049642953e-01f, -3.860821435573893e-01f},
-    {9.215140393420420e-01f, -3.883450466988262e-01f},
-    {9.205581225879205e-01f, -3.906056104786556e-01f},
-    {9.195966604603021e-01f, -3.928638212794095e-01f},
-    {9.186296587509630e-01f, -3.951196654977946e-01f},
-    {9.176571232850496e-01f, -3.973731295447735e-01f},
-    {9.166790599210427e-01f, -3.996241998456468e-01f},
-    {9.156954745507232e-01f, -4.018728628401348e-01f},
-    {9.147063730991362e-01f, -4.041191049824593e-01f},
-    {9.137117615245548e-01f, -4.063629127414251e-01f},
-    {9.127116458184452e-01f, -4.086042726005015e-01f},
-    {9.117060320054299e-01f, -4.108431710579039e-01f},
-    {9.106949261432513e-01f, -4.130795946266749e-01f},
-    {9.096783343227359e-01f, -4.153135298347656e-01f},
-    {9.086562626677570e-01f, -4.175449632251170e-01f},
-    {9.076287173351980e-01f, -4.197738813557405e-01f},
-    {9.065957045149153e-01f, -4.220002707997997e-01f},
-    {9.055572304297014e-01f, -4.242241181456904e-01f},
-    {9.045133013352465e-01f, -4.264454099971220e-01f},
-    {9.034639235201017e-01f, -4.286641329731982e-01f},
-    {9.024091033056408e-01f, -4.308802737084970e-01f},
-    {9.013488470460220e-01f, -4.330938188531520e-01f},
-    {9.002831611281501e-01f, -4.353047550729321e-01f},
-    {8.992120519716374e-01f, -4.375130690493225e-01f},
-    {8.981355260287659e-01f, -4.397187474796043e-01f},
-    {8.970535897844474e-01f, -4.419217770769352e-01f},
-    {8.959662497561852e-01f, -4.441221445704292e-01f},
-    {8.948735124940346e-01f, -4.463198367052365e-01f},
-    {8.937753845805634e-01f, -4.485148402426236e-01f},
-    {8.926718726308122e-01f, -4.507071419600526e-01f},
-    {8.915629832922548e-01f, -4.528967286512617e-01f},
-    {8.904487232447579e-01f, -4.550835871263438e-01f},
-    {8.893290992005409e-01f, -4.572677042118265e-01f},
-    {8.882041179041357e-01f, -4.594490667507513e-01f},
-    {8.870737861323454e-01f, -4.616276616027529e-01f},
-    {8.859381106942048e-01f, -4.638034756441384e-01f},
-    {8.847970984309378e-01f, -4.659764957679662e-01f},
-    {8.836507562159172e-01f, -4.681467088841250e-01f},
-    {8.824990909546231e-01f, -4.703141019194129e-01f},
-    {8.813421095846011e-01f, -4.724786618176158e-01f},
-    {8.801798190754208e-01f, -4.746403755395864e-01f},
-    {8.790122264286335e-01f, -4.767992300633221e-01f},
-    {8.778393386777302e-01f, -4.789552123840445e-01f},
-    {8.766611628880995e-01f, -4.811083095142767e-01f},
-    {8.754777061569843e-01f, -4.832585084839222e-01f},
-    {8.742889756134398e-01f, -4.854057963403425e-01f},
-    {8.730949784182901e-01f, -4.875501601484360e-01f},
-    {8.718957217640854e-01f, -4.896915869907146e-01f},
-    {8.706912128750582e-01f, -4.918300639673830e-01f},
-    {8.694814590070804e-01f, -4.939655781964152e-01f},
-    {8.682664674476190e-01f, -4.960981168136327e-01f},
-    {8.670462455156926e-01f, -4.982276669727819e-01f},
-    {8.658208005618273e-01f, -5.003542158456112e-01f},
-    {8.645901399680118e-01f, -5.024777506219491e-01f},
-    {8.633542711476541e-01f, -5.045982585097801e-01f},
-    {8.621132015455357e-01f, -5.067157267353229e-01f},
-    {8.608669386377673e-01f, -5.088301425431070e-01f},
-    {8.596154899317437e-01f, -5.109414931960489e-01f},
-    {8.583588629660989e-01f, -5.130497659755299e-01f},
-    {8.570970653106597e-01f, -5.151549481814718e-01f},
-    {8.558301045664012e-01f, -5.172570271324139e-01f},
-    {8.545579883654005e-01f, -5.193559901655896e-01f},
-    {8.532807243707908e-01f, -5.214518246370019e-01f},
-    {8.519983202767152e-01f, -5.235445179215000e-01f},
-    {8.507107838082801e-01f, -5.256340574128560e-01f},
-    {8.494181227215095e-01f, -5.277204305238395e-01f},
-    {8.481203448032972e-01f, -5.298036246862946e-01f},
-    {8.468174578713608e-01f, -5.318836273512150e-01f},
-    {8.455094697741939e-01f, -5.339604259888194e-01f},
-    {8.441963883910193e-01f, -5.360340080886280e-01f},
-    {8.428782216317413e-01f, -5.381043611595366e-01f},
-    {8.415549774368984e-01f, -5.401714727298929e-01f},
-    {8.402266637776148e-01f, -5.422353303475707e-01f},
-    {8.388932886555529e-01f, -5.442959215800456e-01f},
-    {8.375548601028652e-01f, -5.463532340144698e-01f},
-    {8.362113861821453e-01f, -5.484072552577465e-01f},
-    {8.348628749863800e-01f, -5.504579729366048e-01f},
-    {8.335093346389004e-01f, -5.525053746976744e-01f},
-    {8.321507732933324e-01f, -5.545494482075597e-01f},
-    {8.307871991335484e-01f, -5.565901811529141e-01f},
-    {8.294186203736174e-01f, -5.586275612405148e-01f},
-    {8.280450452577558e-01f, -5.606615761973360e-01f},
-    {8.266664820602777e-01f, -5.626922137706231e-01f},
-    {8.252829390855451e-01f, -5.647194617279668e-01f},
-    {8.238944246679176e-01f, -5.667433078573766e-01f},
-    {8.225009471717026e-01f, -5.687637399673542e-01f},
-    {8.211025149911046e-01f, -5.707807458869673e-01f},
-    {8.196991365501750e-01f, -5.727943134659226e-01f},
-    {8.182908203027607e-01f, -5.748044305746390e-01f},
-    {8.168775747324537e-01f, -5.768110851043212e-01f},
-    {8.154594083525400e-01f, -5.788142649670318e-01f},
-    {8.140363297059484e-01f, -5.808139580957645e-01f},
-    {8.126083473651983e-01f, -5.828101524445172e-01f},
-    {8.111754699323488e-01f, -5.848028359883638e-01f},
-    {8.097377060389469e-01f, -5.867919967235272e-01f},
-    {8.082950643459751e-01f, -5.887776226674516e-01f},
-    {8.068475535437993e-01f, -5.907597018588742e-01f},
-    {8.053951823521167e-01f, -5.927382223578977e-01f},
-    {8.039379595199031e-01f, -5.947131722460625e-01f},
-    {8.024758938253601e-01f, -5.966845396264172e-01f},
-    {8.010089940758625e-01f, -5.986523126235920e-01f},
-    {7.995372691079050e-01f, -6.006164793838690e-01f},
-    {7.980607277870492e-01f, -6.025770280752539e-01f},
-    {7.965793790078698e-01f, -6.045339468875478e-01f},
-    {7.950932316939014e-01f, -6.064872240324176e-01f},
-    {7.936022947975847e-01f, -6.084368477434675e-01f},
-    {7.921065773002124e-01f, -6.103828062763095e-01f},
-    {7.906060882118751e-01f, -6.123250879086344e-01f},
-    {7.891008365714072e-01f, -6.142636809402826e-01f},
-    {7.875908314463325e-01f, -6.161985736933142e-01f},
-    {7.860760819328091e-01f, -6.181297545120795e-01f},
-    {7.845565971555752e-01f, -6.200572117632891e-01f},
-    {7.830323862678940e-01f, -6.219809338360844e-01f},
-    {7.815034584514979e-01f, -6.239009091421072e-01f},
-    {7.799698229165344e-01f, -6.258171261155689e-01f},
-    {7.784314889015095e-01f, -6.277295732133219e-01f},
-    {7.768884656732324e-01f, -6.296382389149270e-01f},
-    {7.753407625267603e-01f, -6.315431117227246e-01f},
-    {7.737883887853415e-01f, -6.334441801619028e-01f},
-    {7.722313538003597e-01f, -6.353414327805670e-01f},
-    {7.706696669512773e-01f, -6.372348581498091e-01f},
-    {7.691033376455797e-01f, -6.391244448637757e-01f},
-    {7.675323753187178e-01f, -6.410101815397373e-01f},
-    {7.659567894340514e-01f, -6.428920568181569e-01f},
-    {7.643765894827926e-01f, -6.447700593627579e-01f},
-    {7.627917849839481e-01f, -6.466441778605931e-01f},
-    {7.612023854842618e-01f, -6.485144010221124e-01f},
-    {7.596084005581580e-01f, -6.503807175812309e-01f},
-    {7.580098398076831e-01f, -6.522431162953969e-01f},
-    {7.564067128624476e-01f, -6.541015859456593e-01f},
-    {7.547990293795690e-01f, -6.559561153367355e-01f},
-    {7.531867990436125e-01f, -6.578066932970786e-01f},
-    {7.515700315665336e-01f, -6.596533086789452e-01f},
-    {7.499487366876190e-01f, -6.614959503584616e-01f},
-    {7.483229241734281e-01f, -6.633346072356920e-01f},
-    {7.466926038177344e-01f, -6.651692682347043e-01f},
-    {7.450577854414661e-01f, -6.669999223036375e-01f},
-    {7.434184788926470e-01f, -6.688265584147679e-01f},
-    {7.417746940463380e-01f, -6.706491655645758e-01f},
-    {7.401264408045760e-01f, -6.724677327738116e-01f},
-    {7.384737290963160e-01f, -6.742822490875620e-01f},
-    {7.368165688773699e-01f, -6.760927035753159e-01f},
-    {7.351549701303474e-01f, -6.778990853310308e-01f},
-    {7.334889428645953e-01f, -6.797013834731973e-01f},
-    {7.318184971161379e-01f, -6.814995871449060e-01f},
-    {7.301436429476156e-01f, -6.832936855139119e-01f},
-    {7.284643904482252e-01f, -6.850836677727004e-01f},
-    {7.267807497336585e-01f, -6.868695231385515e-01f},
-    {7.250927309460417e-01f, -6.886512408536060e-01f},
-    {7.234003442538740e-01f, -6.904288101849290e-01f},
-    {7.217035998519666e-01f, -6.922022204245754e-01f},
-    {7.200025079613817e-01f, -6.939714608896540e-01f},
-    {7.182970788293696e-01f, -6.957365209223924e-01f},
-    {7.165873227293083e-01f, -6.974973898902004e-01f},
-    {7.148732499606411e-01f, -6.992540571857347e-01f},
-    {7.131548708488146e-01f, -7.010065122269625e-01f},
-    {7.114321957452164e-01f, -7.027547444572253e-01f},
-    {7.097052350271130e-01f, -7.044987433453024e-01f},
-    {7.079739990975870e-01f, -7.062384983854745e-01f}
+    {9.999992470090361e-01, -1.227184322288852e-03},
+    {9.999932230881285e-01, -3.681545574399692e-03},
+    {9.999811752826011e-01, -6.135884649154475e-03},
+    {9.999631036650289e-01, -8.590186761797602e-03},
+    {9.999390083442741e-01, -1.104443712779613e-02},
+    {9.999088894654848e-01, -1.349862096292883e-02},
+    {9.998727472100952e-01, -1.595272348337527e-02},
+    {9.998305817958234e-01, -1.840672990580482e-02},
+    {9.997823934766707e-01, -2.086062544746576e-02},
+    {9.997281825429201e-01, -2.331439532627430e-02},
+    {9.996679493211340e-01, -2.576802476090363e-02},
+    {9.996016941741530e-01, -2.822149897087298e-02},
+    {9.995294175010931e-01, -3.067480317663663e-02},
+    {9.994511197373437e-01, -3.312792259967294e-02},
+    {9.993668013545645e-01, -3.558084246257342e-02},
+    {9.992764628606833e-01, -3.803354798913168e-02},
+    {9.991801047998923e-01, -4.048602440443251e-02},
+    {9.990777277526454e-01, -4.293825693494082e-02},
+    {9.989693323356542e-01, -4.539023080859068e-02},
+    {9.988549192018848e-01, -4.784193125487429e-02},
+    {9.987344890405533e-01, -5.029334350493095e-02},
+    {9.986080425771219e-01, -5.274445279163603e-02},
+    {9.984755805732948e-01, -5.519524434968993e-02},
+    {9.983371038270131e-01, -5.764570341570704e-02},
+    {9.981926131724506e-01, -6.009581522830464e-02},
+    {9.980421094800079e-01, -6.254556502819182e-02},
+    {9.978855936563085e-01, -6.499493805825848e-02},
+    {9.977230666441916e-01, -6.744391956366405e-02},
+    {9.975545294227081e-01, -6.989249479192657e-02},
+    {9.973799830071135e-01, -7.234064899301137e-02},
+    {9.971994284488623e-01, -7.478836741942015e-02},
+    {9.970128668356021e-01, -7.723563532627951e-02},
+    {9.968202992911657e-01, -7.968243797143013e-02},
+    {9.966217269755658e-01, -8.212876061551522e-02},
+    {9.964171510849874e-01, -8.457458852206962e-02},
+    {9.962065728517802e-01, -8.701990695760831e-02},
+    {9.959899935444517e-01, -8.946470119171543e-02},
+    {9.957674144676598e-01, -9.190895649713272e-02},
+    {9.955388369622040e-01, -9.435265814984850e-02},
+    {9.953042624050182e-01, -9.679579142918618e-02},
+    {9.950636922091622e-01, -9.923834161789306e-02},
+    {9.948171278238128e-01, -1.016802940022289e-01},
+    {9.945645707342554e-01, -1.041216338720546e-01},
+    {9.943060224618753e-01, -1.065623465209208e-01},
+    {9.940414845641478e-01, -1.090024172461564e-01},
+    {9.937709586346295e-01, -1.114418313489574e-01},
+    {9.934944463029486e-01, -1.138805741344751e-01},
+    {9.932119492347945e-01, -1.163186309119048e-01},
+    {9.929234691319088e-01, -1.187559869945741e-01},
+    {9.926290077320739e-01, -1.211926277000318e-01},
+    {9.923285668091033e-01, -1.236285383501360e-01},
+    {9.920221481728309e-01, -1.260637042711424e-01},
+    {9.917097536690995e-01, -1.284981107937932e-01},
+    {9.913913851797506e-01, -1.309317432534049e-01},
+    {9.910670446226119e-01, -1.333645869899571e-01},
+    {9.907367339514870e-01, -1.357966273481804e-01},
+    {9.904004551561425e-01, -1.382278496776452e-01},
+    {9.900582102622971e-01, -1.406582393328492e-01},
+    {9.897100013316084e-01, -1.430877816733065e-01},
+    {9.893558304616609e-01, -1.455164620636352e-01},
+    {9.889956997859536e-01, -1.479442658736455e-01},
+    {9.886296114738869e-01, -1.503711784784285e-01},
+    {9.882575677307495e-01, -1.527971852584434e-01},
+    {9.878795707977051e-01, -1.552222715996064e-01},
+    {9.874956229517791e-01, -1.576464228933781e-01},
+    {9.871057265058446e-01, -1.600696245368518e-01},
+    {9.867098838086088e-01, -1.624918619328416e-01},
+    {9.863080972445987e-01, -1.649131204899699e-01},
+    {9.859003692341464e-01, -1.673333856227558e-01},
+    {9.854867022333751e-01, -1.697526427517024e-01},
+    {9.850670987341841e-01, -1.721708773033852e-01},
+    {9.846415612642334e-01, -1.745880747105397e-01},
+    {9.842100923869290e-01, -1.770042204121487e-01},
+    {9.837726947014075e-01, -1.794192998535309e-01},
+    {9.833293708425197e-01, -1.818332984864276e-01},
+    {9.828801234808157e-01, -1.842462017690910e-01},
+    {9.824249553225278e-01, -1.866579951663718e-01},
+    {9.819638691095552e-01, -1.890686641498062e-01},
+    {9.814968676194470e-01, -1.914781941977041e-01},
+    {9.810239536653852e-01, -1.938865707952361e-01},
+    {9.805451300961683e-01, -1.962937794345212e-01},
+    {9.800603997961936e-01, -1.986998056147138e-01},
+    {9.795697656854405e-01, -2.011046348420919e-01},
+    {9.790732307194523e-01, -2.035082526301433e-01},
+    {9.785707978893183e-01, -2.059106444996538e-01},
+    {9.780624702216568e-01, -2.083117959787937e-01},
+    {9.775482507785956e-01, -2.107116926032057e-01},
+    {9.770281426577544e-01, -2.131103199160914e-01},
+    {9.765021489922255e-01, -2.155076634682986e-01},
+    {9.759702729505557e-01, -2.179037088184086e-01},
+    {9.754325177367266e-01, -2.202984415328229e-01},
+    {9.748888865901355e-01, -2.226918471858500e-01},
+    {9.743393827855759e-01, -2.250839113597928e-01},
+    {9.737840096332177e-01, -2.274746196450351e-01},
+    {9.732227704785874e-01, -2.298639576401283e-01},
+    {9.726556687025479e-01, -2.322519109518786e-01},
+    {9.720827077212779e-01, -2.346384651954331e-01},
+    {9.715038909862518e-01, -2.370236059943672e-01},
+    {9.709192219842182e-01, -2.394073189807704e-01},
+    {9.703287042371799e-01, -2.417895897953334e-01},
+    {9.697323413023714e-01, -2.441704040874346e-01},
+    {9.691301367722388e-01, -2.465497475152259e-01},
+    {9.685220942744174e-01, -2.489276057457201e-01},
+    {9.679082174717095e-01, -2.513039644548766e-01},
+    {9.672885100620635e-01, -2.536788093276874e-01},
+    {9.666629757785506e-01, -2.560521260582643e-01},
+    {9.660316183893426e-01, -2.584239003499241e-01},
+    {9.653944416976894e-01, -2.607941179152755e-01},
+    {9.647514495418958e-01, -2.631627644763044e-01},
+    {9.641026457952987e-01, -2.655298257644607e-01},
+    {9.634480343662435e-01, -2.678952875207434e-01},
+    {9.627876191980606e-01, -2.702591354957875e-01},
+    {9.621214042690416e-01, -2.726213554499490e-01},
+    {9.614493935924158e-01, -2.749819331533909e-01},
+    {9.607715912163253e-01, -2.773408543861692e-01},
+    {9.600880012238011e-01, -2.796981049383182e-01},
+    {9.593986277327383e-01, -2.820536706099365e-01},
+    {9.587034748958716e-01, -2.844075372112719e-01},
+    {9.580025469007496e-01, -2.867596905628075e-01},
+    {9.572958479697103e-01, -2.891101164953470e-01},
+    {9.565833823598556e-01, -2.914588008500998e-01},
+    {9.558651543630251e-01, -2.938057294787664e-01},
+    {9.551411683057708e-01, -2.961508882436238e-01},
+    {9.544114285493304e-01, -2.984942630176104e-01},
+    {9.536759394896021e-01, -3.008358396844112e-01},
+    {9.529347055571170e-01, -3.031756041385431e-01},
+    {9.521877312170133e-01, -3.055135422854393e-01},
+    {9.514350209690083e-01, -3.078496400415349e-01},
+    {9.506765793473728e-01, -3.101838833343510e-01},
+    {9.499124109209025e-01, -3.125162581025802e-01},
+    {9.491425202928909e-01, -3.148467502961706e-01},
+    {9.483669121011018e-01, -3.171753458764112e-01},
+    {9.475855910177411e-01, -3.195020308160157e-01},
+    {9.467985617494289e-01, -3.218267910992075e-01},
+    {9.460058290371707e-01, -3.241496127218040e-01},
+    {9.452073976563291e-01, -3.264704816913009e-01},
+    {9.444032724165956e-01, -3.287893840269567e-01},
+    {9.435934581619604e-01, -3.311063057598764e-01},
+    {9.427779597706842e-01, -3.334212329330963e-01},
+    {9.419567821552687e-01, -3.357341516016679e-01},
+    {9.411299302624264e-01, -3.380450478327413e-01},
+    {9.402974090730516e-01, -3.403539077056500e-01},
+    {9.394592236021899e-01, -3.426607173119944e-01},
+    {9.386153788990080e-01, -3.449654627557252e-01},
+    {9.377658800467635e-01, -3.472681301532278e-01},
+    {9.369107321627741e-01, -3.495687056334055e-01},
+    {9.360499403983871e-01, -3.518671753377630e-01},
+    {9.351835099389476e-01, -3.541635254204903e-01},
+    {9.343114460037683e-01, -3.564577420485457e-01},
+    {9.334337538460973e-01, -3.587498114017393e-01},
+    {9.325504387530866e-01, -3.610397196728160e-01},
+    {9.316615060457607e-01, -3.633274530675394e-01},
+    {9.307669610789837e-01, -3.656129978047739e-01},
+    {9.298668092414279e-01, -3.678963401165684e-01},
+    {9.289610559555410e-01, -3.701774662482391e-01},
+    {9.280497066775131e-01, -3.724563624584523e-01},
+    {9.271327668972442e-01, -3.747330150193071e-01},
+    {9.262102421383114e-01, -3.770074102164183e-01},
+    {9.252821379579349e-01, -3.792795343489985e-01},
+    {9.243484599469451e-01, -3.815493737299417e-01},
+    {9.234092137297489e-01, -3.838169146859046e-01},
+    {9.224644049642953e-01, -3.860821435573893e-01},
+    {9.215140393420420e-01, -3.883450466988262e-01},
+    {9.205581225879205e-01, -3.906056104786556e-01},
+    {9.195966604603021e-01, -3.928638212794095e-01},
+    {9.186296587509630e-01, -3.951196654977946e-01},
+    {9.176571232850496e-01, -3.973731295447735e-01},
+    {9.166790599210427e-01, -3.996241998456468e-01},
+    {9.156954745507232e-01, -4.018728628401348e-01},
+    {9.147063730991362e-01, -4.041191049824593e-01},
+    {9.137117615245548e-01, -4.063629127414251e-01},
+    {9.127116458184452e-01, -4.086042726005015e-01},
+    {9.117060320054299e-01, -4.108431710579039e-01},
+    {9.106949261432513e-01, -4.130795946266749e-01},
+    {9.096783343227359e-01, -4.153135298347656e-01},
+    {9.086562626677570e-01, -4.175449632251170e-01},
+    {9.076287173351980e-01, -4.197738813557405e-01},
+    {9.065957045149153e-01, -4.220002707997997e-01},
+    {9.055572304297014e-01, -4.242241181456904e-01},
+    {9.045133013352465e-01, -4.264454099971220e-01},
+    {9.034639235201017e-01, -4.286641329731982e-01},
+    {9.024091033056408e-01, -4.308802737084970e-01},
+    {9.013488470460220e-01, -4.330938188531520e-01},
+    {9.002831611281501e-01, -4.353047550729321e-01},
+    {8.992120519716374e-01, -4.375130690493225e-01},
+    {8.981355260287659e-01, -4.397187474796043e-01},
+    {8.970535897844474e-01, -4.419217770769352e-01},
+    {8.959662497561852e-01, -4.441221445704292e-01},
+    {8.948735124940346e-01, -4.463198367052365e-01},
+    {8.937753845805634e-01, -4.485148402426236e-01},
+    {8.926718726308122e-01, -4.507071419600526e-01},
+    {8.915629832922548e-01, -4.528967286512617e-01},
+    {8.904487232447579e-01, -4.550835871263438e-01},
+    {8.893290992005409e-01, -4.572677042118265e-01},
+    {8.882041179041357e-01, -4.594490667507513e-01},
+    {8.870737861323454e-01, -4.616276616027529e-01},
+    {8.859381106942048e-01, -4.638034756441384e-01},
+    {8.847970984309378e-01, -4.659764957679662e-01},
+    {8.836507562159172e-01, -4.681467088841250e-01},
+    {8.824990909546231e-01, -4.703141019194129e-01},
+    {8.813421095846011e-01, -4.724786618176158e-01},
+    {8.801798190754208e-01, -4.746403755395864e-01},
+    {8.790122264286335e-01, -4.767992300633221e-01},
+    {8.778393386777302e-01, -4.789552123840445e-01},
+    {8.766611628880995e-01, -4.811083095142767e-01},
+    {8.754777061569843e-01, -4.832585084839222e-01},
+    {8.742889756134398e-01, -4.854057963403425e-01},
+    {8.730949784182901e-01, -4.875501601484360e-01},
+    {8.718957217640854e-01, -4.896915869907146e-01},
+    {8.706912128750582e-01, -4.918300639673830e-01},
+    {8.694814590070804e-01, -4.939655781964152e-01},
+    {8.682664674476190e-01, -4.960981168136327e-01},
+    {8.670462455156926e-01, -4.982276669727819e-01},
+    {8.658208005618273e-01, -5.003542158456112e-01},
+    {8.645901399680118e-01, -5.024777506219491e-01},
+    {8.633542711476541e-01, -5.045982585097801e-01},
+    {8.621132015455357e-01, -5.067157267353229e-01},
+    {8.608669386377673e-01, -5.088301425431070e-01},
+    {8.596154899317437e-01, -5.109414931960489e-01},
+    {8.583588629660989e-01, -5.130497659755299e-01},
+    {8.570970653106597e-01, -5.151549481814718e-01},
+    {8.558301045664012e-01, -5.172570271324139e-01},
+    {8.545579883654005e-01, -5.193559901655896e-01},
+    {8.532807243707908e-01, -5.214518246370019e-01},
+    {8.519983202767152e-01, -5.235445179215000e-01},
+    {8.507107838082801e-01, -5.256340574128560e-01},
+    {8.494181227215095e-01, -5.277204305238395e-01},
+    {8.481203448032972e-01, -5.298036246862946e-01},
+    {8.468174578713608e-01, -5.318836273512150e-01},
+    {8.455094697741939e-01, -5.339604259888194e-01},
+    {8.441963883910193e-01, -5.360340080886280e-01},
+    {8.428782216317413e-01, -5.381043611595366e-01},
+    {8.415549774368984e-01, -5.401714727298929e-01},
+    {8.402266637776148e-01, -5.422353303475707e-01},
+    {8.388932886555529e-01, -5.442959215800456e-01},
+    {8.375548601028652e-01, -5.463532340144698e-01},
+    {8.362113861821453e-01, -5.484072552577465e-01},
+    {8.348628749863800e-01, -5.504579729366048e-01},
+    {8.335093346389004e-01, -5.525053746976744e-01},
+    {8.321507732933324e-01, -5.545494482075597e-01},
+    {8.307871991335484e-01, -5.565901811529141e-01},
+    {8.294186203736174e-01, -5.586275612405148e-01},
+    {8.280450452577558e-01, -5.606615761973360e-01},
+    {8.266664820602777e-01, -5.626922137706231e-01},
+    {8.252829390855451e-01, -5.647194617279668e-01},
+    {8.238944246679176e-01, -5.667433078573766e-01},
+    {8.225009471717026e-01, -5.687637399673542e-01},
+    {8.211025149911046e-01, -5.707807458869673e-01},
+    {8.196991365501750e-01, -5.727943134659226e-01},
+    {8.182908203027607e-01, -5.748044305746390e-01},
+    {8.168775747324537e-01, -5.768110851043212e-01},
+    {8.154594083525400e-01, -5.788142649670318e-01},
+    {8.140363297059484e-01, -5.808139580957645e-01},
+    {8.126083473651983e-01, -5.828101524445172e-01},
+    {8.111754699323488e-01, -5.848028359883638e-01},
+    {8.097377060389469e-01, -5.867919967235272e-01},
+    {8.082950643459751e-01, -5.887776226674516e-01},
+    {8.068475535437993e-01, -5.907597018588742e-01},
+    {8.053951823521167e-01, -5.927382223578977e-01},
+    {8.039379595199031e-01, -5.947131722460625e-01},
+    {8.024758938253601e-01, -5.966845396264172e-01},
+    {8.010089940758625e-01, -5.986523126235920e-01},
+    {7.995372691079050e-01, -6.006164793838690e-01},
+    {7.980607277870492e-01, -6.025770280752539e-01},
+    {7.965793790078698e-01, -6.045339468875478e-01},
+    {7.950932316939014e-01, -6.064872240324176e-01},
+    {7.936022947975847e-01, -6.084368477434675e-01},
+    {7.921065773002124e-01, -6.103828062763095e-01},
+    {7.906060882118751e-01, -6.123250879086344e-01},
+    {7.891008365714072e-01, -6.142636809402826e-01},
+    {7.875908314463325e-01, -6.161985736933142e-01},
+    {7.860760819328091e-01, -6.181297545120795e-01},
+    {7.845565971555752e-01, -6.200572117632891e-01},
+    {7.830323862678940e-01, -6.219809338360844e-01},
+    {7.815034584514979e-01, -6.239009091421072e-01},
+    {7.799698229165344e-01, -6.258171261155689e-01},
+    {7.784314889015095e-01, -6.277295732133219e-01},
+    {7.768884656732324e-01, -6.296382389149270e-01},
+    {7.753407625267603e-01, -6.315431117227246e-01},
+    {7.737883887853415e-01, -6.334441801619028e-01},
+    {7.722313538003597e-01, -6.353414327805670e-01},
+    {7.706696669512773e-01, -6.372348581498091e-01},
+    {7.691033376455797e-01, -6.391244448637757e-01},
+    {7.675323753187178e-01, -6.410101815397373e-01},
+    {7.659567894340514e-01, -6.428920568181569e-01},
+    {7.643765894827926e-01, -6.447700593627579e-01},
+    {7.627917849839481e-01, -6.466441778605931e-01},
+    {7.612023854842618e-01, -6.485144010221124e-01},
+    {7.596084005581580e-01, -6.503807175812309e-01},
+    {7.580098398076831e-01, -6.522431162953969e-01},
+    {7.564067128624476e-01, -6.541015859456593e-01},
+    {7.547990293795690e-01, -6.559561153367355e-01},
+    {7.531867990436125e-01, -6.578066932970786e-01},
+    {7.515700315665336e-01, -6.596533086789452e-01},
+    {7.499487366876190e-01, -6.614959503584616e-01},
+    {7.483229241734281e-01, -6.633346072356920e-01},
+    {7.466926038177344e-01, -6.651692682347043e-01},
+    {7.450577854414661e-01, -6.669999223036375e-01},
+    {7.434184788926470e-01, -6.688265584147679e-01},
+    {7.417746940463380e-01, -6.706491655645758e-01},
+    {7.401264408045760e-01, -6.724677327738116e-01},
+    {7.384737290963160e-01, -6.742822490875620e-01},
+    {7.368165688773699e-01, -6.760927035753159e-01},
+    {7.351549701303474e-01, -6.778990853310308e-01},
+    {7.334889428645953e-01, -6.797013834731973e-01},
+    {7.318184971161379e-01, -6.814995871449060e-01},
+    {7.301436429476156e-01, -6.832936855139119e-01},
+    {7.284643904482252e-01, -6.850836677727004e-01},
+    {7.267807497336585e-01, -6.868695231385515e-01},
+    {7.250927309460417e-01, -6.886512408536060e-01},
+    {7.234003442538740e-01, -6.904288101849290e-01},
+    {7.217035998519666e-01, -6.922022204245754e-01},
+    {7.200025079613817e-01, -6.939714608896540e-01},
+    {7.182970788293696e-01, -6.957365209223924e-01},
+    {7.165873227293083e-01, -6.974973898902004e-01},
+    {7.148732499606411e-01, -6.992540571857347e-01},
+    {7.131548708488146e-01, -7.010065122269625e-01},
+    {7.114321957452164e-01, -7.027547444572253e-01},
+    {7.097052350271130e-01, -7.044987433453024e-01},
+    {7.079739990975870e-01, -7.062384983854745e-01}
 };
 
 static const cos_msin_t cos_msin_640[640] =
 {
-    {9.999998117522413e-01f, -6.135922766517967e-04f},
-    {9.999983057705969e-01f, -1.840775905896510e-03f},
-    {9.999952938095762e-01f, -3.067956762965976e-03f},
-    {9.999907758737150e-01f, -4.295132999748002e-03f},
-    {9.999847519698173e-01f, -5.522302768137352e-03f},
-    {9.999772221069551e-01f, -6.749464220038533e-03f},
-    {9.999681862964679e-01f, -7.976615507368575e-03f},
-    {9.999576445519639e-01f, -9.203754782059819e-03f},
-    {9.999455968893185e-01f, -1.043088019606269e-02f},
-    {9.999320433266753e-01f, -1.165798990134850e-02f},
-    {9.999169838844458e-01f, -1.288508204991220e-02f},
-    {9.999004185853092e-01f, -1.411215479377519e-02f},
-    {9.998823474542126e-01f, -1.533920628498810e-02f},
-    {9.998627705183706e-01f, -1.656623467563356e-02f},
-    {9.998416878072659e-01f, -1.779323811782898e-02f},
-    {9.998190993526487e-01f, -1.902021476372936e-02f},
-    {9.997950051885367e-01f, -2.024716276553004e-02f},
-    {9.997694053512153e-01f, -2.147408027546951e-02f},
-    {9.997422998792375e-01f, -2.270096544583216e-02f},
-    {9.997136888134235e-01f, -2.392781642895110e-02f},
-    {9.996835721968610e-01f, -2.515463137721094e-02f},
-    {9.996519500749053e-01f, -2.638140844305051e-02f},
-    {9.996188224951786e-01f, -2.760814577896574e-02f},
-    {9.995841895075704e-01f, -2.883484153751236e-02f},
-    {9.995480511642375e-01f, -3.006149387130874e-02f},
-    {9.995104075196035e-01f, -3.128810093303862e-02f},
-    {9.994712586303591e-01f, -3.251466087545394e-02f},
-    {9.994306045554617e-01f, -3.374117185137758e-02f},
-    {9.993884453561358e-01f, -3.496763201370620e-02f},
-    {9.993447810958722e-01f, -3.619403951541294e-02f},
-    {9.992996118404286e-01f, -3.742039250955028e-02f},
-    {9.992529376578290e-01f, -3.864668914925275e-02f},
-    {9.992047586183639e-01f, -3.987292758773981e-02f},
-    {9.991550747945901e-01f, -4.109910597831850e-02f},
-    {9.991038862613305e-01f, -4.232522247438635e-02f},
-    {9.990511930956741e-01f, -4.355127522943403e-02f},
-    {9.989969953769761e-01f, -4.477726239704831e-02f},
-    {9.989412931868569e-01f, -4.600318213091462e-02f},
-    {9.988840866092031e-01f, -4.722903258482004e-02f},
-    {9.988253757301669e-01f, -4.845481191265589e-02f},
-    {9.987651606381658e-01f, -4.968051826842070e-02f},
-    {9.987034414238826e-01f, -5.090614980622282e-02f},
-    {9.986402181802653e-01f, -5.213170468028332e-02f},
-    {9.985754910025268e-01f, -5.335718104493870e-02f},
-    {9.985092599881454e-01f, -5.458257705464371e-02f},
-    {9.984415252368637e-01f, -5.580789086397409e-02f},
-    {9.983722868506889e-01f, -5.703312062762941e-02f},
-    {9.983015449338929e-01f, -5.825826450043575e-02f},
-    {9.982292995930115e-01f, -5.948332063734863e-02f},
-    {9.981555509368452e-01f, -6.070828719345561e-02f},
-    {9.980802990764579e-01f, -6.193316232397920e-02f},
-    {9.980035441251777e-01f, -6.315794418427960e-02f},
-    {9.979252861985960e-01f, -6.438263092985747e-02f},
-    {9.978455254145679e-01f, -6.560722071635666e-02f},
-    {9.977642618932119e-01f, -6.683171169956714e-02f},
-    {9.976814957569091e-01f, -6.805610203542757e-02f},
-    {9.975972271303040e-01f, -6.928038988002828e-02f},
-    {9.975114561403035e-01f, -7.050457338961386e-02f},
-    {9.974241829160772e-01f, -7.172865072058610e-02f},
-    {9.973354075890570e-01f, -7.295262002950662e-02f},
-    {9.972451302929369e-01f, -7.417647947309980e-02f},
-    {9.971533511636731e-01f, -7.540022720825540e-02f},
-    {9.970600703394830e-01f, -7.662386139203149e-02f},
-    {9.969652879608459e-01f, -7.784738018165707e-02f},
-    {9.968690041705026e-01f, -7.907078173453497e-02f},
-    {9.967712191134545e-01f, -8.029406420824454e-02f},
-    {9.966719329369642e-01f, -8.151722576054453e-02f},
-    {9.965711457905548e-01f, -8.274026454937569e-02f},
-    {9.964688578260101e-01f, -8.396317873286374e-02f},
-    {9.963650691973739e-01f, -8.518596646932200e-02f},
-    {9.962597800609497e-01f, -8.640862591725426e-02f},
-    {9.961529905753015e-01f, -8.763115523535747e-02f},
-    {9.960447009012520e-01f, -8.885355258252460e-02f},
-    {9.959349112018836e-01f, -9.007581611784729e-02f},
-    {9.958236216425376e-01f, -9.129794400061877e-02f},
-    {9.957108323908140e-01f, -9.251993439033654e-02f},
-    {9.955965436165716e-01f, -9.374178544670515e-02f},
-    {9.954807554919269e-01f, -9.496349532963899e-02f},
-    {9.953634681912550e-01f, -9.618506219926506e-02f},
-    {9.952446818911883e-01f, -9.740648421592572e-02f},
-    {9.951243967706169e-01f, -9.862775954018151e-02f},
-    {9.950026130106879e-01f, -9.984888633281383e-02f},
-    {9.948793307948056e-01f, -1.010698627548278e-01f},
-    {9.947545503086307e-01f, -1.022906869674551e-01f},
-    {9.946282717400804e-01f, -1.035113571321563e-01f},
-    {9.945004952793278e-01f, -1.047318714106244e-01f},
-    {9.943712211188022e-01f, -1.059522279647869e-01f},
-    {9.942404494531879e-01f, -1.071724249568088e-01f},
-    {9.941081804794248e-01f, -1.083924605490956e-01f},
-    {9.939744143967076e-01f, -1.096123329042957e-01f},
-    {9.938391514064855e-01f, -1.108320401853034e-01f},
-    {9.937023917124622e-01f, -1.120515805552615e-01f},
-    {9.935641355205953e-01f, -1.132709521775643e-01f},
-    {9.934243830390962e-01f, -1.144901532158602e-01f},
-    {9.932831344784294e-01f, -1.157091818340545e-01f},
-    {9.931403900513129e-01f, -1.169280361963119e-01f},
-    {9.929961499727171e-01f, -1.181467144670601e-01f},
-    {9.928504144598651e-01f, -1.193652148109914e-01f},
-    {9.927031837322318e-01f, -1.205835353930663e-01f},
-    {9.925544580115441e-01f, -1.218016743785162e-01f},
-    {9.924042375217801e-01f, -1.230196299328457e-01f},
-    {9.922525224891693e-01f, -1.242374002218357e-01f},
-    {9.920993131421918e-01f, -1.254549834115462e-01f},
-    {9.919446097115779e-01f, -1.266723776683190e-01f},
-    {9.917884124303086e-01f, -1.278895811587802e-01f},
-    {9.916307215336136e-01f, -1.291065920498434e-01f},
-    {9.914715372589731e-01f, -1.303234085087122e-01f},
-    {9.913108598461154e-01f, -1.315400287028831e-01f},
-    {9.911486895370180e-01f, -1.327564508001479e-01f},
-    {9.909850265759061e-01f, -1.339726729685971e-01f},
-    {9.908198712092535e-01f, -1.351886933766218e-01f},
-    {9.906532236857811e-01f, -1.364045101929175e-01f},
-    {9.904850842564571e-01f, -1.376201215864860e-01f},
-    {9.903154531744962e-01f, -1.388355257266385e-01f},
-    {9.901443306953601e-01f, -1.400507207829983e-01f},
-    {9.899717170767560e-01f, -1.412657049255036e-01f},
-    {9.897976125786367e-01f, -1.424804763244102e-01f},
-    {9.896220174632009e-01f, -1.436950331502945e-01f},
-    {9.894449319948911e-01f, -1.449093735740556e-01f},
-    {9.892663564403953e-01f, -1.461234957669190e-01f},
-    {9.890862910686448e-01f, -1.473373979004386e-01f},
-    {9.889047361508148e-01f, -1.485510781464996e-01f},
-    {9.887216919603238e-01f, -1.497645346773215e-01f},
-    {9.885371587728330e-01f, -1.509777656654608e-01f},
-    {9.883511368662461e-01f, -1.521907692838135e-01f},
-    {9.881636265207087e-01f, -1.534035437056180e-01f},
-    {9.879746280186079e-01f, -1.546160871044581e-01f},
-    {9.877841416445722e-01f, -1.558283976542652e-01f},
-    {9.875921676854704e-01f, -1.570404735293217e-01f},
-    {9.873987064304122e-01f, -1.582523129042630e-01f},
-    {9.872037581707463e-01f, -1.594639139540810e-01f},
-    {9.870073232000616e-01f, -1.606752748541265e-01f},
-    {9.868094018141855e-01f, -1.618863937801118e-01f},
-    {9.866099943111839e-01f, -1.630972689081137e-01f},
-    {9.864091009913611e-01f, -1.643078984145762e-01f},
-    {9.862067221572588e-01f, -1.655182804763130e-01f},
-    {9.860028581136556e-01f, -1.667284132705107e-01f},
-    {9.857975091675675e-01f, -1.679382949747312e-01f},
-    {9.855906756282459e-01f, -1.691479237669144e-01f},
-    {9.853823578071785e-01f, -1.703572978253813e-01f},
-    {9.851725560180883e-01f, -1.715664153288364e-01f},
-    {9.849612705769328e-01f, -1.727752744563706e-01f},
-    {9.847485018019042e-01f, -1.739838733874638e-01f},
-    {9.845342500134284e-01f, -1.751922103019880e-01f},
-    {9.843185155341647e-01f, -1.764002833802096e-01f},
-    {9.841012986890054e-01f, -1.776080908027924e-01f},
-    {9.838825998050751e-01f, -1.788156307508001e-01f},
-    {9.836624192117303e-01f, -1.800229014056995e-01f},
-    {9.834407572405590e-01f, -1.812299009493628e-01f},
-    {9.832176142253802e-01f, -1.824366275640705e-01f},
-    {9.829929905022433e-01f, -1.836430794325141e-01f},
-    {9.827668864094273e-01f, -1.848492547377989e-01f},
-    {9.825393022874412e-01f, -1.860551516634466e-01f},
-    {9.823102384790224e-01f, -1.872607683933984e-01f},
-    {9.820796953291370e-01f, -1.884661031120172e-01f},
-    {9.818476731849786e-01f, -1.896711540040907e-01f},
-    {9.816141723959685e-01f, -1.908759192548340e-01f},
-    {9.813791933137546e-01f, -1.920803970498924e-01f},
-    {9.811427362922112e-01f, -1.932845855753442e-01f},
-    {9.809048016874382e-01f, -1.944884830177032e-01f},
-    {9.806653898577611e-01f, -1.956920875639216e-01f},
-    {9.804245011637294e-01f, -1.968953974013927e-01f},
-    {9.801821359681174e-01f, -1.980984107179536e-01f},
-    {9.799382946359226e-01f, -1.993011257018880e-01f},
-    {9.796929775343657e-01f, -2.005035405419289e-01f},
-    {9.794461850328897e-01f, -2.017056534272613e-01f},
-    {9.791979175031598e-01f, -2.029074625475249e-01f},
-    {9.789481753190622e-01f, -2.041089660928169e-01f},
-    {9.786969588567044e-01f, -2.053101622536946e-01f},
-    {9.784442684944136e-01f, -2.065110492211783e-01f},
-    {9.781901046127370e-01f, -2.077116251867540e-01f},
-    {9.779344675944409e-01f, -2.089118883423760e-01f},
-    {9.776773578245099e-01f, -2.101118368804696e-01f},
-    {9.774187756901469e-01f, -2.113114689939341e-01f},
-    {9.771587215807717e-01f, -2.125107828761450e-01f},
-    {9.768971958880210e-01f, -2.137097767209575e-01f},
-    {9.766341990057480e-01f, -2.149084487227085e-01f},
-    {9.763697313300211e-01f, -2.161067970762195e-01f},
-    {9.761037932591240e-01f, -2.173048199767996e-01f},
-    {9.758363851935545e-01f, -2.185025156202481e-01f},
-    {9.755675075360243e-01f, -2.196998822028567e-01f},
-    {9.752971606914583e-01f, -2.208969179214133e-01f},
-    {9.750253450669941e-01f, -2.220936209732035e-01f},
-    {9.747520610719810e-01f, -2.232899895560143e-01f},
-    {9.744773091179798e-01f, -2.244860218681361e-01f},
-    {9.742010896187618e-01f, -2.256817161083659e-01f},
-    {9.739234029903089e-01f, -2.268770704760098e-01f},
-    {9.736442496508120e-01f, -2.280720831708857e-01f},
-    {9.733636300206708e-01f, -2.292667523933261e-01f},
-    {9.730815445224936e-01f, -2.304610763441808e-01f},
-    {9.727979935810960e-01f, -2.316550532248194e-01f},
-    {9.725129776235006e-01f, -2.328486812371343e-01f},
-    {9.722264970789363e-01f, -2.340419585835434e-01f},
-    {9.719385523788376e-01f, -2.352348834669925e-01f},
-    {9.716491439568440e-01f, -2.364274540909583e-01f},
-    {9.713582722487994e-01f, -2.376196686594509e-01f},
-    {9.710659376927513e-01f, -2.388115253770169e-01f},
-    {9.707721407289504e-01f, -2.400030224487415e-01f},
-    {9.704768817998493e-01f, -2.411941580802516e-01f},
-    {9.701801613501028e-01f, -2.423849304777186e-01f},
-    {9.698819798265667e-01f, -2.435753378478606e-01f},
-    {9.695823376782966e-01f, -2.447653783979458e-01f},
-    {9.692812353565485e-01f, -2.459550503357946e-01f},
-    {9.689786733147769e-01f, -2.471443518697825e-01f},
-    {9.686746520086348e-01f, -2.483332812088429e-01f},
-    {9.683691718959728e-01f, -2.495218365624697e-01f},
-    {9.680622334368384e-01f, -2.507100161407201e-01f},
-    {9.677538370934755e-01f, -2.518978181542170e-01f},
-    {9.674439833303232e-01f, -2.530852408141520e-01f},
-    {9.671326726140158e-01f, -2.542722823322882e-01f},
-    {9.668199054133816e-01f, -2.554589409209625e-01f},
-    {9.665056821994423e-01f, -2.566452147930884e-01f},
-    {9.661900034454125e-01f, -2.578311021621590e-01f},
-    {9.658728696266987e-01f, -2.590166012422493e-01f},
-    {9.655542812208985e-01f, -2.602017102480191e-01f},
-    {9.652342387078005e-01f, -2.613864273947156e-01f},
-    {9.649127425693828e-01f, -2.625707508981763e-01f},
-    {9.645897932898128e-01f, -2.637546789748313e-01f},
-    {9.642653913554462e-01f, -2.649382098417065e-01f},
-    {9.639395372548267e-01f, -2.661213417164257e-01f},
-    {9.636122314786845e-01f, -2.673040728172135e-01f},
-    {9.632834745199362e-01f, -2.684864013628985e-01f},
-    {9.629532668736839e-01f, -2.696683255729151e-01f},
-    {9.626216090372143e-01f, -2.708498436673069e-01f},
-    {9.622885015099981e-01f, -2.720309538667289e-01f},
-    {9.619539447936892e-01f, -2.732116543924507e-01f},
-    {9.616179393921240e-01f, -2.743919434663584e-01f},
-    {9.612804858113206e-01f, -2.755718193109581e-01f},
-    {9.609415845594780e-01f, -2.767512801493782e-01f},
-    {9.606012361469752e-01f, -2.779303242053718e-01f},
-    {9.602594410863711e-01f, -2.791089497033199e-01f},
-    {9.599161998924024e-01f, -2.802871548682339e-01f},
-    {9.595715130819845e-01f, -2.814649379257579e-01f},
-    {9.592253811742094e-01f, -2.826422971021723e-01f},
-    {9.588778046903456e-01f, -2.838192306243950e-01f},
-    {9.585287841538368e-01f, -2.849957367199857e-01f},
-    {9.581783200903017e-01f, -2.861718136171474e-01f},
-    {9.578264130275329e-01f, -2.873474595447295e-01f},
-    {9.574730634954960e-01f, -2.885226727322305e-01f},
-    {9.571182720263292e-01f, -2.896974514098006e-01f},
-    {9.567620391543418e-01f, -2.908717938082443e-01f},
-    {9.564043654160141e-01f, -2.920456981590233e-01f},
-    {9.560452513499964e-01f, -2.932191626942586e-01f},
-    {9.556846974971080e-01f, -2.943921856467341e-01f},
-    {9.553227044003364e-01f, -2.955647652498983e-01f},
-    {9.549592726048367e-01f, -2.967368997378675e-01f},
-    {9.545944026579306e-01f, -2.979085873454284e-01f},
-    {9.542280951091057e-01f, -2.990798263080405e-01f},
-    {9.538603505100144e-01f, -3.002506148618392e-01f},
-    {9.534911694144735e-01f, -3.014209512436381e-01f},
-    {9.531205523784633e-01f, -3.025908336909318e-01f},
-    {9.527484999601259e-01f, -3.037602604418984e-01f},
-    {9.523750127197659e-01f, -3.049292297354024e-01f},
-    {9.520000912198481e-01f, -3.060977398109971e-01f},
-    {9.516237360249976e-01f, -3.072657889089275e-01f},
-    {9.512459477019986e-01f, -3.084333752701328e-01f},
-    {9.508667268197933e-01f, -3.096004971362489e-01f},
-    {9.504860739494817e-01f, -3.107671527496115e-01f},
-    {9.501039896643201e-01f, -3.119333403532583e-01f},
-    {9.497204745397203e-01f, -3.130990581909318e-01f},
-    {9.493355291532494e-01f, -3.142643045070820e-01f},
-    {9.489491540846281e-01f, -3.154290775468691e-01f},
-    {9.485613499157303e-01f, -3.165933755561658e-01f},
-    {9.481721172305820e-01f, -3.177571967815606e-01f},
-    {9.477814566153607e-01f, -3.189205394703594e-01f},
-    {9.473893686583942e-01f, -3.200834018705895e-01f},
-    {9.469958539501598e-01f, -3.212457822310009e-01f},
-    {9.466009130832835e-01f, -3.224076788010699e-01f},
-    {9.462045466525394e-01f, -3.235690898310011e-01f},
-    {9.458067552548478e-01f, -3.247300135717307e-01f},
-    {9.454075394892756e-01f, -3.258904482749284e-01f},
-    {9.450068999570345e-01f, -3.270503921930005e-01f},
-    {9.446048372614803e-01f, -3.282098435790925e-01f},
-    {9.442013520081122e-01f, -3.293688006870915e-01f},
-    {9.437964448045717e-01f, -3.305272617716291e-01f},
-    {9.433901162606417e-01f, -3.316852250880838e-01f},
-    {9.429823669882458e-01f, -3.328426888925837e-01f},
-    {9.425731976014469e-01f, -3.339996514420094e-01f},
-    {9.421626087164466e-01f, -3.351561109939961e-01f},
-    {9.417506009515846e-01f, -3.363120658069366e-01f},
-    {9.413371749273369e-01f, -3.374675141399838e-01f},
-    {9.409223312663159e-01f, -3.386224542530535e-01f},
-    {9.405060705932683e-01f, -3.397768844068269e-01f},
-    {9.400883935350755e-01f, -3.409308028627527e-01f},
-    {9.396693007207513e-01f, -3.420842078830508e-01f},
-    {9.392487927814420e-01f, -3.432370977307140e-01f},
-    {9.388268703504251e-01f, -3.443894706695110e-01f},
-    {9.384035340631081e-01f, -3.455413249639891e-01f},
-    {9.379787845570278e-01f, -3.466926588794764e-01f},
-    {9.375526224718491e-01f, -3.478434706820849e-01f},
-    {9.371250484493645e-01f, -3.489937586387129e-01f},
-    {9.366960631334929e-01f, -3.501435210170474e-01f},
-    {9.362656671702783e-01f, -3.512927560855671e-01f},
-    {9.358338612078891e-01f, -3.524414621135448e-01f},
-    {9.354006458966176e-01f, -3.535896373710499e-01f},
-    {9.349660218888781e-01f, -3.547372801289512e-01f},
-    {9.345299898392064e-01f, -3.558843886589194e-01f},
-    {9.340925504042590e-01f, -3.570309612334300e-01f},
-    {9.336537042428116e-01f, -3.581769961257653e-01f},
-    {9.332134520157588e-01f, -3.593224916100174e-01f},
-    {9.327717943861125e-01f, -3.604674459610909e-01f},
-    {9.323287320190009e-01f, -3.616118574547051e-01f},
-    {9.318842655816681e-01f, -3.627557243673972e-01f},
-    {9.314383957434725e-01f, -3.638990449765241e-01f},
-    {9.309911231758859e-01f, -3.650418175602657e-01f},
-    {9.305424485524929e-01f, -3.661840403976272e-01f},
-    {9.300923725489892e-01f, -3.673257117684415e-01f},
-    {9.296408958431813e-01f, -3.684668299533723e-01f},
-    {9.291880191149847e-01f, -3.696073932339162e-01f},
-    {9.287337430464239e-01f, -3.707473998924054e-01f},
-    {9.282780683216301e-01f, -3.718868482120106e-01f},
-    {9.278209956268415e-01f, -3.730257364767432e-01f},
-    {9.273625256504011e-01f, -3.741640629714579e-01f},
-    {9.269026590827565e-01f, -3.753018259818559e-01f},
-    {9.264413966164585e-01f, -3.764390237944864e-01f},
-    {9.259787389461599e-01f, -3.775756546967501e-01f},
-    {9.255146867686148e-01f, -3.787117169769015e-01f},
-    {9.250492407826776e-01f, -3.798472089240512e-01f},
-    {9.245824016893013e-01f, -3.809821288281689e-01f},
-    {9.241141701915373e-01f, -3.821164749800858e-01f},
-    {9.236445469945337e-01f, -3.832502456714969e-01f},
-    {9.231735328055345e-01f, -3.843834391949643e-01f},
-    {9.227011283338786e-01f, -3.855160538439188e-01f},
-    {9.222273342909986e-01f, -3.866480879126634e-01f},
-    {9.217521513904198e-01f, -3.877795396963752e-01f},
-    {9.212755803477590e-01f, -3.889104074911081e-01f},
-    {9.207976218807237e-01f, -3.900406895937958e-01f},
-    {9.203182767091106e-01f, -3.911703843022539e-01f},
-    {9.198375455548048e-01f, -3.922994899151824e-01f},
-    {9.193554291417789e-01f, -3.934280047321689e-01f},
-    {9.188719281960914e-01f, -3.945559270536903e-01f},
-    {9.183870434458861e-01f, -3.956832551811160e-01f},
-    {9.179007756213905e-01f, -3.968099874167103e-01f},
-    {9.174131254549152e-01f, -3.979361220636348e-01f},
-    {9.169240936808526e-01f, -3.990616574259509e-01f},
-    {9.164336810356757e-01f, -4.001865918086229e-01f},
-    {9.159418882579371e-01f, -4.013109235175197e-01f},
-    {9.154487160882678e-01f, -4.024346508594184e-01f},
-    {9.149541652693762e-01f, -4.035577721420057e-01f},
-    {9.144582365460469e-01f, -4.046802856738814e-01f},
-    {9.139609306651395e-01f, -4.058021897645602e-01f},
-    {9.134622483755878e-01f, -4.069234827244749e-01f},
-    {9.129621904283982e-01f, -4.080441628649787e-01f},
-    {9.124607575766490e-01f, -4.091642284983474e-01f},
-    {9.119579505754890e-01f, -4.102836779377824e-01f},
-    {9.114537701821365e-01f, -4.114025094974132e-01f},
-    {9.109482171558779e-01f, -4.125207214922996e-01f},
-    {9.104412922580672e-01f, -4.136383122384345e-01f},
-    {9.099329962521239e-01f, -4.147552800527466e-01f},
-    {9.094233299035327e-01f, -4.158716232531024e-01f},
-    {9.089122939798419e-01f, -4.169873401583093e-01f},
-    {9.083998892506623e-01f, -4.181024290881177e-01f},
-    {9.078861164876663e-01f, -4.192168883632239e-01f},
-    {9.073709764645862e-01f, -4.203307163052724e-01f},
-    {9.068544699572136e-01f, -4.214439112368585e-01f},
-    {9.063365977433983e-01f, -4.225564714815306e-01f},
-    {9.058173606030460e-01f, -4.236683953637931e-01f},
-    {9.052967593181188e-01f, -4.247796812091088e-01f},
-    {9.047747946726327e-01f, -4.258903273439013e-01f},
-    {9.042514674526569e-01f, -4.270003320955576e-01f},
-    {9.037267784463131e-01f, -4.281096937924305e-01f},
-    {9.032007284437731e-01f, -4.292184107638414e-01f},
-    {9.026733182372588e-01f, -4.303264813400826e-01f},
-    {9.021445486210405e-01f, -4.314339038524199e-01f},
-    {9.016144203914357e-01f, -4.325406766330948e-01f},
-    {9.010829343468079e-01f, -4.336467980153277e-01f},
-    {9.005500912875654e-01f, -4.347522663333197e-01f},
-    {9.000158920161603e-01f, -4.358570799222555e-01f},
-    {8.994803373370870e-01f, -4.369612371183058e-01f},
-    {8.989434280568812e-01f, -4.380647362586298e-01f},
-    {8.984051649841186e-01f, -4.391675756813778e-01f},
-    {8.978655489294136e-01f, -4.402697537256935e-01f},
-    {8.973245807054183e-01f, -4.413712687317167e-01f},
-    {8.967822611268210e-01f, -4.424721190405857e-01f},
-    {8.962385910103452e-01f, -4.435723029944398e-01f},
-    {8.956935711747483e-01f, -4.446718189364220e-01f},
-    {8.951472024408204e-01f, -4.457706652106809e-01f},
-    {8.945994856313827e-01f, -4.468688401623742e-01f},
-    {8.940504215712870e-01f, -4.479663421376699e-01f},
-    {8.935000110874138e-01f, -4.490631694837502e-01f},
-    {8.929482550086714e-01f, -4.501593205488127e-01f},
-    {8.923951541659944e-01f, -4.512547936820739e-01f},
-    {8.918407093923427e-01f, -4.523495872337709e-01f},
-    {8.912849215227001e-01f, -4.534436995551644e-01f},
-    {8.907277913940732e-01f, -4.545371289985410e-01f},
-    {8.901693198454897e-01f, -4.556298739172159e-01f},
-    {8.896095077179980e-01f, -4.567219326655349e-01f},
-    {8.890483558546646e-01f, -4.578133035988772e-01f},
-    {8.884858651005743e-01f, -4.589039850736579e-01f},
-    {8.879220363028281e-01f, -4.599939754473306e-01f},
-    {8.873568703105417e-01f, -4.610832730783892e-01f},
-    {8.867903679748451e-01f, -4.621718763263714e-01f},
-    {8.862225301488806e-01f, -4.632597835518601e-01f},
-    {8.856533576878016e-01f, -4.643469931164871e-01f},
-    {8.850828514487716e-01f, -4.654335033829341e-01f},
-    {8.845110122909626e-01f, -4.665193127149364e-01f},
-    {8.839378410755541e-01f, -4.676044194772847e-01f},
-    {8.833633386657316e-01f, -4.686888220358279e-01f},
-    {8.827875059266853e-01f, -4.697725187574754e-01f},
-    {8.822103437256089e-01f, -4.708555080101994e-01f},
-    {8.816318529316984e-01f, -4.719377881630376e-01f},
-    {8.810520344161502e-01f, -4.730193575860958e-01f},
-    {8.804708890521608e-01f, -4.741002146505500e-01f},
-    {8.798884177149244e-01f, -4.751803577286489e-01f},
-    {8.793046212816323e-01f, -4.762597851937166e-01f},
-    {8.787195006314716e-01f, -4.773384954201548e-01f},
-    {8.781330566456232e-01f, -4.784164867834454e-01f},
-    {8.775452902072614e-01f, -4.794937576601530e-01f},
-    {8.769562022015515e-01f, -4.805703064279270e-01f},
-    {8.763657935156495e-01f, -4.816461314655044e-01f},
-    {8.757740650387004e-01f, -4.827212311527123e-01f},
-    {8.751810176618363e-01f, -4.837956038704698e-01f},
-    {8.745866522781761e-01f, -4.848692480007911e-01f},
-    {8.739909697828232e-01f, -4.859421619267875e-01f},
-    {8.733939710728648e-01f, -4.870143440326701e-01f},
-    {8.727956570473698e-01f, -4.880857927037520e-01f},
-    {8.721960286073888e-01f, -4.891565063264507e-01f},
-    {8.715950866559510e-01f, -4.902264832882912e-01f},
-    {8.709928320980644e-01f, -4.912957219779071e-01f},
-    {8.703892658407133e-01f, -4.923642207850446e-01f},
-    {8.697843887928577e-01f, -4.934319781005636e-01f},
-    {8.691782018654314e-01f, -4.944989923164409e-01f},
-    {8.685707059713409e-01f, -4.955652618257725e-01f},
-    {8.679619020254642e-01f, -4.966307850227757e-01f},
-    {8.673517909446490e-01f, -4.976955603027919e-01f},
-    {8.667403736477115e-01f, -4.987595860622885e-01f},
-    {8.661276510554351e-01f, -4.998228606988624e-01f},
-    {8.655136240905691e-01f, -5.008853826112407e-01f},
-    {8.648982936778269e-01f, -5.019471501992850e-01f},
-    {8.642816607438848e-01f, -5.030081618639924e-01f},
-    {8.636637262173812e-01f, -5.040684160074983e-01f},
-    {8.630444910289141e-01f, -5.051279110330795e-01f},
-    {8.624239561110406e-01f, -5.061866453451552e-01f},
-    {8.618021223982749e-01f, -5.072446173492910e-01f},
-    {8.611789908270876e-01f, -5.083018254522002e-01f},
-    {8.605545623359034e-01f, -5.093582680617462e-01f},
-    {8.599288378651004e-01f, -5.104139435869457e-01f},
-    {8.593018183570085e-01f, -5.114688504379703e-01f},
-    {8.586735047559073e-01f, -5.125229870261497e-01f},
-    {8.580438980080262e-01f, -5.135763517639729e-01f},
-    {8.574129990615412e-01f, -5.146289430650919e-01f},
-    {8.567808088665750e-01f, -5.156807593443229e-01f},
-    {8.561473283751945e-01f, -5.167317990176499e-01f},
-    {8.555125585414098e-01f, -5.177820605022260e-01f},
-    {8.548765003211730e-01f, -5.188315422163763e-01f},
-    {8.542391546723761e-01f, -5.198802425796005e-01f},
-    {8.536005225548502e-01f, -5.209281600125748e-01f},
-    {8.529606049303636e-01f, -5.219752929371544e-01f},
-    {8.523194027626210e-01f, -5.230216397763758e-01f},
-    {8.516769170172609e-01f, -5.240671989544601e-01f},
-    {8.510331486618554e-01f, -5.251119688968137e-01f},
-    {8.503880986659081e-01f, -5.261559480300321e-01f},
-    {8.497417680008525e-01f, -5.271991347819013e-01f},
-    {8.490941576400509e-01f, -5.282415275814013e-01f},
-    {8.484452685587929e-01f, -5.292831248587072e-01f},
-    {8.477951017342936e-01f, -5.303239250451923e-01f},
-    {8.471436581456926e-01f, -5.313639265734305e-01f},
-    {8.464909387740521e-01f, -5.324031278771979e-01f},
-    {8.458369446023557e-01f, -5.334415273914767e-01f},
-    {8.451816766155068e-01f, -5.344791235524554e-01f},
-    {8.445251358003272e-01f, -5.355159147975332e-01f},
-    {8.438673231455553e-01f, -5.365518995653215e-01f},
-    {8.432082396418454e-01f, -5.375870762956454e-01f},
-    {8.425478862817651e-01f, -5.386214434295480e-01f},
-    {8.418862640597948e-01f, -5.396549994092906e-01f},
-    {8.412233739723254e-01f, -5.406877426783570e-01f},
-    {8.405592170176576e-01f, -5.417196716814542e-01f},
-    {8.398937941959995e-01f, -5.427507848645159e-01f},
-    {8.392271065094661e-01f, -5.437810806747042e-01f},
-    {8.385591549620770e-01f, -5.448105575604123e-01f},
-    {8.378899405597550e-01f, -5.458392139712668e-01f},
-    {8.372194643103249e-01f, -5.468670483581293e-01f},
-    {8.365477272235120e-01f, -5.478940591731002e-01f},
-    {8.358747303109401e-01f, -5.489202448695194e-01f},
-    {8.352004745861303e-01f, -5.499456039019702e-01f},
-    {8.345249610644997e-01f, -5.509701347262801e-01f},
-    {8.338481907633595e-01f, -5.519938357995242e-01f},
-    {8.331701647019132e-01f, -5.530167055800275e-01f},
-    {8.324908839012561e-01f, -5.540387425273663e-01f},
-    {8.318103493843727e-01f, -5.550599451023716e-01f},
-    {8.311285621761358e-01f, -5.560803117671306e-01f},
-    {8.304455233033046e-01f, -5.570998409849897e-01f},
-    {8.297612337945230e-01f, -5.581185312205561e-01f},
-    {8.290756946803191e-01f, -5.591363809397010e-01f},
-    {8.283889069931020e-01f, -5.601533886095610e-01f},
-    {8.277008717671618e-01f, -5.611695526985409e-01f},
-    {8.270115900386670e-01f, -5.621848716763159e-01f},
-    {8.263210628456635e-01f, -5.631993440138341e-01f},
-    {8.256292912280727e-01f, -5.642129681833185e-01f},
-    {8.249362762276903e-01f, -5.652257426582692e-01f},
-    {8.242420188881840e-01f, -5.662376659134664e-01f},
-    {8.235465202550933e-01f, -5.672487364249718e-01f},
-    {8.228497813758264e-01f, -5.682589526701315e-01f},
-    {8.221518032996592e-01f, -5.692683131275782e-01f},
-    {8.214525870777344e-01f, -5.702768162772331e-01f},
-    {8.207521337630588e-01f, -5.712844606003090e-01f},
-    {8.200504444105025e-01f, -5.722912445793115e-01f},
-    {8.193475200767969e-01f, -5.732971666980422e-01f},
-    {8.186433618205335e-01f, -5.743022254416005e-01f},
-    {8.179379707021619e-01f, -5.753064192963863e-01f},
-    {8.172313477839882e-01f, -5.763097467501014e-01f},
-    {8.165234941301740e-01f, -5.773122062917532e-01f},
-    {8.158144108067338e-01f, -5.783137964116556e-01f},
-    {8.151040988815345e-01f, -5.793145156014319e-01f},
-    {8.143925594242929e-01f, -5.803143623540171e-01f},
-    {8.136797935065747e-01f, -5.813133351636602e-01f},
-    {8.129658022017924e-01f, -5.823114325259262e-01f},
-    {8.122505865852039e-01f, -5.833086529376983e-01f},
-    {8.115341477339112e-01f, -5.843049948971807e-01f},
-    {8.108164867268581e-01f, -5.853004569039005e-01f},
-    {8.100976046448293e-01f, -5.862950374587097e-01f},
-    {8.093775025704479e-01f, -5.872887350637883e-01f},
-    {8.086561815881750e-01f, -5.882815482226452e-01f},
-    {8.079336427843067e-01f, -5.892734754401222e-01f},
-    {8.072098872469734e-01f, -5.902645152223945e-01f},
-    {8.064849160661379e-01f, -5.912546660769743e-01f},
-    {8.057587303335938e-01f, -5.922439265127122e-01f},
-    {8.050313311429637e-01f, -5.932322950397998e-01f},
-    {8.043027195896973e-01f, -5.942197701697721e-01f},
-    {8.035728967710708e-01f, -5.952063504155093e-01f},
-    {8.028418637861839e-01f, -5.961920342912395e-01f},
-    {8.021096217359593e-01f, -5.971768203125404e-01f},
-    {8.013761717231402e-01f, -5.981607069963423e-01f},
-    {8.006415148522891e-01f, -5.991436928609294e-01f},
-    {7.999056522297859e-01f, -6.001257764259429e-01f},
-    {7.991685849638264e-01f, -6.011069562123827e-01f},
-    {7.984303141644207e-01f, -6.020872307426096e-01f},
-    {7.976908409433912e-01f, -6.030665985403482e-01f},
-    {7.969501664143711e-01f, -6.040450581306880e-01f},
-    {7.962082916928030e-01f, -6.050226080400867e-01f},
-    {7.954652178959369e-01f, -6.059992467963715e-01f},
-    {7.947209461428283e-01f, -6.069749729287426e-01f},
-    {7.939754775543372e-01f, -6.079497849677736e-01f},
-    {7.932288132531257e-01f, -6.089236814454155e-01f},
-    {7.924809543636567e-01f, -6.098966608949977e-01f},
-    {7.917319020121923e-01f, -6.108687218512306e-01f},
-    {7.909816573267918e-01f, -6.118398628502083e-01f},
-    {7.902302214373100e-01f, -6.128100824294097e-01f},
-    {7.894775954753960e-01f, -6.137793791277018e-01f},
-    {7.887237805744907e-01f, -6.147477514853411e-01f},
-    {7.879687778698258e-01f, -6.157151980439765e-01f},
-    {7.872125884984216e-01f, -6.166817173466510e-01f},
-    {7.864552135990858e-01f, -6.176473079378039e-01f},
-    {7.856966543124112e-01f, -6.186119683632733e-01f},
-    {7.849369117807745e-01f, -6.195756971702979e-01f},
-    {7.841759871483340e-01f, -6.205384929075197e-01f},
-    {7.834138815610288e-01f, -6.215003541249855e-01f},
-    {7.826505961665757e-01f, -6.224612793741500e-01f},
-    {7.818861321144691e-01f, -6.234212672078768e-01f},
-    {7.811204905559779e-01f, -6.243803161804418e-01f},
-    {7.803536726441443e-01f, -6.253384248475345e-01f},
-    {7.795856795337824e-01f, -6.262955917662607e-01f},
-    {7.788165123814760e-01f, -6.272518154951441e-01f},
-    {7.780461723455767e-01f, -6.282070945941292e-01f},
-    {7.772746605862029e-01f, -6.291614276245828e-01f},
-    {7.765019782652373e-01f, -6.301148131492967e-01f},
-    {7.757281265463254e-01f, -6.310672497324895e-01f},
-    {7.749531065948739e-01f, -6.320187359398091e-01f},
-    {7.741769195780490e-01f, -6.329692703383341e-01f},
-    {7.733995666647743e-01f, -6.339188514965771e-01f},
-    {7.726210490257291e-01f, -6.348674779844861e-01f},
-    {7.718413678333470e-01f, -6.358151483734467e-01f},
-    {7.710605242618138e-01f, -6.367618612362842e-01f},
-    {7.702785194870657e-01f, -6.377076151472665e-01f},
-    {7.694953546867879e-01f, -6.386524086821050e-01f},
-    {7.687110310404124e-01f, -6.395962404179578e-01f},
-    {7.679255497291163e-01f, -6.405391089334316e-01f},
-    {7.671389119358204e-01f, -6.414810128085832e-01f},
-    {7.663511188451869e-01f, -6.424219506249224e-01f},
-    {7.655621716436182e-01f, -6.433619209654138e-01f},
-    {7.647720715192542e-01f, -6.443009224144792e-01f},
-    {7.639808196619715e-01f, -6.452389535579994e-01f},
-    {7.631884172633813e-01f, -6.461760129833163e-01f},
-    {7.623948655168271e-01f, -6.471120992792355e-01f},
-    {7.616001656173835e-01f, -6.480472110360278e-01f},
-    {7.608043187618542e-01f, -6.489813468454321e-01f},
-    {7.600073261487703e-01f, -6.499145053006563e-01f},
-    {7.592091889783881e-01f, -6.508466849963809e-01f},
-    {7.584099084526877e-01f, -6.517778845287601e-01f},
-    {7.576094857753715e-01f, -6.527081024954242e-01f},
-    {7.568079221518612e-01f, -6.536373374954818e-01f},
-    {7.560052187892974e-01f, -6.545655881295217e-01f},
-    {7.552013768965365e-01f, -6.554928529996153e-01f},
-    {7.543963976841503e-01f, -6.564191307093185e-01f},
-    {7.535902823644226e-01f, -6.573444198636738e-01f},
-    {7.527830321513488e-01f, -6.582687190692122e-01f},
-    {7.519746482606328e-01f, -6.591920269339562e-01f},
-    {7.511651319096865e-01f, -6.601143420674205e-01f},
-    {7.503544843176265e-01f, -6.610356630806152e-01f},
-    {7.495427067052737e-01f, -6.619559885860479e-01f},
-    {7.487298002951505e-01f, -6.628753171977246e-01f},
-    {7.479157663114792e-01f, -6.637936475311532e-01f},
-    {7.471006059801801e-01f, -6.647109782033448e-01f},
-    {7.462843205288703e-01f, -6.656273078328160e-01f},
-    {7.454669111868606e-01f, -6.665426350395909e-01f},
-    {7.446483791851549e-01f, -6.674569584452033e-01f},
-    {7.438287257564475e-01f, -6.683702766726985e-01f},
-    {7.430079521351217e-01f, -6.692825883466360e-01f},
-    {7.421860595572477e-01f, -6.701938920930909e-01f},
-    {7.413630492605809e-01f, -6.711041865396560e-01f},
-    {7.405389224845600e-01f, -6.720134703154446e-01f},
-    {7.397136804703048e-01f, -6.729217420510915e-01f},
-    {7.388873244606151e-01f, -6.738290003787560e-01f},
-    {7.380598556999681e-01f, -6.747352439321236e-01f},
-    {7.372312754345167e-01f, -6.756404713464076e-01f},
-    {7.364015849120877e-01f, -6.765446812583521e-01f},
-    {7.355707853821803e-01f, -6.774478723062332e-01f},
-    {7.347388780959635e-01f, -6.783500431298615e-01f},
-    {7.339058643062745e-01f, -6.792511923705841e-01f},
-    {7.330717452676171e-01f, -6.801513186712865e-01f},
-    {7.322365222361595e-01f, -6.810504206763948e-01f},
-    {7.314001964697324e-01f, -6.819484970318775e-01f},
-    {7.305627692278276e-01f, -6.828455463852481e-01f},
-    {7.297242417715950e-01f, -6.837415673855661e-01f},
-    {7.288846153638420e-01f, -6.846365586834405e-01f},
-    {7.280438912690308e-01f, -6.855305189310302e-01f},
-    {7.272020707532766e-01f, -6.864234467820476e-01f},
-    {7.263591550843460e-01f, -6.873153408917591e-01f},
-    {7.255151455316546e-01f, -6.882061999169885e-01f},
-    {7.246700433662657e-01f, -6.890960225161182e-01f},
-    {7.238238498608879e-01f, -6.899848073490914e-01f},
-    {7.229765662898732e-01f, -6.908725530774144e-01f},
-    {7.221281939292153e-01f, -6.917592583641577e-01f},
-    {7.212787340565479e-01f, -6.926449218739597e-01f},
-    {7.204281879511419e-01f, -6.935295422730269e-01f},
-    {7.195765568939045e-01f, -6.944131182291369e-01f},
-    {7.187238421673769e-01f, -6.952956484116404e-01f},
-    {7.178700450557317e-01f, -6.961771314914630e-01f},
-    {7.170151668447722e-01f, -6.970575661411068e-01f},
-    {7.161592088219294e-01f, -6.979369510346534e-01f},
-    {7.153021722762606e-01f, -6.988152848477649e-01f},
-    {7.144440584984474e-01f, -6.996925662576865e-01f},
-    {7.135848687807936e-01f, -7.005687939432483e-01f},
-    {7.127246044172235e-01f, -7.014439665848672e-01f},
-    {7.118632667032795e-01f, -7.023180828645491e-01f},
-    {7.110008569361208e-01f, -7.031911414658905e-01f},
-    {7.101373764145209e-01f, -7.040631410740809e-01f},
-    {7.092728264388657e-01f, -7.049340803759049e-01f},
-    {7.084072083111520e-01f, -7.058039580597435e-01f},
-    {7.075405233349850e-01f, -7.066727728155766e-01f}
+    {9.999998117522413e-01, -6.135922766517967e-04},
+    {9.999983057705969e-01, -1.840775905896510e-03},
+    {9.999952938095762e-01, -3.067956762965976e-03},
+    {9.999907758737150e-01, -4.295132999748002e-03},
+    {9.999847519698173e-01, -5.522302768137352e-03},
+    {9.999772221069551e-01, -6.749464220038533e-03},
+    {9.999681862964679e-01, -7.976615507368575e-03},
+    {9.999576445519639e-01, -9.203754782059819e-03},
+    {9.999455968893185e-01, -1.043088019606269e-02},
+    {9.999320433266753e-01, -1.165798990134850e-02},
+    {9.999169838844458e-01, -1.288508204991220e-02},
+    {9.999004185853092e-01, -1.411215479377519e-02},
+    {9.998823474542126e-01, -1.533920628498810e-02},
+    {9.998627705183706e-01, -1.656623467563356e-02},
+    {9.998416878072659e-01, -1.779323811782898e-02},
+    {9.998190993526487e-01, -1.902021476372936e-02},
+    {9.997950051885367e-01, -2.024716276553004e-02},
+    {9.997694053512153e-01, -2.147408027546951e-02},
+    {9.997422998792375e-01, -2.270096544583216e-02},
+    {9.997136888134235e-01, -2.392781642895110e-02},
+    {9.996835721968610e-01, -2.515463137721094e-02},
+    {9.996519500749053e-01, -2.638140844305051e-02},
+    {9.996188224951786e-01, -2.760814577896574e-02},
+    {9.995841895075704e-01, -2.883484153751236e-02},
+    {9.995480511642375e-01, -3.006149387130874e-02},
+    {9.995104075196035e-01, -3.128810093303862e-02},
+    {9.994712586303591e-01, -3.251466087545394e-02},
+    {9.994306045554617e-01, -3.374117185137758e-02},
+    {9.993884453561358e-01, -3.496763201370620e-02},
+    {9.993447810958722e-01, -3.619403951541294e-02},
+    {9.992996118404286e-01, -3.742039250955028e-02},
+    {9.992529376578290e-01, -3.864668914925275e-02},
+    {9.992047586183639e-01, -3.987292758773981e-02},
+    {9.991550747945901e-01, -4.109910597831850e-02},
+    {9.991038862613305e-01, -4.232522247438635e-02},
+    {9.990511930956741e-01, -4.355127522943403e-02},
+    {9.989969953769761e-01, -4.477726239704831e-02},
+    {9.989412931868569e-01, -4.600318213091462e-02},
+    {9.988840866092031e-01, -4.722903258482004e-02},
+    {9.988253757301669e-01, -4.845481191265589e-02},
+    {9.987651606381658e-01, -4.968051826842070e-02},
+    {9.987034414238826e-01, -5.090614980622282e-02},
+    {9.986402181802653e-01, -5.213170468028332e-02},
+    {9.985754910025268e-01, -5.335718104493870e-02},
+    {9.985092599881454e-01, -5.458257705464371e-02},
+    {9.984415252368637e-01, -5.580789086397409e-02},
+    {9.983722868506889e-01, -5.703312062762941e-02},
+    {9.983015449338929e-01, -5.825826450043575e-02},
+    {9.982292995930115e-01, -5.948332063734863e-02},
+    {9.981555509368452e-01, -6.070828719345561e-02},
+    {9.980802990764579e-01, -6.193316232397920e-02},
+    {9.980035441251777e-01, -6.315794418427960e-02},
+    {9.979252861985960e-01, -6.438263092985747e-02},
+    {9.978455254145679e-01, -6.560722071635666e-02},
+    {9.977642618932119e-01, -6.683171169956714e-02},
+    {9.976814957569091e-01, -6.805610203542757e-02},
+    {9.975972271303040e-01, -6.928038988002828e-02},
+    {9.975114561403035e-01, -7.050457338961386e-02},
+    {9.974241829160772e-01, -7.172865072058610e-02},
+    {9.973354075890570e-01, -7.295262002950662e-02},
+    {9.972451302929369e-01, -7.417647947309980e-02},
+    {9.971533511636731e-01, -7.540022720825540e-02},
+    {9.970600703394830e-01, -7.662386139203149e-02},
+    {9.969652879608459e-01, -7.784738018165707e-02},
+    {9.968690041705026e-01, -7.907078173453497e-02},
+    {9.967712191134545e-01, -8.029406420824454e-02},
+    {9.966719329369642e-01, -8.151722576054453e-02},
+    {9.965711457905548e-01, -8.274026454937569e-02},
+    {9.964688578260101e-01, -8.396317873286374e-02},
+    {9.963650691973739e-01, -8.518596646932200e-02},
+    {9.962597800609497e-01, -8.640862591725426e-02},
+    {9.961529905753015e-01, -8.763115523535747e-02},
+    {9.960447009012520e-01, -8.885355258252460e-02},
+    {9.959349112018836e-01, -9.007581611784729e-02},
+    {9.958236216425376e-01, -9.129794400061877e-02},
+    {9.957108323908140e-01, -9.251993439033654e-02},
+    {9.955965436165716e-01, -9.374178544670515e-02},
+    {9.954807554919269e-01, -9.496349532963899e-02},
+    {9.953634681912550e-01, -9.618506219926506e-02},
+    {9.952446818911883e-01, -9.740648421592572e-02},
+    {9.951243967706169e-01, -9.862775954018151e-02},
+    {9.950026130106879e-01, -9.984888633281383e-02},
+    {9.948793307948056e-01, -1.010698627548278e-01},
+    {9.947545503086307e-01, -1.022906869674551e-01},
+    {9.946282717400804e-01, -1.035113571321563e-01},
+    {9.945004952793278e-01, -1.047318714106244e-01},
+    {9.943712211188022e-01, -1.059522279647869e-01},
+    {9.942404494531879e-01, -1.071724249568088e-01},
+    {9.941081804794248e-01, -1.083924605490956e-01},
+    {9.939744143967076e-01, -1.096123329042957e-01},
+    {9.938391514064855e-01, -1.108320401853034e-01},
+    {9.937023917124622e-01, -1.120515805552615e-01},
+    {9.935641355205953e-01, -1.132709521775643e-01},
+    {9.934243830390962e-01, -1.144901532158602e-01},
+    {9.932831344784294e-01, -1.157091818340545e-01},
+    {9.931403900513129e-01, -1.169280361963119e-01},
+    {9.929961499727171e-01, -1.181467144670601e-01},
+    {9.928504144598651e-01, -1.193652148109914e-01},
+    {9.927031837322318e-01, -1.205835353930663e-01},
+    {9.925544580115441e-01, -1.218016743785162e-01},
+    {9.924042375217801e-01, -1.230196299328457e-01},
+    {9.922525224891693e-01, -1.242374002218357e-01},
+    {9.920993131421918e-01, -1.254549834115462e-01},
+    {9.919446097115779e-01, -1.266723776683190e-01},
+    {9.917884124303086e-01, -1.278895811587802e-01},
+    {9.916307215336136e-01, -1.291065920498434e-01},
+    {9.914715372589731e-01, -1.303234085087122e-01},
+    {9.913108598461154e-01, -1.315400287028831e-01},
+    {9.911486895370180e-01, -1.327564508001479e-01},
+    {9.909850265759061e-01, -1.339726729685971e-01},
+    {9.908198712092535e-01, -1.351886933766218e-01},
+    {9.906532236857811e-01, -1.364045101929175e-01},
+    {9.904850842564571e-01, -1.376201215864860e-01},
+    {9.903154531744962e-01, -1.388355257266385e-01},
+    {9.901443306953601e-01, -1.400507207829983e-01},
+    {9.899717170767560e-01, -1.412657049255036e-01},
+    {9.897976125786367e-01, -1.424804763244102e-01},
+    {9.896220174632009e-01, -1.436950331502945e-01},
+    {9.894449319948911e-01, -1.449093735740556e-01},
+    {9.892663564403953e-01, -1.461234957669190e-01},
+    {9.890862910686448e-01, -1.473373979004386e-01},
+    {9.889047361508148e-01, -1.485510781464996e-01},
+    {9.887216919603238e-01, -1.497645346773215e-01},
+    {9.885371587728330e-01, -1.509777656654608e-01},
+    {9.883511368662461e-01, -1.521907692838135e-01},
+    {9.881636265207087e-01, -1.534035437056180e-01},
+    {9.879746280186079e-01, -1.546160871044581e-01},
+    {9.877841416445722e-01, -1.558283976542652e-01},
+    {9.875921676854704e-01, -1.570404735293217e-01},
+    {9.873987064304122e-01, -1.582523129042630e-01},
+    {9.872037581707463e-01, -1.594639139540810e-01},
+    {9.870073232000616e-01, -1.606752748541265e-01},
+    {9.868094018141855e-01, -1.618863937801118e-01},
+    {9.866099943111839e-01, -1.630972689081137e-01},
+    {9.864091009913611e-01, -1.643078984145762e-01},
+    {9.862067221572588e-01, -1.655182804763130e-01},
+    {9.860028581136556e-01, -1.667284132705107e-01},
+    {9.857975091675675e-01, -1.679382949747312e-01},
+    {9.855906756282459e-01, -1.691479237669144e-01},
+    {9.853823578071785e-01, -1.703572978253813e-01},
+    {9.851725560180883e-01, -1.715664153288364e-01},
+    {9.849612705769328e-01, -1.727752744563706e-01},
+    {9.847485018019042e-01, -1.739838733874638e-01},
+    {9.845342500134284e-01, -1.751922103019880e-01},
+    {9.843185155341647e-01, -1.764002833802096e-01},
+    {9.841012986890054e-01, -1.776080908027924e-01},
+    {9.838825998050751e-01, -1.788156307508001e-01},
+    {9.836624192117303e-01, -1.800229014056995e-01},
+    {9.834407572405590e-01, -1.812299009493628e-01},
+    {9.832176142253802e-01, -1.824366275640705e-01},
+    {9.829929905022433e-01, -1.836430794325141e-01},
+    {9.827668864094273e-01, -1.848492547377989e-01},
+    {9.825393022874412e-01, -1.860551516634466e-01},
+    {9.823102384790224e-01, -1.872607683933984e-01},
+    {9.820796953291370e-01, -1.884661031120172e-01},
+    {9.818476731849786e-01, -1.896711540040907e-01},
+    {9.816141723959685e-01, -1.908759192548340e-01},
+    {9.813791933137546e-01, -1.920803970498924e-01},
+    {9.811427362922112e-01, -1.932845855753442e-01},
+    {9.809048016874382e-01, -1.944884830177032e-01},
+    {9.806653898577611e-01, -1.956920875639216e-01},
+    {9.804245011637294e-01, -1.968953974013927e-01},
+    {9.801821359681174e-01, -1.980984107179536e-01},
+    {9.799382946359226e-01, -1.993011257018880e-01},
+    {9.796929775343657e-01, -2.005035405419289e-01},
+    {9.794461850328897e-01, -2.017056534272613e-01},
+    {9.791979175031598e-01, -2.029074625475249e-01},
+    {9.789481753190622e-01, -2.041089660928169e-01},
+    {9.786969588567044e-01, -2.053101622536946e-01},
+    {9.784442684944136e-01, -2.065110492211783e-01},
+    {9.781901046127370e-01, -2.077116251867540e-01},
+    {9.779344675944409e-01, -2.089118883423760e-01},
+    {9.776773578245099e-01, -2.101118368804696e-01},
+    {9.774187756901469e-01, -2.113114689939341e-01},
+    {9.771587215807717e-01, -2.125107828761450e-01},
+    {9.768971958880210e-01, -2.137097767209575e-01},
+    {9.766341990057480e-01, -2.149084487227085e-01},
+    {9.763697313300211e-01, -2.161067970762195e-01},
+    {9.761037932591240e-01, -2.173048199767996e-01},
+    {9.758363851935545e-01, -2.185025156202481e-01},
+    {9.755675075360243e-01, -2.196998822028567e-01},
+    {9.752971606914583e-01, -2.208969179214133e-01},
+    {9.750253450669941e-01, -2.220936209732035e-01},
+    {9.747520610719810e-01, -2.232899895560143e-01},
+    {9.744773091179798e-01, -2.244860218681361e-01},
+    {9.742010896187618e-01, -2.256817161083659e-01},
+    {9.739234029903089e-01, -2.268770704760098e-01},
+    {9.736442496508120e-01, -2.280720831708857e-01},
+    {9.733636300206708e-01, -2.292667523933261e-01},
+    {9.730815445224936e-01, -2.304610763441808e-01},
+    {9.727979935810960e-01, -2.316550532248194e-01},
+    {9.725129776235006e-01, -2.328486812371343e-01},
+    {9.722264970789363e-01, -2.340419585835434e-01},
+    {9.719385523788376e-01, -2.352348834669925e-01},
+    {9.716491439568440e-01, -2.364274540909583e-01},
+    {9.713582722487994e-01, -2.376196686594509e-01},
+    {9.710659376927513e-01, -2.388115253770169e-01},
+    {9.707721407289504e-01, -2.400030224487415e-01},
+    {9.704768817998493e-01, -2.411941580802516e-01},
+    {9.701801613501028e-01, -2.423849304777186e-01},
+    {9.698819798265667e-01, -2.435753378478606e-01},
+    {9.695823376782966e-01, -2.447653783979458e-01},
+    {9.692812353565485e-01, -2.459550503357946e-01},
+    {9.689786733147769e-01, -2.471443518697825e-01},
+    {9.686746520086348e-01, -2.483332812088429e-01},
+    {9.683691718959728e-01, -2.495218365624697e-01},
+    {9.680622334368384e-01, -2.507100161407201e-01},
+    {9.677538370934755e-01, -2.518978181542170e-01},
+    {9.674439833303232e-01, -2.530852408141520e-01},
+    {9.671326726140158e-01, -2.542722823322882e-01},
+    {9.668199054133816e-01, -2.554589409209625e-01},
+    {9.665056821994423e-01, -2.566452147930884e-01},
+    {9.661900034454125e-01, -2.578311021621590e-01},
+    {9.658728696266987e-01, -2.590166012422493e-01},
+    {9.655542812208985e-01, -2.602017102480191e-01},
+    {9.652342387078005e-01, -2.613864273947156e-01},
+    {9.649127425693828e-01, -2.625707508981763e-01},
+    {9.645897932898128e-01, -2.637546789748313e-01},
+    {9.642653913554462e-01, -2.649382098417065e-01},
+    {9.639395372548267e-01, -2.661213417164257e-01},
+    {9.636122314786845e-01, -2.673040728172135e-01},
+    {9.632834745199362e-01, -2.684864013628985e-01},
+    {9.629532668736839e-01, -2.696683255729151e-01},
+    {9.626216090372143e-01, -2.708498436673069e-01},
+    {9.622885015099981e-01, -2.720309538667289e-01},
+    {9.619539447936892e-01, -2.732116543924507e-01},
+    {9.616179393921240e-01, -2.743919434663584e-01},
+    {9.612804858113206e-01, -2.755718193109581e-01},
+    {9.609415845594780e-01, -2.767512801493782e-01},
+    {9.606012361469752e-01, -2.779303242053718e-01},
+    {9.602594410863711e-01, -2.791089497033199e-01},
+    {9.599161998924024e-01, -2.802871548682339e-01},
+    {9.595715130819845e-01, -2.814649379257579e-01},
+    {9.592253811742094e-01, -2.826422971021723e-01},
+    {9.588778046903456e-01, -2.838192306243950e-01},
+    {9.585287841538368e-01, -2.849957367199857e-01},
+    {9.581783200903017e-01, -2.861718136171474e-01},
+    {9.578264130275329e-01, -2.873474595447295e-01},
+    {9.574730634954960e-01, -2.885226727322305e-01},
+    {9.571182720263292e-01, -2.896974514098006e-01},
+    {9.567620391543418e-01, -2.908717938082443e-01},
+    {9.564043654160141e-01, -2.920456981590233e-01},
+    {9.560452513499964e-01, -2.932191626942586e-01},
+    {9.556846974971080e-01, -2.943921856467341e-01},
+    {9.553227044003364e-01, -2.955647652498983e-01},
+    {9.549592726048367e-01, -2.967368997378675e-01},
+    {9.545944026579306e-01, -2.979085873454284e-01},
+    {9.542280951091057e-01, -2.990798263080405e-01},
+    {9.538603505100144e-01, -3.002506148618392e-01},
+    {9.534911694144735e-01, -3.014209512436381e-01},
+    {9.531205523784633e-01, -3.025908336909318e-01},
+    {9.527484999601259e-01, -3.037602604418984e-01},
+    {9.523750127197659e-01, -3.049292297354024e-01},
+    {9.520000912198481e-01, -3.060977398109971e-01},
+    {9.516237360249976e-01, -3.072657889089275e-01},
+    {9.512459477019986e-01, -3.084333752701328e-01},
+    {9.508667268197933e-01, -3.096004971362489e-01},
+    {9.504860739494817e-01, -3.107671527496115e-01},
+    {9.501039896643201e-01, -3.119333403532583e-01},
+    {9.497204745397203e-01, -3.130990581909318e-01},
+    {9.493355291532494e-01, -3.142643045070820e-01},
+    {9.489491540846281e-01, -3.154290775468691e-01},
+    {9.485613499157303e-01, -3.165933755561658e-01},
+    {9.481721172305820e-01, -3.177571967815606e-01},
+    {9.477814566153607e-01, -3.189205394703594e-01},
+    {9.473893686583942e-01, -3.200834018705895e-01},
+    {9.469958539501598e-01, -3.212457822310009e-01},
+    {9.466009130832835e-01, -3.224076788010699e-01},
+    {9.462045466525394e-01, -3.235690898310011e-01},
+    {9.458067552548478e-01, -3.247300135717307e-01},
+    {9.454075394892756e-01, -3.258904482749284e-01},
+    {9.450068999570345e-01, -3.270503921930005e-01},
+    {9.446048372614803e-01, -3.282098435790925e-01},
+    {9.442013520081122e-01, -3.293688006870915e-01},
+    {9.437964448045717e-01, -3.305272617716291e-01},
+    {9.433901162606417e-01, -3.316852250880838e-01},
+    {9.429823669882458e-01, -3.328426888925837e-01},
+    {9.425731976014469e-01, -3.339996514420094e-01},
+    {9.421626087164466e-01, -3.351561109939961e-01},
+    {9.417506009515846e-01, -3.363120658069366e-01},
+    {9.413371749273369e-01, -3.374675141399838e-01},
+    {9.409223312663159e-01, -3.386224542530535e-01},
+    {9.405060705932683e-01, -3.397768844068269e-01},
+    {9.400883935350755e-01, -3.409308028627527e-01},
+    {9.396693007207513e-01, -3.420842078830508e-01},
+    {9.392487927814420e-01, -3.432370977307140e-01},
+    {9.388268703504251e-01, -3.443894706695110e-01},
+    {9.384035340631081e-01, -3.455413249639891e-01},
+    {9.379787845570278e-01, -3.466926588794764e-01},
+    {9.375526224718491e-01, -3.478434706820849e-01},
+    {9.371250484493645e-01, -3.489937586387129e-01},
+    {9.366960631334929e-01, -3.501435210170474e-01},
+    {9.362656671702783e-01, -3.512927560855671e-01},
+    {9.358338612078891e-01, -3.524414621135448e-01},
+    {9.354006458966176e-01, -3.535896373710499e-01},
+    {9.349660218888781e-01, -3.547372801289512e-01},
+    {9.345299898392064e-01, -3.558843886589194e-01},
+    {9.340925504042590e-01, -3.570309612334300e-01},
+    {9.336537042428116e-01, -3.581769961257653e-01},
+    {9.332134520157588e-01, -3.593224916100174e-01},
+    {9.327717943861125e-01, -3.604674459610909e-01},
+    {9.323287320190009e-01, -3.616118574547051e-01},
+    {9.318842655816681e-01, -3.627557243673972e-01},
+    {9.314383957434725e-01, -3.638990449765241e-01},
+    {9.309911231758859e-01, -3.650418175602657e-01},
+    {9.305424485524929e-01, -3.661840403976272e-01},
+    {9.300923725489892e-01, -3.673257117684415e-01},
+    {9.296408958431813e-01, -3.684668299533723e-01},
+    {9.291880191149847e-01, -3.696073932339162e-01},
+    {9.287337430464239e-01, -3.707473998924054e-01},
+    {9.282780683216301e-01, -3.718868482120106e-01},
+    {9.278209956268415e-01, -3.730257364767432e-01},
+    {9.273625256504011e-01, -3.741640629714579e-01},
+    {9.269026590827565e-01, -3.753018259818559e-01},
+    {9.264413966164585e-01, -3.764390237944864e-01},
+    {9.259787389461599e-01, -3.775756546967501e-01},
+    {9.255146867686148e-01, -3.787117169769015e-01},
+    {9.250492407826776e-01, -3.798472089240512e-01},
+    {9.245824016893013e-01, -3.809821288281689e-01},
+    {9.241141701915373e-01, -3.821164749800858e-01},
+    {9.236445469945337e-01, -3.832502456714969e-01},
+    {9.231735328055345e-01, -3.843834391949643e-01},
+    {9.227011283338786e-01, -3.855160538439188e-01},
+    {9.222273342909986e-01, -3.866480879126634e-01},
+    {9.217521513904198e-01, -3.877795396963752e-01},
+    {9.212755803477590e-01, -3.889104074911081e-01},
+    {9.207976218807237e-01, -3.900406895937958e-01},
+    {9.203182767091106e-01, -3.911703843022539e-01},
+    {9.198375455548048e-01, -3.922994899151824e-01},
+    {9.193554291417789e-01, -3.934280047321689e-01},
+    {9.188719281960914e-01, -3.945559270536903e-01},
+    {9.183870434458861e-01, -3.956832551811160e-01},
+    {9.179007756213905e-01, -3.968099874167103e-01},
+    {9.174131254549152e-01, -3.979361220636348e-01},
+    {9.169240936808526e-01, -3.990616574259509e-01},
+    {9.164336810356757e-01, -4.001865918086229e-01},
+    {9.159418882579371e-01, -4.013109235175197e-01},
+    {9.154487160882678e-01, -4.024346508594184e-01},
+    {9.149541652693762e-01, -4.035577721420057e-01},
+    {9.144582365460469e-01, -4.046802856738814e-01},
+    {9.139609306651395e-01, -4.058021897645602e-01},
+    {9.134622483755878e-01, -4.069234827244749e-01},
+    {9.129621904283982e-01, -4.080441628649787e-01},
+    {9.124607575766490e-01, -4.091642284983474e-01},
+    {9.119579505754890e-01, -4.102836779377824e-01},
+    {9.114537701821365e-01, -4.114025094974132e-01},
+    {9.109482171558779e-01, -4.125207214922996e-01},
+    {9.104412922580672e-01, -4.136383122384345e-01},
+    {9.099329962521239e-01, -4.147552800527466e-01},
+    {9.094233299035327e-01, -4.158716232531024e-01},
+    {9.089122939798419e-01, -4.169873401583093e-01},
+    {9.083998892506623e-01, -4.181024290881177e-01},
+    {9.078861164876663e-01, -4.192168883632239e-01},
+    {9.073709764645862e-01, -4.203307163052724e-01},
+    {9.068544699572136e-01, -4.214439112368585e-01},
+    {9.063365977433983e-01, -4.225564714815306e-01},
+    {9.058173606030460e-01, -4.236683953637931e-01},
+    {9.052967593181188e-01, -4.247796812091088e-01},
+    {9.047747946726327e-01, -4.258903273439013e-01},
+    {9.042514674526569e-01, -4.270003320955576e-01},
+    {9.037267784463131e-01, -4.281096937924305e-01},
+    {9.032007284437731e-01, -4.292184107638414e-01},
+    {9.026733182372588e-01, -4.303264813400826e-01},
+    {9.021445486210405e-01, -4.314339038524199e-01},
+    {9.016144203914357e-01, -4.325406766330948e-01},
+    {9.010829343468079e-01, -4.336467980153277e-01},
+    {9.005500912875654e-01, -4.347522663333197e-01},
+    {9.000158920161603e-01, -4.358570799222555e-01},
+    {8.994803373370870e-01, -4.369612371183058e-01},
+    {8.989434280568812e-01, -4.380647362586298e-01},
+    {8.984051649841186e-01, -4.391675756813778e-01},
+    {8.978655489294136e-01, -4.402697537256935e-01},
+    {8.973245807054183e-01, -4.413712687317167e-01},
+    {8.967822611268210e-01, -4.424721190405857e-01},
+    {8.962385910103452e-01, -4.435723029944398e-01},
+    {8.956935711747483e-01, -4.446718189364220e-01},
+    {8.951472024408204e-01, -4.457706652106809e-01},
+    {8.945994856313827e-01, -4.468688401623742e-01},
+    {8.940504215712870e-01, -4.479663421376699e-01},
+    {8.935000110874138e-01, -4.490631694837502e-01},
+    {8.929482550086714e-01, -4.501593205488127e-01},
+    {8.923951541659944e-01, -4.512547936820739e-01},
+    {8.918407093923427e-01, -4.523495872337709e-01},
+    {8.912849215227001e-01, -4.534436995551644e-01},
+    {8.907277913940732e-01, -4.545371289985410e-01},
+    {8.901693198454897e-01, -4.556298739172159e-01},
+    {8.896095077179980e-01, -4.567219326655349e-01},
+    {8.890483558546646e-01, -4.578133035988772e-01},
+    {8.884858651005743e-01, -4.589039850736579e-01},
+    {8.879220363028281e-01, -4.599939754473306e-01},
+    {8.873568703105417e-01, -4.610832730783892e-01},
+    {8.867903679748451e-01, -4.621718763263714e-01},
+    {8.862225301488806e-01, -4.632597835518601e-01},
+    {8.856533576878016e-01, -4.643469931164871e-01},
+    {8.850828514487716e-01, -4.654335033829341e-01},
+    {8.845110122909626e-01, -4.665193127149364e-01},
+    {8.839378410755541e-01, -4.676044194772847e-01},
+    {8.833633386657316e-01, -4.686888220358279e-01},
+    {8.827875059266853e-01, -4.697725187574754e-01},
+    {8.822103437256089e-01, -4.708555080101994e-01},
+    {8.816318529316984e-01, -4.719377881630376e-01},
+    {8.810520344161502e-01, -4.730193575860958e-01},
+    {8.804708890521608e-01, -4.741002146505500e-01},
+    {8.798884177149244e-01, -4.751803577286489e-01},
+    {8.793046212816323e-01, -4.762597851937166e-01},
+    {8.787195006314716e-01, -4.773384954201548e-01},
+    {8.781330566456232e-01, -4.784164867834454e-01},
+    {8.775452902072614e-01, -4.794937576601530e-01},
+    {8.769562022015515e-01, -4.805703064279270e-01},
+    {8.763657935156495e-01, -4.816461314655044e-01},
+    {8.757740650387004e-01, -4.827212311527123e-01},
+    {8.751810176618363e-01, -4.837956038704698e-01},
+    {8.745866522781761e-01, -4.848692480007911e-01},
+    {8.739909697828232e-01, -4.859421619267875e-01},
+    {8.733939710728648e-01, -4.870143440326701e-01},
+    {8.727956570473698e-01, -4.880857927037520e-01},
+    {8.721960286073888e-01, -4.891565063264507e-01},
+    {8.715950866559510e-01, -4.902264832882912e-01},
+    {8.709928320980644e-01, -4.912957219779071e-01},
+    {8.703892658407133e-01, -4.923642207850446e-01},
+    {8.697843887928577e-01, -4.934319781005636e-01},
+    {8.691782018654314e-01, -4.944989923164409e-01},
+    {8.685707059713409e-01, -4.955652618257725e-01},
+    {8.679619020254642e-01, -4.966307850227757e-01},
+    {8.673517909446490e-01, -4.976955603027919e-01},
+    {8.667403736477115e-01, -4.987595860622885e-01},
+    {8.661276510554351e-01, -4.998228606988624e-01},
+    {8.655136240905691e-01, -5.008853826112407e-01},
+    {8.648982936778269e-01, -5.019471501992850e-01},
+    {8.642816607438848e-01, -5.030081618639924e-01},
+    {8.636637262173812e-01, -5.040684160074983e-01},
+    {8.630444910289141e-01, -5.051279110330795e-01},
+    {8.624239561110406e-01, -5.061866453451552e-01},
+    {8.618021223982749e-01, -5.072446173492910e-01},
+    {8.611789908270876e-01, -5.083018254522002e-01},
+    {8.605545623359034e-01, -5.093582680617462e-01},
+    {8.599288378651004e-01, -5.104139435869457e-01},
+    {8.593018183570085e-01, -5.114688504379703e-01},
+    {8.586735047559073e-01, -5.125229870261497e-01},
+    {8.580438980080262e-01, -5.135763517639729e-01},
+    {8.574129990615412e-01, -5.146289430650919e-01},
+    {8.567808088665750e-01, -5.156807593443229e-01},
+    {8.561473283751945e-01, -5.167317990176499e-01},
+    {8.555125585414098e-01, -5.177820605022260e-01},
+    {8.548765003211730e-01, -5.188315422163763e-01},
+    {8.542391546723761e-01, -5.198802425796005e-01},
+    {8.536005225548502e-01, -5.209281600125748e-01},
+    {8.529606049303636e-01, -5.219752929371544e-01},
+    {8.523194027626210e-01, -5.230216397763758e-01},
+    {8.516769170172609e-01, -5.240671989544601e-01},
+    {8.510331486618554e-01, -5.251119688968137e-01},
+    {8.503880986659081e-01, -5.261559480300321e-01},
+    {8.497417680008525e-01, -5.271991347819013e-01},
+    {8.490941576400509e-01, -5.282415275814013e-01},
+    {8.484452685587929e-01, -5.292831248587072e-01},
+    {8.477951017342936e-01, -5.303239250451923e-01},
+    {8.471436581456926e-01, -5.313639265734305e-01},
+    {8.464909387740521e-01, -5.324031278771979e-01},
+    {8.458369446023557e-01, -5.334415273914767e-01},
+    {8.451816766155068e-01, -5.344791235524554e-01},
+    {8.445251358003272e-01, -5.355159147975332e-01},
+    {8.438673231455553e-01, -5.365518995653215e-01},
+    {8.432082396418454e-01, -5.375870762956454e-01},
+    {8.425478862817651e-01, -5.386214434295480e-01},
+    {8.418862640597948e-01, -5.396549994092906e-01},
+    {8.412233739723254e-01, -5.406877426783570e-01},
+    {8.405592170176576e-01, -5.417196716814542e-01},
+    {8.398937941959995e-01, -5.427507848645159e-01},
+    {8.392271065094661e-01, -5.437810806747042e-01},
+    {8.385591549620770e-01, -5.448105575604123e-01},
+    {8.378899405597550e-01, -5.458392139712668e-01},
+    {8.372194643103249e-01, -5.468670483581293e-01},
+    {8.365477272235120e-01, -5.478940591731002e-01},
+    {8.358747303109401e-01, -5.489202448695194e-01},
+    {8.352004745861303e-01, -5.499456039019702e-01},
+    {8.345249610644997e-01, -5.509701347262801e-01},
+    {8.338481907633595e-01, -5.519938357995242e-01},
+    {8.331701647019132e-01, -5.530167055800275e-01},
+    {8.324908839012561e-01, -5.540387425273663e-01},
+    {8.318103493843727e-01, -5.550599451023716e-01},
+    {8.311285621761358e-01, -5.560803117671306e-01},
+    {8.304455233033046e-01, -5.570998409849897e-01},
+    {8.297612337945230e-01, -5.581185312205561e-01},
+    {8.290756946803191e-01, -5.591363809397010e-01},
+    {8.283889069931020e-01, -5.601533886095610e-01},
+    {8.277008717671618e-01, -5.611695526985409e-01},
+    {8.270115900386670e-01, -5.621848716763159e-01},
+    {8.263210628456635e-01, -5.631993440138341e-01},
+    {8.256292912280727e-01, -5.642129681833185e-01},
+    {8.249362762276903e-01, -5.652257426582692e-01},
+    {8.242420188881840e-01, -5.662376659134664e-01},
+    {8.235465202550933e-01, -5.672487364249718e-01},
+    {8.228497813758264e-01, -5.682589526701315e-01},
+    {8.221518032996592e-01, -5.692683131275782e-01},
+    {8.214525870777344e-01, -5.702768162772331e-01},
+    {8.207521337630588e-01, -5.712844606003090e-01},
+    {8.200504444105025e-01, -5.722912445793115e-01},
+    {8.193475200767969e-01, -5.732971666980422e-01},
+    {8.186433618205335e-01, -5.743022254416005e-01},
+    {8.179379707021619e-01, -5.753064192963863e-01},
+    {8.172313477839882e-01, -5.763097467501014e-01},
+    {8.165234941301740e-01, -5.773122062917532e-01},
+    {8.158144108067338e-01, -5.783137964116556e-01},
+    {8.151040988815345e-01, -5.793145156014319e-01},
+    {8.143925594242929e-01, -5.803143623540171e-01},
+    {8.136797935065747e-01, -5.813133351636602e-01},
+    {8.129658022017924e-01, -5.823114325259262e-01},
+    {8.122505865852039e-01, -5.833086529376983e-01},
+    {8.115341477339112e-01, -5.843049948971807e-01},
+    {8.108164867268581e-01, -5.853004569039005e-01},
+    {8.100976046448293e-01, -5.862950374587097e-01},
+    {8.093775025704479e-01, -5.872887350637883e-01},
+    {8.086561815881750e-01, -5.882815482226452e-01},
+    {8.079336427843067e-01, -5.892734754401222e-01},
+    {8.072098872469734e-01, -5.902645152223945e-01},
+    {8.064849160661379e-01, -5.912546660769743e-01},
+    {8.057587303335938e-01, -5.922439265127122e-01},
+    {8.050313311429637e-01, -5.932322950397998e-01},
+    {8.043027195896973e-01, -5.942197701697721e-01},
+    {8.035728967710708e-01, -5.952063504155093e-01},
+    {8.028418637861839e-01, -5.961920342912395e-01},
+    {8.021096217359593e-01, -5.971768203125404e-01},
+    {8.013761717231402e-01, -5.981607069963423e-01},
+    {8.006415148522891e-01, -5.991436928609294e-01},
+    {7.999056522297859e-01, -6.001257764259429e-01},
+    {7.991685849638264e-01, -6.011069562123827e-01},
+    {7.984303141644207e-01, -6.020872307426096e-01},
+    {7.976908409433912e-01, -6.030665985403482e-01},
+    {7.969501664143711e-01, -6.040450581306880e-01},
+    {7.962082916928030e-01, -6.050226080400867e-01},
+    {7.954652178959369e-01, -6.059992467963715e-01},
+    {7.947209461428283e-01, -6.069749729287426e-01},
+    {7.939754775543372e-01, -6.079497849677736e-01},
+    {7.932288132531257e-01, -6.089236814454155e-01},
+    {7.924809543636567e-01, -6.098966608949977e-01},
+    {7.917319020121923e-01, -6.108687218512306e-01},
+    {7.909816573267918e-01, -6.118398628502083e-01},
+    {7.902302214373100e-01, -6.128100824294097e-01},
+    {7.894775954753960e-01, -6.137793791277018e-01},
+    {7.887237805744907e-01, -6.147477514853411e-01},
+    {7.879687778698258e-01, -6.157151980439765e-01},
+    {7.872125884984216e-01, -6.166817173466510e-01},
+    {7.864552135990858e-01, -6.176473079378039e-01},
+    {7.856966543124112e-01, -6.186119683632733e-01},
+    {7.849369117807745e-01, -6.195756971702979e-01},
+    {7.841759871483340e-01, -6.205384929075197e-01},
+    {7.834138815610288e-01, -6.215003541249855e-01},
+    {7.826505961665757e-01, -6.224612793741500e-01},
+    {7.818861321144691e-01, -6.234212672078768e-01},
+    {7.811204905559779e-01, -6.243803161804418e-01},
+    {7.803536726441443e-01, -6.253384248475345e-01},
+    {7.795856795337824e-01, -6.262955917662607e-01},
+    {7.788165123814760e-01, -6.272518154951441e-01},
+    {7.780461723455767e-01, -6.282070945941292e-01},
+    {7.772746605862029e-01, -6.291614276245828e-01},
+    {7.765019782652373e-01, -6.301148131492967e-01},
+    {7.757281265463254e-01, -6.310672497324895e-01},
+    {7.749531065948739e-01, -6.320187359398091e-01},
+    {7.741769195780490e-01, -6.329692703383341e-01},
+    {7.733995666647743e-01, -6.339188514965771e-01},
+    {7.726210490257291e-01, -6.348674779844861e-01},
+    {7.718413678333470e-01, -6.358151483734467e-01},
+    {7.710605242618138e-01, -6.367618612362842e-01},
+    {7.702785194870657e-01, -6.377076151472665e-01},
+    {7.694953546867879e-01, -6.386524086821050e-01},
+    {7.687110310404124e-01, -6.395962404179578e-01},
+    {7.679255497291163e-01, -6.405391089334316e-01},
+    {7.671389119358204e-01, -6.414810128085832e-01},
+    {7.663511188451869e-01, -6.424219506249224e-01},
+    {7.655621716436182e-01, -6.433619209654138e-01},
+    {7.647720715192542e-01, -6.443009224144792e-01},
+    {7.639808196619715e-01, -6.452389535579994e-01},
+    {7.631884172633813e-01, -6.461760129833163e-01},
+    {7.623948655168271e-01, -6.471120992792355e-01},
+    {7.616001656173835e-01, -6.480472110360278e-01},
+    {7.608043187618542e-01, -6.489813468454321e-01},
+    {7.600073261487703e-01, -6.499145053006563e-01},
+    {7.592091889783881e-01, -6.508466849963809e-01},
+    {7.584099084526877e-01, -6.517778845287601e-01},
+    {7.576094857753715e-01, -6.527081024954242e-01},
+    {7.568079221518612e-01, -6.536373374954818e-01},
+    {7.560052187892974e-01, -6.545655881295217e-01},
+    {7.552013768965365e-01, -6.554928529996153e-01},
+    {7.543963976841503e-01, -6.564191307093185e-01},
+    {7.535902823644226e-01, -6.573444198636738e-01},
+    {7.527830321513488e-01, -6.582687190692122e-01},
+    {7.519746482606328e-01, -6.591920269339562e-01},
+    {7.511651319096865e-01, -6.601143420674205e-01},
+    {7.503544843176265e-01, -6.610356630806152e-01},
+    {7.495427067052737e-01, -6.619559885860479e-01},
+    {7.487298002951505e-01, -6.628753171977246e-01},
+    {7.479157663114792e-01, -6.637936475311532e-01},
+    {7.471006059801801e-01, -6.647109782033448e-01},
+    {7.462843205288703e-01, -6.656273078328160e-01},
+    {7.454669111868606e-01, -6.665426350395909e-01},
+    {7.446483791851549e-01, -6.674569584452033e-01},
+    {7.438287257564475e-01, -6.683702766726985e-01},
+    {7.430079521351217e-01, -6.692825883466360e-01},
+    {7.421860595572477e-01, -6.701938920930909e-01},
+    {7.413630492605809e-01, -6.711041865396560e-01},
+    {7.405389224845600e-01, -6.720134703154446e-01},
+    {7.397136804703048e-01, -6.729217420510915e-01},
+    {7.388873244606151e-01, -6.738290003787560e-01},
+    {7.380598556999681e-01, -6.747352439321236e-01},
+    {7.372312754345167e-01, -6.756404713464076e-01},
+    {7.364015849120877e-01, -6.765446812583521e-01},
+    {7.355707853821803e-01, -6.774478723062332e-01},
+    {7.347388780959635e-01, -6.783500431298615e-01},
+    {7.339058643062745e-01, -6.792511923705841e-01},
+    {7.330717452676171e-01, -6.801513186712865e-01},
+    {7.322365222361595e-01, -6.810504206763948e-01},
+    {7.314001964697324e-01, -6.819484970318775e-01},
+    {7.305627692278276e-01, -6.828455463852481e-01},
+    {7.297242417715950e-01, -6.837415673855661e-01},
+    {7.288846153638420e-01, -6.846365586834405e-01},
+    {7.280438912690308e-01, -6.855305189310302e-01},
+    {7.272020707532766e-01, -6.864234467820476e-01},
+    {7.263591550843460e-01, -6.873153408917591e-01},
+    {7.255151455316546e-01, -6.882061999169885e-01},
+    {7.246700433662657e-01, -6.890960225161182e-01},
+    {7.238238498608879e-01, -6.899848073490914e-01},
+    {7.229765662898732e-01, -6.908725530774144e-01},
+    {7.221281939292153e-01, -6.917592583641577e-01},
+    {7.212787340565479e-01, -6.926449218739597e-01},
+    {7.204281879511419e-01, -6.935295422730269e-01},
+    {7.195765568939045e-01, -6.944131182291369e-01},
+    {7.187238421673769e-01, -6.952956484116404e-01},
+    {7.178700450557317e-01, -6.961771314914630e-01},
+    {7.170151668447722e-01, -6.970575661411068e-01},
+    {7.161592088219294e-01, -6.979369510346534e-01},
+    {7.153021722762606e-01, -6.988152848477649e-01},
+    {7.144440584984474e-01, -6.996925662576865e-01},
+    {7.135848687807936e-01, -7.005687939432483e-01},
+    {7.127246044172235e-01, -7.014439665848672e-01},
+    {7.118632667032795e-01, -7.023180828645491e-01},
+    {7.110008569361208e-01, -7.031911414658905e-01},
+    {7.101373764145209e-01, -7.040631410740809e-01},
+    {7.092728264388657e-01, -7.049340803759049e-01},
+    {7.084072083111520e-01, -7.058039580597435e-01},
+    {7.075405233349850e-01, -7.066727728155766e-01}
 };
 

Modified: freeswitch/branches/gmaruzz/libs/portaudio/src/os/win/pa_win_wdmks_utils.c
==============================================================================
--- freeswitch/branches/gmaruzz/libs/portaudio/src/os/win/pa_win_wdmks_utils.c	(original)
+++ freeswitch/branches/gmaruzz/libs/portaudio/src/os/win/pa_win_wdmks_utils.c	Wed Jan  7 10:17:00 2009
@@ -185,7 +185,8 @@
 int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput )
 {
     HANDLE deviceHandle;
-    int pinCount, pinId, i;
+    int pinCount, pinId;
+	ULONG i;
     int result = 0;
     KSPIN_DATAFLOW requiredDataflowDirection = (isInput ? KSPIN_DATAFLOW_OUT : KSPIN_DATAFLOW_IN );
     

Modified: freeswitch/branches/gmaruzz/libs/portaudio/src/os/win/pa_x86_plain_converters.c
==============================================================================
--- freeswitch/branches/gmaruzz/libs/portaudio/src/os/win/pa_x86_plain_converters.c	(original)
+++ freeswitch/branches/gmaruzz/libs/portaudio/src/os/win/pa_x86_plain_converters.c	Wed Jan  7 10:17:00 2009
@@ -124,7 +124,7 @@
 
 #define PA_DITHER_BITS_   (15)
 /* Multiply by PA_FLOAT_DITHER_SCALE_ to get a float between -2.0 and +1.99999 */
-#define PA_FLOAT_DITHER_SCALE_  (1.0 / ((1<<PA_DITHER_BITS_)-1))
+#define PA_FLOAT_DITHER_SCALE_  (1.0f / ((1<<PA_DITHER_BITS_)-1))
 static const float const_float_dither_scale_ = PA_FLOAT_DITHER_SCALE_;
 #define PA_DITHER_SHIFT_  ((32 - PA_DITHER_BITS_) + 1)
 

Modified: freeswitch/branches/gmaruzz/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c
==============================================================================
--- freeswitch/branches/gmaruzz/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c	(original)
+++ freeswitch/branches/gmaruzz/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c	Wed Jan  7 10:17:00 2009
@@ -242,21 +242,21 @@
   i = ser->ser_id;
 
   flags = (wait->events & SU_WAIT_IN) ? EV_ADD : EV_ADD | EV_DISABLE;
-  EV_SET(ev, wait->fd, EVFILT_READ, flags, 0, 0, (void *)i);
+  EV_SET(ev, wait->fd, EVFILT_READ, flags, 0, 0, (void *)(intptr_t)i);
   if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) {
     SU_DEBUG_0(("kevent((%u, %s, %u, %p)) failed: %s\n",
-		wait->fd, "EVFILT_READ", flags, (void *)i, strerror(errno)));
+				wait->fd, "EVFILT_READ", flags, (void *)(intptr_t)i, strerror(errno)));
     return -1;
   }
 
   flags = (wait->events & SU_WAIT_OUT) ? EV_ADD : EV_ADD | EV_DISABLE;
-  EV_SET(ev, wait->fd, EVFILT_WRITE, flags, 0, 0, (void *)i);
+  EV_SET(ev, wait->fd, EVFILT_WRITE, flags, 0, 0, (void *)(intptr_t)i);
   if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) {
     int error = errno;
     SU_DEBUG_0(("kevent((%u, %s, %u, %p)) failed: %s\n",
-		wait->fd, "EVFILT_WRITE", flags, (void *)i, strerror(error)));
+				wait->fd, "EVFILT_WRITE", flags, (void *)(intptr_t)i, strerror(error)));
 
-    EV_SET(ev, wait->fd, EVFILT_READ, EV_DELETE, 0, 0, (void *)i);
+    EV_SET(ev, wait->fd, EVFILT_READ, EV_DELETE, 0, 0, (void *)(intptr_t)i);
     kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL);
 
     errno = error;
@@ -294,17 +294,17 @@
 
   wait = ser->ser_wait;
 
-  EV_SET(ev, wait->fd, EVFILT_READ, EV_DELETE, 0, 0, (void *)i);
+  EV_SET(ev, wait->fd, EVFILT_READ, EV_DELETE, 0, 0, (void *)(intptr_t)i);
   if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) {
     SU_DEBUG_0(("remove kevent((%u, %s, %s, %p)) failed: %s\n",
-		wait->fd, "EVFILT_READ", "EV_DELETE", (void *)i,
+				wait->fd, "EVFILT_READ", "EV_DELETE", (void *)(intptr_t)i,
 		strerror(errno)));
   }
 
-  EV_SET(ev, wait->fd, EVFILT_WRITE, EV_DELETE, 0, 0, (void *)i);
+  EV_SET(ev, wait->fd, EVFILT_WRITE, EV_DELETE, 0, 0, (void *)(intptr_t)i);
   if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) {
     SU_DEBUG_0(("remove kevent((%u, %s, %s, %p)) failed: %s\n",
-		wait->fd, "EVFILT_WRITE", "EV_DELETE", (void *)i,
+				wait->fd, "EVFILT_WRITE", "EV_DELETE", (void *)(intptr_t)i,
 		strerror(errno)));
   }
 
@@ -461,21 +461,21 @@
   wait->events = events;
 
   flags = (wait->events & SU_WAIT_IN) ? EV_ADD | EV_ENABLE : EV_ADD | EV_DISABLE;
-  EV_SET(ev, wait->fd, EVFILT_READ, flags, 0, 0, (void *)index);
+  EV_SET(ev, wait->fd, EVFILT_READ, flags, 0, 0, (void *)(intptr_t)index);
   if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) {
     SU_DEBUG_0(("modify kevent((%u, %s, %s, %p)) failed: %s\n",
 		wait->fd, "EVFILT_READ",
 		(events & SU_WAIT_IN) ? "EV_ENABLE" : "EV_DISABLE",
-		(void *)index, strerror(errno)));
+				(void *)(intptr_t)index, strerror(errno)));
   }
 
   flags = (wait->events & SU_WAIT_OUT) ? EV_ADD | EV_ENABLE : EV_ADD | EV_DISABLE;
-  EV_SET(ev, wait->fd, EVFILT_WRITE, flags, 0, 0, (void *)index);
+  EV_SET(ev, wait->fd, EVFILT_WRITE, flags, 0, 0, (void *)(intptr_t)index);
   if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) {
     SU_DEBUG_0(("modify kevent((%u, %s, %s, %p)) failed: %s\n",
 		wait->fd, "EVFILT_WRITE",
 		(events & SU_WAIT_OUT) ? "EV_ENABLE" : "EV_DISABLE",
-		(void *)index, strerror(errno)));
+				(void *)(intptr_t)index, strerror(errno)));
   }
 
   return 0;
@@ -539,7 +539,7 @@
     struct su_register *ser;
     su_root_magic_t *magic;
 
-    index = (int)ev[j].udata;
+    index = (int)(intptr_t)ev[j].udata;
     if (index <= 0 || self->sup_max_index < index)
       continue;
     ser = self->sup_indices[index];

Modified: freeswitch/branches/gmaruzz/libs/win32/Dowload 32khz Sounds.2008.vcproj
==============================================================================
--- freeswitch/branches/gmaruzz/libs/win32/Dowload 32khz Sounds.2008.vcproj	(original)
+++ freeswitch/branches/gmaruzz/libs/win32/Dowload 32khz Sounds.2008.vcproj	Wed Jan  7 10:17:00 2009
@@ -75,7 +75,7 @@
 				<Tool
 					Name="VCCustomBuildTool"
 					Description="Downloading 32khzsound."
-					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\32000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-32000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\32000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-32000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
+					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\32000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-32000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\32000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-32000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
 					Outputs="$(ProjectDir)..\sounds\en\us\callie\voicemail\32000"
 				/>
 			</FileConfiguration>
@@ -85,7 +85,7 @@
 				<Tool
 					Name="VCCustomBuildTool"
 					Description="Downloading 32khzsound."
-					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\32000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-32000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\32000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-32000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
+					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\32000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-32000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\32000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-32000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
 					Outputs="$(ProjectDir)..\sounds\en\us\callie\voicemail\32000"
 				/>
 			</FileConfiguration>

Modified: freeswitch/branches/gmaruzz/libs/win32/Download 16khz Sounds.2008.vcproj
==============================================================================
--- freeswitch/branches/gmaruzz/libs/win32/Download 16khz Sounds.2008.vcproj	(original)
+++ freeswitch/branches/gmaruzz/libs/win32/Download 16khz Sounds.2008.vcproj	Wed Jan  7 10:17:00 2009
@@ -75,7 +75,7 @@
 				<Tool
 					Name="VCCustomBuildTool"
 					Description="Downloading 16khzsound."
-					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\16000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-16000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\16000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-16000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
+					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\16000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-16000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\16000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-16000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
 					Outputs="$(ProjectDir)..\sounds\en\us\callie\voicemail\16000"
 				/>
 			</FileConfiguration>
@@ -85,7 +85,7 @@
 				<Tool
 					Name="VCCustomBuildTool"
 					Description="Downloading 16khzsound."
-					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\16000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-16000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\16000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-16000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
+					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\16000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-16000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\16000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-16000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
 					Outputs="$(ProjectDir)..\sounds\en\us\callie\voicemail\16000"
 				/>
 			</FileConfiguration>

Modified: freeswitch/branches/gmaruzz/libs/win32/Download 8khz Sounds.2008.vcproj
==============================================================================
--- freeswitch/branches/gmaruzz/libs/win32/Download 8khz Sounds.2008.vcproj	(original)
+++ freeswitch/branches/gmaruzz/libs/win32/Download 8khz Sounds.2008.vcproj	Wed Jan  7 10:17:00 2009
@@ -75,7 +75,7 @@
 				<Tool
 					Name="VCCustomBuildTool"
 					Description="Downloading 8khzsound."
-					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\8000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-8000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\8000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-8000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
+					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\8000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-8000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\8000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-8000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
 					Outputs="$(ProjectDir)..\sounds\en\us\callie\voicemail\8000"
 				/>
 			</FileConfiguration>
@@ -85,7 +85,7 @@
 				<Tool
 					Name="VCCustomBuildTool"
 					Description="Downloading 8khzsound."
-					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\8000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-8000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\8000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-8000-1.0.2.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
+					CommandLine="if not exist &quot;$(ProjectDir)..\sounds\en\us\callie\voicemail\8000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-en-us-callie-8000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;if not exist &quot;$(ProjectDir)..\sounds\music\8000&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/freeswitch-sounds-music-8000-1.0.7.tar.gz &quot;$(ProjectDir)..\sounds&quot;&#x0D;&#x0A;"
 					Outputs="$(ProjectDir)..\sounds\en\us\callie\voicemail\8000"
 				/>
 			</FileConfiguration>

Modified: freeswitch/branches/gmaruzz/libs/win32/flite/flite.2008.vcproj
==============================================================================
--- freeswitch/branches/gmaruzz/libs/win32/flite/flite.2008.vcproj	(original)
+++ freeswitch/branches/gmaruzz/libs/win32/flite/flite.2008.vcproj	Wed Jan  7 10:17:00 2009
@@ -45,7 +45,7 @@
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
-				WarningLevel="3"
+				WarningLevel="0"
 				DebugInformationFormat="4"
 			/>
 			<Tool
@@ -108,7 +108,7 @@
 				MinimalRebuild="true"
 				RuntimeLibrary="2"
 				EnableFunctionLevelLinking="true"
-				WarningLevel="3"
+				WarningLevel="0"
 				DebugInformationFormat="3"
 			/>
 			<Tool
@@ -127,9 +127,6 @@
 				Name="VCALinkTool"
 			/>
 			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
 				Name="VCXDCMakeTool"
 			/>
 			<Tool
@@ -139,9 +136,6 @@
 				Name="VCFxCopTool"
 			/>
 			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
 				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
@@ -721,15 +715,15 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\flite-1.3.99\lang\cmu_us_kal\voxdefs.h"
+				RelativePath="..\..\flite-1.3.99\lang\cmu_us_kal16\voxdefs.h"
 				>
 			</File>
 			<File
-				RelativePath="..\..\flite-1.3.99\lang\cmu_us_kal16\voxdefs.h"
+				RelativePath="..\..\flite-1.3.99\lang\cmu_time_awb\voxdefs.h"
 				>
 			</File>
 			<File
-				RelativePath="..\..\flite-1.3.99\lang\cmu_time_awb\voxdefs.h"
+				RelativePath="..\..\flite-1.3.99\lang\cmu_us_kal\voxdefs.h"
 				>
 			</File>
 		</Filter>
@@ -742,4 +736,4 @@
 	</Files>
 	<Globals>
 	</Globals>
-</VisualStudioProject>
\ No newline at end of file
+</VisualStudioProject>

Modified: freeswitch/branches/gmaruzz/libs/win32/pocketsphinx/pocketsphinx.2008.vcproj
==============================================================================
--- freeswitch/branches/gmaruzz/libs/win32/pocketsphinx/pocketsphinx.2008.vcproj	(original)
+++ freeswitch/branches/gmaruzz/libs/win32/pocketsphinx/pocketsphinx.2008.vcproj	Wed Jan  7 10:17:00 2009
@@ -59,7 +59,7 @@
 				AssemblerListingLocation=".\Release/"
 				ObjectFile=".\Release/"
 				ProgramDataBaseFileName=".\Release/"
-				WarningLevel="3"
+				WarningLevel="0"
 				SuppressStartupBanner="true"
 			/>
 			<Tool
@@ -145,7 +145,7 @@
 				AssemblerListingLocation=".\Debug/"
 				ObjectFile=".\Debug/"
 				ProgramDataBaseFileName=".\Debug/"
-				WarningLevel="3"
+				WarningLevel="0"
 				SuppressStartupBanner="true"
 				DebugInformationFormat="4"
 			/>
@@ -278,11 +278,11 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\pocketsphinx-0.5.99\include\pocketsphinx.h"
+				RelativePath="..\..\..\include\pocketsphinx.h"
 				>
 			</File>
 			<File
-				RelativePath="..\..\..\include\pocketsphinx.h"
+				RelativePath="..\..\pocketsphinx-0.5.99\include\pocketsphinx.h"
 				>
 			</File>
 			<File

Modified: freeswitch/branches/gmaruzz/libs/win32/sphinxbase/sphinxbase.2008.vcproj
==============================================================================
--- freeswitch/branches/gmaruzz/libs/win32/sphinxbase/sphinxbase.2008.vcproj	(original)
+++ freeswitch/branches/gmaruzz/libs/win32/sphinxbase/sphinxbase.2008.vcproj	Wed Jan  7 10:17:00 2009
@@ -59,7 +59,7 @@
 				AssemblerListingLocation=".\Release/"
 				ObjectFile=".\Release/"
 				ProgramDataBaseFileName=".\Release/"
-				WarningLevel="3"
+				WarningLevel="0"
 				SuppressStartupBanner="true"
 			/>
 			<Tool
@@ -146,7 +146,7 @@
 				AssemblerListingLocation=".\Debug/"
 				ObjectFile=".\Debug/"
 				ProgramDataBaseFileName=".\Debug/"
-				WarningLevel="3"
+				WarningLevel="0"
 				SuppressStartupBanner="true"
 				DebugInformationFormat="4"
 			/>
@@ -474,7 +474,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\fe\fe_interface.c"
@@ -497,8 +496,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\fe\fe_sigproc.c"
@@ -521,7 +518,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\fe\fe_warp.c"
@@ -544,7 +540,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\fe\fe_warp_affine.c"
@@ -567,7 +562,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\fe\fe_warp_inverse_linear.c"
@@ -590,7 +584,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\fe\fe_warp_piecewise_linear.c"
@@ -613,7 +606,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\feat\feat.c"
@@ -636,7 +628,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\filename.c"
@@ -659,7 +650,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\fe\fixlog.c"
@@ -682,7 +672,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\lm\fsg_model.c"
@@ -709,7 +698,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\glist.c"
@@ -732,7 +720,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\hash_table.c"
@@ -755,7 +742,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\heap.c"
@@ -778,7 +764,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\info.c"
@@ -801,7 +786,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\lm\jsgf.c"
@@ -836,7 +820,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\listelem_alloc.c"
@@ -871,7 +854,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\mmio.c"
@@ -918,7 +900,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxad\play_win32.c"
@@ -941,7 +922,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\profile.c"
@@ -964,7 +944,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxad\rec_win32.c"
@@ -987,7 +966,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\sbthread.c"
@@ -1014,7 +992,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\slapack_lite.c"
@@ -1037,7 +1014,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\strfuncs.c"
@@ -1060,7 +1036,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\util\unlimit.c"
@@ -1083,7 +1058,6 @@
 						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
-
 			</File>
 			<File
 				RelativePath="..\..\sphinxbase-0.4.99\src\libsphinxbase\fe\yin.c"

Modified: freeswitch/branches/gmaruzz/src/include/switch_channel.h
==============================================================================
--- freeswitch/branches/gmaruzz/src/include/switch_channel.h	(original)
+++ freeswitch/branches/gmaruzz/src/include/switch_channel.h	Wed Jan  7 10:17:00 2009
@@ -472,6 +472,9 @@
 */
 SWITCH_DECLARE(void) switch_channel_event_set_data(_In_ switch_channel_t *channel, _In_ switch_event_t *event);
 
+SWITCH_DECLARE(void) switch_channel_event_set_basic_data(_In_ switch_channel_t *channel, _In_ switch_event_t *event);
+SWITCH_DECLARE(void) switch_channel_event_set_extended_data(_In_ switch_channel_t *channel, _In_ switch_event_t *event);
+
 /*!
   \brief Expand varaibles in a string based on the variables in a paticular channel
   \param channel channel to expand the variables from

Modified: freeswitch/branches/gmaruzz/src/include/switch_dso.h
==============================================================================
--- freeswitch/branches/gmaruzz/src/include/switch_dso.h	(original)
+++ freeswitch/branches/gmaruzz/src/include/switch_dso.h	Wed Jan  7 10:17:00 2009
@@ -30,10 +30,10 @@
 
 typedef void * switch_dso_data_t;
 
-void switch_dso_destroy(switch_dso_lib_t *lib);
-switch_dso_lib_t switch_dso_open(const char *path, int global, char **err);
-switch_dso_func_t switch_dso_func_sym(switch_dso_lib_t lib, const char *sym, char **err);
-void *switch_dso_data_sym(switch_dso_lib_t lib, const char *sym, char **err);
+SWITCH_DECLARE(void) switch_dso_destroy(switch_dso_lib_t *lib);
+SWITCH_DECLARE(switch_dso_lib_t) switch_dso_open(const char *path, int global, char **err);
+SWITCH_DECLARE(switch_dso_func_t) switch_dso_func_sym(switch_dso_lib_t lib, const char *sym, char **err);
+SWITCH_DECLARE(void *) switch_dso_data_sym(switch_dso_lib_t lib, const char *sym, char **err);
 
 
 #endif

Modified: freeswitch/branches/gmaruzz/src/include/switch_ivr.h
==============================================================================
--- freeswitch/branches/gmaruzz/src/include/switch_ivr.h	(original)
+++ freeswitch/branches/gmaruzz/src/include/switch_ivr.h	Wed Jan  7 10:17:00 2009
@@ -780,7 +780,7 @@
 
 	 SWITCH_DECLARE(switch_status_t) switch_ivr_bind_dtmf_meta_session(switch_core_session_t *session, uint32_t key,
 																	   switch_bind_flag_t bind_flags, const char *app);
-	 SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session);
+     SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session, uint32_t key);
 	 SWITCH_DECLARE(switch_status_t) switch_ivr_soft_hold(switch_core_session_t *session, const char *unhold_key, const char *moh_a, const char *moh_b);
 	 SWITCH_DECLARE(switch_status_t) switch_ivr_say(switch_core_session_t *session, const char *tosay, const char *module_name, const char *say_type,
 													const char *say_method, switch_input_args_t *args);

Modified: freeswitch/branches/gmaruzz/src/include/switch_rtp.h
==============================================================================
--- freeswitch/branches/gmaruzz/src/include/switch_rtp.h	(original)
+++ freeswitch/branches/gmaruzz/src/include/switch_rtp.h	Wed Jan  7 10:17:00 2009
@@ -431,6 +431,8 @@
 SWITCH_DECLARE(switch_status_t) switch_rtp_activate_stun_ping(switch_rtp_t *rtp_session, const char *stun_ip, switch_port_t stun_port,
 															  uint32_t packet_count, switch_bool_t funny);
 
+SWITCH_DECLARE(void) switch_rtp_intentional_bugs(switch_rtp_t *rtp_session, switch_rtp_bug_flag_t bugs);
+
 /*!
   \}
 */

Modified: freeswitch/branches/gmaruzz/src/include/switch_types.h
==============================================================================
--- freeswitch/branches/gmaruzz/src/include/switch_types.h	(original)
+++ freeswitch/branches/gmaruzz/src/include/switch_types.h	Wed Jan  7 10:17:00 2009
@@ -179,7 +179,8 @@
 	SBF_DIAL_BLEG = (1 << 2),
 	SBF_EXEC_BLEG = (1 << 3),
 	SBF_EXEC_OPPOSITE = (1 << 4),
-	SBF_EXEC_SAME = (1 << 5)
+	SBF_EXEC_SAME = (1 << 5),
+	SBF_ONCE = (1 << 6)
 } switch_bind_flag_enum_t;
 typedef uint32_t switch_bind_flag_t;
 
@@ -460,6 +461,38 @@
 } switch_rtp_flag_enum_t;
 typedef uint32_t switch_rtp_flag_t;
 
+typedef enum {
+	RTP_BUG_NONE = 0, /* won't be using this one much ;) */
+
+	RTP_BUG_CISCO_SKIP_MARK_BIT_2833 = (1 << 0),
+	/* Some Cisco devices get mad when you send the mark bit on new 2833 because it makes
+	   them flush their jitterbuffer and the dtmf along with it.
+
+	   This flag will disable the sending of the mark bit on the first DTMF packet.
+	*/
+
+
+	RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833 = (1 << 1)
+	/*
+	  Sonus wrongly expects that, when sending a multi-packet 2833 DTMF event, The sender
+	  should increment the RTP timestamp in each packet when, in reality, the sender should
+	  send the same exact timestamp and increment the duration field in the 2833 payload.
+	  This allows a reconstruction of the duration if any of the packets are lost.
+
+	  final_duration - initial_timestamp = total_samples
+
+	  However, if the duration value exceeds the space allocated (16 bits), The sender should increment
+	  the timestamp one unit and reset the duration to 0. 
+	  
+	  Always sending a duration of 0 with a new timestamp should be tolerated but is rarely intentional
+	  and is mistakenly done by many devices.  
+	  The issue is that the Sonus expects everyone to do it this way instead of tolerating either way.
+	  Sonus will actually ignore every packet with the same timestamp before concluding if it's DTMF.
+	  
+	  This flag will cause each packet to have a new timestamp.
+	*/
+
+} switch_rtp_bug_flag_t;
 
 #ifdef _MSC_VER
 #pragma pack(push, r1, 1)
@@ -574,9 +607,23 @@
 	SWITCH_MESSAGE_INDICATE_DISPLAY,
 	SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY,
 	SWITCH_MESSAGE_INDICATE_AUDIO_SYNC,
+	SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA,
 	SWITCH_MESSAGE_INVALID
 } switch_core_session_message_types_t;
 
+typedef struct {
+	uint32_t T38MaxBitRate;
+	switch_bool_t T38FaxFillBitRemoval;
+	switch_bool_t T38FaxTranscodingMMR;
+	switch_bool_t T38FaxTranscodingJBIG;
+	const char *T38FaxRateManagement;
+	uint32_t T38FaxMaxBuffer;
+	uint32_t T38FaxMaxDatagram;
+	const char *T38FaxUdpEC;
+	const char *T38VendorInfo;
+	const char *ip;
+	uint32_t port;
+} switch_t38_options_t;
 
 /*!
   \enum switch_stack_t

Modified: freeswitch/branches/gmaruzz/src/include/switch_xml.h
==============================================================================
--- freeswitch/branches/gmaruzz/src/include/switch_xml.h	(original)
+++ freeswitch/branches/gmaruzz/src/include/switch_xml.h	Wed Jan  7 10:17:00 2009
@@ -142,6 +142,7 @@
 ///\param value the value
 ///\return an xml node or NULL
 SWITCH_DECLARE(switch_xml_t) switch_xml_find_child(switch_xml_t node, const char *childname, const char *attrname, const char *value);
+SWITCH_DECLARE(switch_xml_t) switch_xml_find_child_multi(switch_xml_t node, const char *childname, ...);
 
 ///\brief returns the next tag of the same name in the same section and depth or NULL
 ///\ if not found
@@ -334,11 +335,22 @@
 												  switch_event_t *params);
 
 SWITCH_DECLARE(switch_status_t) switch_xml_locate_domain(const char *domain_name, switch_event_t *params, switch_xml_t *root, switch_xml_t *domain);
+
+SWITCH_DECLARE(switch_status_t) switch_xml_locate_group(const char *group_name,
+														const char *domain_name, 
+														switch_xml_t *root,
+														switch_xml_t *domain,
+														switch_xml_t *group,
+														switch_event_t *params);
+
 SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key,
 													   const char *user_name,
 													   const char *domain_name,
 													   const char *ip,
-													   switch_xml_t *root, switch_xml_t *domain, switch_xml_t *user, switch_event_t *params);
+													   switch_xml_t *root, switch_xml_t *domain, switch_xml_t *user, switch_xml_t *ingroup, 
+													   switch_event_t *params);
+
+SWITCH_DECLARE(switch_status_t) switch_xml_locate_user_in_domain(const char *user_name, switch_xml_t domain, switch_xml_t *user, switch_xml_t *ingroup);
 
 ///\brief open a config in the core registry
 ///\param file_path the name of the config section e.g. modules.conf

Modified: freeswitch/branches/gmaruzz/src/mod/applications/mod_commands/mod_commands.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/applications/mod_commands/mod_commands.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/applications/mod_commands/mod_commands.c	Wed Jan  7 10:17:00 2009
@@ -77,6 +77,245 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
+SWITCH_STANDARD_API(group_call_function)
+{
+	char *domain;
+	char *group_name = NULL;
+	char *flags;
+	int ok = 0;
+	switch_channel_t *channel = NULL;
+	char *fp = NULL;
+	const char *call_delim = ",";
+
+	if (switch_strlen_zero(cmd)) {
+		goto end;
+	}
+
+	if (session) {
+		channel = switch_core_session_get_channel(session);
+	}
+
+	group_name = strdup(cmd);
+	switch_assert(group_name);
+
+	if ((flags = strchr(group_name, '+'))) {
+		*flags++ = '\0';
+		for (fp = flags; fp && *fp; fp++) {
+			switch(*fp) {
+			case 'F':
+				call_delim = "|";
+				break;
+			case 'A':
+				call_delim = ",";
+				break;
+			default:
+				break;
+			}
+		}
+	}
+	
+	domain = strchr(group_name, '@');
+	
+	if (domain) {
+		*domain++ = '\0';
+	} else {
+		domain = switch_core_get_variable("domain");
+	}
+	
+	if (!switch_strlen_zero(domain)) {
+		switch_xml_t xml, x_domain, x_group;
+		switch_event_t *params;
+		switch_stream_handle_t dstream = { 0 };
+
+		SWITCH_STANDARD_STREAM(dstream);
+
+		switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
+		switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "group", group_name);
+		switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain);
+		switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "group_call");
+		
+		if (switch_xml_locate_group(group_name, domain, &xml, &x_domain, &x_group, params) == SWITCH_STATUS_SUCCESS) {
+			switch_xml_t x_user, x_users, x_param, x_params;
+			
+			if ((x_users = switch_xml_child(x_group, "users"))) {
+				ok++;
+				
+				for(x_user = switch_xml_child(x_users, "user"); x_user; x_user = x_user->next) {
+					const char *id = switch_xml_attr_soft(x_user, "id");
+					const char *dest = NULL;
+					char *d_dest = NULL;
+					
+					if ((x_params = switch_xml_child(x_domain, "params"))) {
+						for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
+							const char *var = switch_xml_attr(x_param, "name");
+							const char *val = switch_xml_attr(x_param, "value");
+
+							if (!strcasecmp(var, "group-dial-string")) {
+								dest = val;
+								break;
+							}
+
+							if (!strcasecmp(var, "dial-string")) {
+								dest = val;
+							}
+						}
+					}
+
+					if ((x_params = switch_xml_child(x_group, "params"))) {
+						for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
+							const char *var = switch_xml_attr(x_param, "name");
+							const char *val = switch_xml_attr(x_param, "value");
+
+							if (!strcasecmp(var, "group-dial-string")) {
+								dest = val;
+								break;
+							}
+
+							if (!strcasecmp(var, "dial-string")) {
+								dest = val;
+							}
+						}
+					}
+
+					if ((x_params = switch_xml_child(x_user, "params"))) {
+						for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
+							const char *var = switch_xml_attr(x_param, "name");
+							const char *val = switch_xml_attr(x_param, "value");
+							
+							if (!strcasecmp(var, "group-dial-string")) {
+								dest = val;
+								break;
+							}
+
+							if (!strcasecmp(var, "dial-string")) {
+								dest = val;
+							}
+						}
+					}
+					
+					if (dest) {
+						if (channel) {
+							switch_channel_set_variable(channel, "dialed_group", group_name);
+							switch_channel_set_variable(channel, "dialed_user", id);
+							switch_channel_set_variable(channel, "dialed_domain", domain);
+							d_dest = switch_channel_expand_variables(channel, dest);
+						} else {
+							switch_event_del_header(params, "dialed_user");
+							switch_event_del_header(params, "dialed_group");
+							switch_event_del_header(params, "dialed_domain");
+							switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_user", id);
+							switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_group", group_name);
+							switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
+							d_dest = switch_event_expand_headers(params, dest);
+						}
+					} else {
+						d_dest = switch_mprintf("user/%s@%s", id, domain);
+					}
+					
+					if (d_dest) {
+						if (!switch_stristr("error/", d_dest)) {
+							dstream.write_function(&dstream, "%s%s", d_dest, call_delim);
+						}
+					
+						if (d_dest != dest) {
+							free(d_dest);
+						}
+					}
+				}
+
+				if (ok && dstream.data) {
+					char *data = (char *) dstream.data;
+					char c = end_of(data);
+					char *p;
+
+					if (c == ',' || c == '|') {
+						end_of(data) = '\0';
+					}
+					
+					for (p = data; p && *p; p++) {
+						if (*p == '{') {
+							*p = '[';
+						} else if (*p == '}') {
+							*p = ']';
+						}
+					}
+
+
+					stream->write_function(stream, "%s", data);
+					free(dstream.data);
+				} else {
+					ok = 0;
+				}
+				
+			}
+			switch_xml_free(xml);
+		}
+		switch_event_destroy(&params);
+	}
+
+ end:
+
+	switch_safe_free(group_name);
+	
+	if (!ok) {
+		stream->write_function(stream, "error/NO_ROUTE_DESTINATION");
+	}
+
+	return SWITCH_STATUS_SUCCESS;
+}
+
+
+SWITCH_STANDARD_API(in_group_function)
+{
+	switch_xml_t x_domain, xml = NULL, x_user = NULL, x_group;
+	int argc;
+	char *mydata = NULL, *argv[2], *user, *domain;
+	char delim = ',';
+	switch_event_t *params = NULL;
+	const char *rval = "false";
+	char *group;
+	
+	if (switch_strlen_zero(cmd) || !(mydata = strdup(cmd))) {
+		goto end;
+	}
+
+	if ((argc = switch_separate_string(mydata, delim, argv, (sizeof(argv) / sizeof(argv[0])))) < 2) {
+		goto end;
+	}
+
+	user = argv[0];
+	group = argv[1];
+
+	if ((domain = strchr(user, '@'))) {
+		*domain++ = '\0';
+	} else {
+		domain = switch_core_get_variable("domain");
+	}
+
+	switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
+	switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "user", user);
+	switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain);
+
+	if (switch_xml_locate_group(group, domain, &xml, &x_domain, &x_group, params) == SWITCH_STATUS_SUCCESS) {
+		switch_xml_t x_users;
+		if ((x_users = switch_xml_child(x_group, "users"))) {
+			if ((x_user = switch_xml_find_child(x_users, "user", "id", user))) {
+				rval = "true";
+			}
+		}
+	}
+
+  end:
+	
+	stream->write_function(stream, "%s", rval);
+	
+	switch_xml_free(xml);
+	free(mydata);
+	switch_event_destroy(&params);
+
+	return SWITCH_STATUS_SUCCESS;
+}
+
 SWITCH_STANDARD_API(user_data_function)
 {
 	switch_xml_t x_domain, xml = NULL, x_user = NULL, x_param, x_params;
@@ -111,7 +350,7 @@
 	switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "type", type);
 	switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "key", key);
 
-	if (key && type && switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, params) == SWITCH_STATUS_SUCCESS) {
+	if (key && type && switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, NULL, params) == SWITCH_STATUS_SUCCESS) {
 		if (!strcmp(type, "attr")) {
 			const char *attr = switch_xml_attr_soft(x_user, key);
 			stream->write_function(stream, "%s", attr);
@@ -201,7 +440,7 @@
 		goto end;
 	}
 
-	if (switch_xml_locate_user(key, user, domain, NULL, &xml, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) {
+	if (switch_xml_locate_user(key, user, domain, NULL, &xml, &x_domain, &x_user, NULL, NULL) != SWITCH_STATUS_SUCCESS) {
 		err = "can't find user";
 		goto end;
 	}
@@ -2940,6 +3179,9 @@
 	switch_api_interface_t *commands_api_interface;
 	*module_interface = switch_loadable_module_create_module_interface(pool, modname);
 
+	SWITCH_ADD_API(commands_api_interface, "group_call", "Generate a dial string to call a group", group_call_function, "<group>[@<domain>]");
+	SWITCH_ADD_API(commands_api_interface, "in_group", "determine if a user is in a group", in_group_function, "<user>[@<domain>] <group_name>");
+
 	SWITCH_ADD_API(commands_api_interface, "uuid_flush_dtmf", "Flush dtmf on a given uuid", uuid_flush_dtmf_function, "<uuid>");
 	SWITCH_ADD_API(commands_api_interface, "md5", "md5", md5_function, "<data>");
 	SWITCH_ADD_API(commands_api_interface, "hupall", "hupall", hupall_api_function, "<cause> [<var> <value>]");

Modified: freeswitch/branches/gmaruzz/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/applications/mod_conference/mod_conference.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/applications/mod_conference/mod_conference.c	Wed Jan  7 10:17:00 2009
@@ -264,6 +264,7 @@
 	int comfort_noise_level;
 	int video_running;
 	uint32_t eflags;
+	uint32_t verbose_events;
 } conference_obj_t;
 
 /* Relationship with another member */
@@ -308,6 +309,7 @@
 	switch_ivr_digit_stream_t *digit_stream;
 	switch_speech_handle_t lsh;
 	switch_speech_handle_t *sh;
+	uint32_t verbose_events;
 	struct conference_member *next;
 };
 
@@ -401,15 +403,21 @@
 	if (!member)
 		return status;
 
-	if (member->session) {
-		switch_channel_t *channel = switch_core_session_get_channel(member->session);
-		switch_channel_event_set_data(channel, event);
-	}
-
 	if (member->conference) {
 		status = conference_add_event_data(member->conference, event);
 	}
 
+	if (member->session) {
+		switch_channel_t *channel = switch_core_session_get_channel(member->session);
+		
+		if (member->verbose_events) {
+			switch_channel_event_set_data(channel, event);
+		} else {
+			switch_channel_event_set_basic_data(channel, event);
+		}
+		
+	}
+
 	switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-ID", "%u", member->id);
 
 	return status;
@@ -572,6 +580,7 @@
 	member->conference = conference;
 	member->next = conference->members;
 	member->energy_level = conference->energy_level;
+	member->verbose_events = conference->verbose_events;
 	conference->members = member;
 	switch_set_flag(member, MFLAG_INTREE);
 	switch_mutex_unlock(conference->member_mutex);
@@ -1543,6 +1552,13 @@
 	   and mux it with any audio from other channels. */
 
 	while (switch_test_flag(member, MFLAG_RUNNING) && switch_channel_ready(channel)) {
+
+		if (switch_channel_test_flag(channel, CF_SERVICE)) {
+			switch_yield(100000);
+			continue;
+		}
+
+
 		/* Read a frame. */
 		status = switch_core_session_read_frame(member->session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
@@ -1790,8 +1806,9 @@
 		const char *toval = switch_channel_get_variable(channel, "conference_auto_outcall_timeout");
 		const char *flags = switch_channel_get_variable(channel, "conference_auto_outcall_flags");
 		const char *ann = switch_channel_get_variable(channel, "conference_auto_outcall_announce");
+		const char *prefix = switch_channel_get_variable(channel, "conference_auto_outcall_prefix");
 		int to = 60;
-
+		
 		if (ann) {
 			member->conference->special_announce = switch_core_strdup(member->conference->pool, ann);
 		}
@@ -1806,7 +1823,20 @@
 		}
 
 		for (cp = call_list; cp; cp = cp->next) {
-			conference_outcall_bg(member->conference, NULL, NULL, cp->string, to, switch_str_nil(flags), cid_name, cid_num);
+			int argc;
+			char *argv[512] = { 0 };
+			char *cpstr = strdup(cp->string);
+			int x = 0;
+
+			switch_assert(cpstr);
+			argc = switch_separate_string(cpstr, ',', argv, (sizeof(argv) / sizeof(argv[0])));
+			for (x = 0; x < argc; x++) {
+				char *dial_str = switch_mprintf("%s%s", switch_str_nil(prefix), argv[x]);
+				switch_assert(dial_str);
+				conference_outcall_bg(member->conference, NULL, NULL, dial_str, to, switch_str_nil(flags), cid_name, cid_num);
+				switch_safe_free(dial_str);
+			}
+			switch_safe_free(cpstr);
 		}
 	}
 	/* Fair WARNING, If you expect the caller to hear anything or for digit handling to be processed,      */
@@ -2014,9 +2044,18 @@
 			}
 			switch_clear_flag_locked(member, MFLAG_FLUSH_BUFFER);
 		}
-
+		
 		switch_mutex_unlock(member->flag_mutex);
 
+
+		if (switch_core_session_private_event_count(member->session)) {
+			switch_channel_set_flag(channel, CF_SERVICE);
+			switch_ivr_parse_all_events(member->session);
+			switch_channel_clear_flag(channel, CF_SERVICE);
+			switch_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
+			switch_core_session_set_read_codec(member->session, &member->read_codec);
+		}
+		
 		if (use_timer) {
 			switch_core_timer_next(&timer);
 		} else {
@@ -3024,6 +3063,140 @@
 	return ret_status;
 }
 
+
+static void add_x_tag(switch_xml_t x_member, const char *name, const char *value, int off)
+{
+	switch_size_t dlen = strlen(value) * 3;
+	char *data;
+	switch_xml_t x_tag;
+
+	x_tag = switch_xml_add_child_d(x_member, name, off);
+	switch_assert(x_tag);
+	
+	switch_zmalloc(data, dlen);
+
+	switch_url_encode(value, data, dlen);
+	switch_xml_set_txt_d(x_tag, data);
+	free(data);
+}
+
+static void conference_xlist(conference_obj_t *conference, switch_xml_t x_conference, int off)
+{
+	conference_member_t *member = NULL;
+	switch_xml_t x_member = NULL, x_members = NULL, x_flags;
+	int moff = 0;
+	char i[30] = "";
+	char *ival = i;
+	switch_assert(conference != NULL);
+	switch_assert(x_conference != NULL);
+	
+	switch_xml_set_attr_d(x_conference, "name", conference->name);
+	switch_snprintf(i, sizeof(i), "%d", conference->count);
+	switch_xml_set_attr_d(x_conference, "member-count", ival);
+
+	if (switch_test_flag(conference, CFLAG_LOCKED)) {
+		switch_xml_set_attr_d(x_conference, "locked", "true");
+	}
+
+	x_members = switch_xml_add_child_d(x_conference, "members", 0);
+	switch_assert(x_members);
+	
+	switch_mutex_lock(conference->member_mutex);
+
+	for (member = conference->members; member; member = member->next) {
+		switch_channel_t *channel;
+		switch_caller_profile_t *profile;
+		char *uuid;
+		char *name;
+		uint32_t count = 0;
+		switch_xml_t x_tag;
+		int toff = 0;
+		
+		if (switch_test_flag(member, MFLAG_NOCHANNEL)) {
+			continue;
+		}
+
+		uuid = switch_core_session_get_uuid(member->session);
+		channel = switch_core_session_get_channel(member->session);
+		profile = switch_channel_get_caller_profile(channel);
+		name = switch_channel_get_name(channel);
+
+		
+		x_member = switch_xml_add_child_d(x_members, "member", moff++);
+		switch_assert(x_member);
+
+		switch_snprintf(i, sizeof(i), "%d", member->id);
+
+		add_x_tag(x_member, "id", i, toff++);
+		add_x_tag(x_member, "uuid", uuid, toff++);
+		add_x_tag(x_member, "caller_id_name", profile->caller_id_name, toff++);
+		add_x_tag(x_member, "caller_id_number", profile->caller_id_number, toff++);
+		
+
+		x_flags = switch_xml_add_child_d(x_member, "flags", count++);
+		switch_assert(x_flags);
+
+		x_tag = switch_xml_add_child_d(x_flags, "can_hear", count++);
+		switch_xml_set_txt_d(x_tag, switch_test_flag(member, MFLAG_CAN_HEAR) ? "true" : "false");
+
+		x_tag = switch_xml_add_child_d(x_flags, "can_speak", count++);
+		switch_xml_set_txt_d(x_tag, switch_test_flag(member, MFLAG_CAN_SPEAK) ? "true" : "false");
+
+		x_tag = switch_xml_add_child_d(x_flags, "talking", count++);
+		switch_xml_set_txt_d(x_tag, switch_test_flag(member, MFLAG_TALKING) ? "true" : "false");
+
+		x_tag = switch_xml_add_child_d(x_flags, "has_video", count++);
+		switch_xml_set_txt_d(x_tag, switch_channel_test_flag(switch_core_session_get_channel(member->session), CF_VIDEO) ? "true" : "false");
+		
+		x_tag = switch_xml_add_child_d(x_flags, "has_floor", count++);
+		switch_xml_set_txt_d(x_tag, (member == member->conference->floor_holder) ? "true" : "false");
+		
+	}
+
+	switch_mutex_unlock(conference->member_mutex);
+}
+static switch_status_t conf_api_sub_xml_list(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv)
+{
+	int count = 0;
+	switch_hash_index_t *hi;
+	void *val;
+	switch_xml_t x_conference, x_conferences;
+	int off = 0;
+	char *ebuf;
+
+	x_conferences = switch_xml_new("conferences");
+	switch_assert(x_conferences);
+	
+	if (conference == NULL) {
+		for (hi = switch_hash_first(NULL, globals.conference_hash); hi; hi = switch_hash_next(hi)) {
+			switch_hash_this(hi, NULL, NULL, &val);
+			conference = (conference_obj_t *) val;
+			
+			x_conference = switch_xml_add_child_d(x_conferences, "conference", off++);
+			switch_assert(conference);
+
+			count++;
+			conference_xlist(conference, x_conference, off);
+
+		}
+	} else {
+		x_conference = switch_xml_add_child_d(x_conferences, "conference", off++);
+		switch_assert(conference);
+		count++;
+		conference_xlist(conference, x_conference, off);
+	}
+
+
+	ebuf = switch_xml_toxml(x_conferences, SWITCH_TRUE);
+
+	stream->write_function(stream, "%s", ebuf);
+
+	switch_xml_free(x_conferences);
+	free(ebuf);
+
+	return SWITCH_STATUS_SUCCESS;
+}
+
 static switch_status_t conf_api_sub_play(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv)
 {
 	int ret_status = SWITCH_STATUS_GENERR;
@@ -3564,6 +3737,7 @@
 /* Entries in this list should be kept in sync with the enum above */
 static api_command_t conf_api_sub_commands[] = {
 	{"list", (void_fn_t) &conf_api_sub_list, CONF_API_SUB_ARGS_SPLIT, "<confname> list [delim <string>]"},
+	{"xml_list", (void_fn_t) &conf_api_sub_xml_list, CONF_API_SUB_ARGS_SPLIT, "<confname> xml_list"},
 	{"energy", (void_fn_t) &conf_api_sub_energy, CONF_API_SUB_MEMBER_TARGET,
 	 "<confname> energy <member_id|all|last> [<newval>]"},
 	{"volume_in", (void_fn_t) &conf_api_sub_volume_in, CONF_API_SUB_MEMBER_TARGET,
@@ -3764,6 +3938,8 @@
 			/* special case the list command, because it doesn't require a conference argument */
 			if (strcasecmp(argv[0], "list") == 0) {
 				conf_api_sub_list(NULL, stream, argc, argv);
+			} else if (strcasecmp(argv[0], "xml_list") == 0) {
+				conf_api_sub_xml_list(NULL, stream, argc, argv);
 			} else if (strcasecmp(argv[0], "help") == 0 || strcasecmp(argv[0], "commands") == 0) {
 				stream->write_function(stream, "%s\n", api_syntax);
 			} else if (argv[1] && strcasecmp(argv[1], "dial") == 0) {
@@ -3881,7 +4057,7 @@
 			goto done;
 		}
 		/* add them to the conference */
-		if (flags && !strcasecmp(flags, "none")) {
+		if (flags && strcasecmp(flags, "none")) {
 			switch_snprintf(appdata, sizeof(appdata), "%s+flags{%s}", conference_name, flags);
 			switch_caller_extension_add_application(peer_session, extension, (char *) global_app_name, appdata);
 		} else {
@@ -4059,15 +4235,20 @@
 	if (flags) {
 		if (strstr(flags, "mute")) {
 			*f &= ~MFLAG_CAN_SPEAK;
-		} else if (strstr(flags, "deaf")) {
+		}
+
+		if (strstr(flags, "deaf")) {
 			*f &= ~MFLAG_CAN_HEAR;
-		} else if (strstr(flags, "waste")) {
+		}
+
+		if (strstr(flags, "waste")) {
 			*f |= MFLAG_WASTE_BANDWIDTH;
-		} else if (strstr(flags, "endconf")) {
+		}
+
+		if (strstr(flags, "endconf")) {
 			*f |= MFLAG_ENDCONF;
 		}
 	}
-
 }
 
 static void clear_eflags(char *events, uint32_t *f)
@@ -4862,6 +5043,7 @@
 	switch_status_t status;
 	int comfort_noise_level = 0;
 	char *suppress_events = NULL;
+	char *verbose_events = NULL;
 	char *auto_record = NULL;
 
 	/* Validate the conference name */
@@ -4981,6 +5163,8 @@
 			}
 		} else if (!strcasecmp(var, "suppress-events") && !switch_strlen_zero(val)) {
 			suppress_events = val;
+		} else if (!strcasecmp(var, "verbose-events") && !switch_strlen_zero(val)) {
+			verbose_events = val;
 		} else if (!strcasecmp(var, "auto-record") && !switch_strlen_zero(val)) {
 			auto_record = val;
 		}
@@ -5140,6 +5324,10 @@
 	if (!switch_strlen_zero(auto_record)) {
 		conference->auto_record = switch_core_strdup(conference->pool, auto_record);
 	}
+
+	if (!switch_strlen_zero(verbose_events) && switch_true(verbose_events)) {
+		conference->verbose_events = 1;
+	}
 	
 	/* caller control configuration chores */
 	if (switch_ivr_digit_stream_parser_new(conference->pool, &conference->dtmf_parser) == SWITCH_STATUS_SUCCESS) {

Modified: freeswitch/branches/gmaruzz/src/mod/applications/mod_dptools/mod_dptools.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/applications/mod_dptools/mod_dptools.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/applications/mod_dptools/mod_dptools.c	Wed Jan  7 10:17:00 2009
@@ -148,7 +148,21 @@
 	}
 }
 
-#define BIND_SYNTAX "<key> [a|b|ab] [a|b|o|s] <app>"
+#define UNBIND_SYNTAX "[<key>]"
+SWITCH_STANDARD_APP(dtmf_unbind_function)
+{
+	char *key = (char *) data;
+	int kval = 0;
+
+	if (key) {
+		kval = atoi(key);
+	}
+
+	switch_ivr_unbind_dtmf_meta_session(session, kval);
+
+}
+
+#define BIND_SYNTAX "<key> [a|b|ab] [a|b|o|s|1] <app>"
 SWITCH_STANDARD_APP(dtmf_bind_function)
 {
 	char *argv[4] = { 0 };
@@ -208,6 +222,10 @@
 			}
 		}
 
+		if (strchr(argv[2], '1')) {
+			bind_flags |= SBF_ONCE;
+		}
+		
 		if (switch_ivr_bind_dtmf_meta_session(session, kval, bind_flags, argv[3]) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bind Error!\n");
 		}
@@ -2002,6 +2020,108 @@
 	return cause;
 }
 
+
+/* fake chan_group */
+switch_endpoint_interface_t *group_endpoint_interface;
+static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session,
+												 switch_event_t *var_event,
+												 switch_caller_profile_t *outbound_profile,
+												 switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
+switch_io_routines_t group_io_routines = {
+	/*.outgoing_channel */ group_outgoing_channel
+};
+
+static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session,
+												 switch_event_t *var_event,
+												 switch_caller_profile_t *outbound_profile,
+												 switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
+{
+	char *group;
+	switch_call_cause_t cause = SWITCH_CAUSE_NONE;
+	char *template = NULL, *dest = NULL;
+	switch_originate_flag_t myflags = SOF_NONE;
+	char *cid_name_override = NULL;
+	char *cid_num_override = NULL;
+	const char *var;
+	unsigned int timelimit = 60;
+	char *domain = NULL;
+	switch_channel_t *new_channel = NULL;
+
+	group = strdup(outbound_profile->destination_number);
+
+	if (!group) goto done;
+	
+	if ((domain = strchr(group, '@'))) {
+		*domain++ = '\0';
+	} else {
+		domain = switch_core_get_variable("domain");
+	}
+	
+	if (!domain) {
+		goto done;
+	}
+
+	template = switch_mprintf("${group_call(%s@%s)}", group, domain);
+	
+	if (session) {
+		switch_channel_t *channel = switch_core_session_get_channel(session);
+		dest = switch_channel_expand_variables(channel, template);
+		if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))) {
+			timelimit = atoi(var);
+		}
+	} else if (var_event) {
+		dest = switch_event_expand_headers(var_event, template);
+	}
+	if (!dest) {
+		goto done;
+	}
+	
+	if (var_event) {
+		cid_name_override = switch_event_get_header(var_event, "origination_caller_id_name");
+		cid_num_override = switch_event_get_header(var_event, "origination_caller_id_number");
+		if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE))) {
+			timelimit = atoi(var);
+		}
+	}
+	
+	if ((flags & SOF_FORKED_DIAL)) {
+		myflags |= SOF_NOBLOCK;
+	}
+	
+	
+	if (switch_ivr_originate(session, new_session, &cause, dest, timelimit, NULL, 
+							 cid_name_override, cid_num_override, NULL, var_event, myflags) == SWITCH_STATUS_SUCCESS) {
+		const char *context;
+		switch_caller_profile_t *cp;
+		
+		new_channel = switch_core_session_get_channel(*new_session);
+		
+		if ((context = switch_channel_get_variable(new_channel, "group_context"))) {
+			if ((cp = switch_channel_get_caller_profile(new_channel))) {
+				cp->context = switch_core_strdup(cp->pool, context);
+			}
+		}
+		switch_core_session_rwunlock(*new_session);
+	}
+
+
+ done:
+
+	if (dest && dest != template) {
+		switch_safe_free(dest);
+	}
+	
+	switch_safe_free(template);	
+
+	if (cause == SWITCH_CAUSE_NONE) {
+		cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+	}
+
+	return cause;
+}
+
+
+
 /* fake chan_user */
 switch_endpoint_interface_t *user_endpoint_interface;
 static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
@@ -2017,7 +2137,7 @@
 												 switch_caller_profile_t *outbound_profile,
 												 switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
 {
-	switch_xml_t x_domain = NULL, xml = NULL, x_user = NULL, x_param, x_params;
+	switch_xml_t x_domain = NULL, xml = NULL, x_user = NULL, x_group = NULL, x_param, x_params;
 	char *user = NULL, *domain = NULL;
 	const char *dest = NULL;
 	static switch_call_cause_t cause = SWITCH_CAUSE_NONE;
@@ -2030,20 +2150,24 @@
 
 	user = strdup(outbound_profile->destination_number);
 
-	if (!user)
-		goto done;
+	if (!user) goto done;
 
-	if (!(domain = strchr(user, '@'))) {
+	if ((domain = strchr(user, '@'))) {
+		*domain++ = '\0';
+	} else {
+		domain = switch_core_get_variable("domain");
+	}
+	
+	if (!domain) {
 		goto done;
 	}
-
-	*domain++ = '\0';
+	
 
 	switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
 	switch_assert(params);
 	switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "as_channel", "true");
 
-	if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, params) != SWITCH_STATUS_SUCCESS) {
+	if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, &x_group, params) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Can't find user [%s@%s]\n", user, domain);
 		cause = SWITCH_CAUSE_SUBSCRIBER_ABSENT;
 		goto done;
@@ -2061,6 +2185,18 @@
 		}
 	}
 
+	if ((x_params = switch_xml_child(x_group, "params"))) {
+		for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
+			const char *var = switch_xml_attr(x_param, "name");
+			const char *val = switch_xml_attr(x_param, "value");
+
+			if (!strcasecmp(var, "dial-string")) {
+				dest = val;
+				break;
+			}
+		}
+	}
+
 	if ((x_params = switch_xml_child(x_user, "params"))) {
 		for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
 			const char *var = switch_xml_attr(x_param, "name");
@@ -2107,6 +2243,9 @@
 				switch_event_dup(&event, var_event);
 				switch_event_del_header(event, "dialer_user");
 				switch_event_del_header(event, "dialer_domain");
+				if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE))) {
+					timelimit = atoi(var);
+				}
 			} else {
 				switch_event_create(&event, SWITCH_EVENT_REQUEST_PARAMS);
 				switch_assert(event);
@@ -2318,6 +2457,10 @@
 	error_endpoint_interface->interface_name = "error";
 	error_endpoint_interface->io_routines = &error_io_routines;
 
+	group_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
+	group_endpoint_interface->interface_name = "group";
+	group_endpoint_interface->io_routines = &group_io_routines;
+
 	user_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
 	user_endpoint_interface->interface_name = "user";
 	user_endpoint_interface->io_routines = &user_io_routines;
@@ -2389,6 +2532,8 @@
 				   SAF_NONE);
 	SWITCH_ADD_APP(app_interface, "bind_meta_app", "Bind a key to an application", "Bind a key to an application", dtmf_bind_function, BIND_SYNTAX,
 				   SAF_SUPPORT_NOMEDIA);
+	SWITCH_ADD_APP(app_interface, "unbind_meta_app", "Unbind a key from an application", "Unbind a key from an application", dtmf_unbind_function, 
+				   UNBIND_SYNTAX, SAF_SUPPORT_NOMEDIA);
 	SWITCH_ADD_APP(app_interface, "intercept", "intercept", "intercept", intercept_function, INTERCEPT_SYNTAX, SAF_NONE);
 	SWITCH_ADD_APP(app_interface, "eavesdrop", "eavesdrop on a uuid", "eavesdrop on a uuid", eavesdrop_function, eavesdrop_SYNTAX, SAF_NONE);
 	SWITCH_ADD_APP(app_interface, "three_way", "three way call with a uuid", "three way call with a uuid", three_way_function, threeway_SYNTAX, SAF_NONE);

Modified: freeswitch/branches/gmaruzz/src/mod/applications/mod_limit/mod_limit.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/applications/mod_limit/mod_limit.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/applications/mod_limit/mod_limit.c	Wed Jan  7 10:17:00 2009
@@ -285,6 +285,8 @@
 		limit_execute_sql(sql, globals.mutex);
 		switch_safe_free(sql);
 		switch_core_event_hook_remove_state_change(session, db_state_handler);
+		/* Remove limit_realm variable so we register another hook if limit is called again */
+		switch_channel_set_variable(channel, "limit_realm", "");
 	}
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -298,7 +300,7 @@
 	/* The call is either hung up, or is going back into the dialplan, decrement appropriate couters */
 	if (state == CS_HANGUP || state == CS_ROUTING) {	
 		switch_hash_index_t *hi;
-		switch_mutex_lock(globals.mutex);
+		switch_mutex_lock(globals.limit_hash_mutex);
 
 		/* Loop through the channel's hashtable which contains mapping to all the limit_hash_item_t referenced by that channel */
 		for(hi = switch_hash_first(NULL, channel_hash); hi; hi = switch_hash_next(hi))
@@ -317,7 +319,7 @@
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Usage for %s is now %d\n", (const char*)key, item->total_usage);	
 		}
 		switch_core_event_hook_remove_state_change(session, hash_state_handler);
-		switch_mutex_unlock(globals.mutex);
+		switch_mutex_unlock(globals.limit_hash_mutex);
 	}
 	
 	return SWITCH_STATUS_SUCCESS;

Modified: freeswitch/branches/gmaruzz/src/mod/applications/mod_voicemail/mod_voicemail.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/applications/mod_voicemail/mod_voicemail.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/applications/mod_voicemail/mod_voicemail.c	Wed Jan  7 10:17:00 2009
@@ -1888,7 +1888,7 @@
 					switch_channel_event_set_data(channel, params);
 					
 					if (switch_xml_locate_user("id", myid, domain_name, switch_channel_get_variable(channel, "network_addr"),
-											   &xx_domain_root, &xx_domain, &xx_user, params) == SWITCH_STATUS_SUCCESS) {
+											   &xx_domain_root, &xx_domain, &xx_user, NULL, params) == SWITCH_STATUS_SUCCESS) {
 						switch_xml_free(xx_domain_root);
 					}
 
@@ -1981,7 +1981,7 @@
 					
 					
 					if (switch_xml_locate_user("id", myid, domain_name, switch_channel_get_variable(channel, "network_addr"),
-											   &x_domain_root, &x_domain, &x_user, params) != SWITCH_STATUS_SUCCESS) {
+											   &x_domain_root, &x_domain, &x_user, NULL, params) != SWITCH_STATUS_SUCCESS) {
 						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Can't find user [%s@%s]\n", myid, domain_name);
 						ok = 0;
 					}
@@ -2261,7 +2261,9 @@
 		}
 		/*switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send mail is %d, var is %s\n", send_mail, var);*/
 	}
-    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send mail is %d and that's my final answer\n", send_mail);
+
+    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Deliver VM to %s@%s\n", myid, domain_name);
+
 	if (!switch_strlen_zero(vm_storage_dir)) {
 		dir_path = switch_mprintf("%s%s%s", vm_storage_dir, SWITCH_PATH_SEPARATOR, myid);
 	} else if (!switch_strlen_zero(profile->storage_dir)) {
@@ -2507,7 +2509,7 @@
 	vm_profile_t *profile;
 	char *dup = NULL, *user = NULL, *domain = NULL;
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
-	int istag = 0, isall = 0;
+	int isgroup = 0, isall = 0;
 	int argc = 0;
 	char *argv[4];
 	char *box, *path, *cid_num, *cid_name;
@@ -2540,9 +2542,9 @@
 		domain = user;
 	}
 
-	if (switch_stristr("tag=", user)) {
-		user += 4;
-		istag++;
+	if (switch_stristr("group=", user)) {
+		user += 6;
+		isgroup++;
 	} else if (user == domain) {
 		isall++;
 	}
@@ -2567,6 +2569,17 @@
 
 		switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
 		switch_assert(my_params);
+
+		if (isgroup) {
+			switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "group", user);
+		} else {
+			if (isall) {
+				switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "user", "_all_");
+			} else {
+				switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "user", user);
+			}
+		}
+
 		switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "domain", domain);
 		switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "purpose", "publish-vm");
 		
@@ -2581,24 +2594,66 @@
 
 		switch_core_new_memory_pool(&pool);
 		
-		if (!isall && !istag) {
-			if ((ut = switch_xml_find_child(x_domain, "user", "id", user))) {
+		
+		if (isgroup) {
+			switch_xml_t group = NULL, groups = NULL, users = NULL;
+			if ((groups = switch_xml_child(x_domain, "groups"))) {
+				if ((group = switch_xml_find_child_multi(groups, "group", "name", user, NULL))) {
+					if ((users = switch_xml_child(group, "users"))) {
+						for (ut = switch_xml_child(users, "user"); ut; ut = ut->next) {
+							const char *type = switch_xml_attr_soft(ut, "type");
+							
+							if (!strcasecmp(type, "pointer")) {
+								const char *uname = switch_xml_attr_soft(ut, "id");
+								switch_xml_t ux;
+
+								if (switch_xml_locate_user_in_domain(uname, x_domain, &ux, NULL) == SWITCH_STATUS_SUCCESS) {
+									switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
+									status = deliver_vm(profile, ux, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE);
+									switch_event_destroy(&my_params);
+								}
+								continue;
+							}
+							
+							switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
+							status = deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE);
+							switch_event_destroy(&my_params);
+						}
+					}
+				} else {
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot locate group %s\n", user);
+				}
+			}
+		} else if (isall) {
+			switch_xml_t group = NULL, groups = NULL, users = NULL;
+			if ((groups = switch_xml_child(x_domain, "groups"))) {
+				for (group = switch_xml_child(groups, "group"); group; group = group->next) {
+					if ((users = switch_xml_child(group, "users"))) {
+						for (ut = switch_xml_child(users, "user"); ut; ut = ut->next) {
+							const char *type = switch_xml_attr_soft(ut, "type");
+							
+							if (!strcasecmp(type, "pointer")) {
+								continue;
+							}
+
+							switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
+							status = deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE);
+							switch_event_destroy(&my_params);
+						}
+					}
+				}
+			}
+			
+		} else {
+			switch_xml_t x_group = NULL;
+
+			if ((status = switch_xml_locate_user_in_domain(user, x_domain, &ut, &x_group)) == SWITCH_STATUS_SUCCESS) {
 				switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
 				status = deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE);
 				switch_event_destroy(&my_params);
 			} else {
 				status = SWITCH_STATUS_FALSE;
 			}
-		} else {
-			for (ut = switch_xml_child(x_domain, "user"); ut; ut = ut->next) {
-				const char *tag;
-
-				if (isall || (istag && (tag=switch_xml_attr(ut, "vm-tag")) && !strcasecmp(tag, user))) {
-					switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
-					status = deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE);
-					switch_event_destroy(&my_params);
-				}
-			}
 		}
 		
 		switch_core_destroy_memory_pool(&pool);
@@ -2679,7 +2734,7 @@
 		switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "mailbox", id);
 
 		if (switch_xml_locate_user("id", id, domain_name, switch_channel_get_variable(channel, "network_addr"),
-								   &x_domain_root, &x_domain, &x_user, params) == SWITCH_STATUS_SUCCESS) {
+								   &x_domain_root, &x_domain, &x_user, NULL, params) == SWITCH_STATUS_SUCCESS) {
 			if ((x_params = switch_xml_child(x_user, "params"))) {
 				for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
 					const char *var = switch_xml_attr_soft(x_param, "name");
@@ -3562,7 +3617,7 @@
 	}
 }
 
-#define VM_INJECT_USAGE "[tag=]<box> <sound_file> [<cid_num>] [<cid_name>]"
+#define VM_INJECT_USAGE "[group=]<box> <sound_file> [<cid_num>] [<cid_name>]"
 SWITCH_STANDARD_API(voicemail_inject_api_function)
 {
 	if (voicemail_inject(cmd) == SWITCH_STATUS_SUCCESS) {

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_iax/mod_iax.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_iax/mod_iax.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_iax/mod_iax.c	Wed Jan  7 10:17:00 2009
@@ -496,6 +496,7 @@
 
 	switch_clear_flag_locked(tech_pvt, TFLAG_IO);
 	switch_clear_flag_locked(tech_pvt, TFLAG_VOICE);
+	switch_clear_flag_locked(tech_pvt, TFLAG_CODEC);
 
 	if (tech_pvt->read_codec.implementation) {
 		switch_core_codec_destroy(&tech_pvt->read_codec);
@@ -1079,17 +1080,16 @@
 			case IAX_EVENT_VOICE:
 				if (tech_pvt && (tech_pvt->read_frame.datalen = iaxevent->datalen) != 0) {
 					if (channel && switch_channel_get_state(channel) <= CS_HANGUP) {
-						int bytes, frames;
+						int bytes = 0, frames = 1;
 
-						if (!switch_test_flag(tech_pvt, TFLAG_CODEC)) {
+						if (!switch_test_flag(tech_pvt, TFLAG_CODEC) || !tech_pvt->read_codec.implementation) {
+							switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
 							break;
 						}
-
+						
 						if (tech_pvt->read_codec.implementation->encoded_bytes_per_packet) {
 							bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_packet;
 							frames = (int) (tech_pvt->read_frame.datalen / bytes);
-						} else {
-							frames = 1;
 						}
 
 						tech_pvt->read_frame.samples = frames * tech_pvt->read_codec.implementation->samples_per_packet;

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/mod_sofia.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/mod_sofia.c	Wed Jan  7 10:17:00 2009
@@ -734,7 +734,8 @@
 									const char *val;
 									int rtp_timeout_sec = 0;
 									int rtp_hold_timeout_sec = 0;
-									
+								
+									tech_pvt->read_frame.datalen = 0;
 									tech_pvt->codec_ms = codec_ms;
 									switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, 
 													  "Changing codec ptime to %d. I bet you have a linksys/sipura =D\n", tech_pvt->codec_ms);
@@ -809,6 +810,10 @@
 						frames = (tech_pvt->read_frame.datalen / bytes);
 					}
 					tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_codec.implementation->samples_per_packet);
+
+					if (tech_pvt->read_frame.datalen == 0) {
+						continue;
+					}
 				}
 				break;
 			}
@@ -1054,13 +1059,30 @@
 
 	case SWITCH_MESSAGE_INDICATE_MEDIA_REDIRECT:
 		{
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending media re-direct:\n%s\n", msg->string_arg);
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Sending media re-direct:\n%s\n", 
+							  switch_channel_get_name(channel), msg->string_arg);
 			tech_pvt->local_sdp_str = switch_core_session_strdup(session, msg->string_arg);
 			switch_set_flag_locked(tech_pvt, TFLAG_SENT_UPDATE);
 			sofia_glue_do_invite(session);
 		}
 		break;
 
+
+	case SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA:
+		{
+			switch_t38_options_t *t38_options = (switch_t38_options_t *) msg->pointer_arg;
+
+			sofia_glue_set_image_sdp(tech_pvt, t38_options);
+
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Sending request for image media. %s\n", 
+							  switch_channel_get_name(channel), tech_pvt->local_sdp_str);
+							  
+			
+			switch_set_flag_locked(tech_pvt, TFLAG_SENT_UPDATE);
+			sofia_glue_do_invite(session);
+		}
+		break;
+
 	case SWITCH_MESSAGE_INDICATE_MEDIA:
 		{
 			uint32_t send_invite = 1;
@@ -2294,6 +2316,7 @@
 	private_object_t *tech_pvt = NULL;
 	switch_channel_t *nchannel;
 	char *host = NULL, *dest_to = NULL;
+	const char *hval = NULL;
 
 	*new_session = NULL;
 
@@ -2498,9 +2521,20 @@
 	*new_session = nsession;
 	cause = SWITCH_CAUSE_SUCCESS;
 
+	if ((hval = switch_event_get_header(var_event, "sip_auto_answer")) && switch_true(hval)) {
+		switch_channel_set_variable_printf(nchannel, "sip_h_Call-Info", "<sip:%s>;answer-after=0", profile->sipip);
+		switch_channel_set_variable(nchannel, "sip_invite_params", "intercom=true");
+	}
+
 	if (session) {
 		switch_channel_t *o_channel = switch_core_session_get_channel(session);
+		const char *vval = NULL;
 
+		if ((vval = switch_channel_get_variable(o_channel, "sip_auto_answer")) && switch_true(vval)) {
+			switch_channel_set_variable_printf(nchannel, "sip_h_Call-Info", "<sip:%s>;answer-after=0", profile->sipip);
+			switch_channel_set_variable(nchannel, "sip_invite_params", "intercom=true");
+		}
+		
 		switch_ivr_transfer_variable(session, nsession, SOFIA_REPLACES_HEADER);
 		switch_ivr_transfer_variable(session, nsession, "sip_auto_answer");
 		switch_ivr_transfer_variable(session, nsession, SOFIA_SIP_HEADER_PREFIX_T);

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/mod_sofia.h
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/mod_sofia.h	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/mod_sofia.h	Wed Jan  7 10:17:00 2009
@@ -208,7 +208,7 @@
 	TFLAG_NOHUP = (1 << 18),
 	TFLAG_NOSDP_REINVITE = (1 << 19),
 	TFLAG_NAT = (1 << 20),
-	TFLAG_BUGGY_2833 = (1 << 21),
+	TFLAG_USEME = (1 << 21),
 	TFLAG_SIP_HOLD = (1 << 22),
 	TFLAG_INB_NOMEDIA = (1 << 23),
 	TFLAG_LATE_NEGOTIATION = (1 << 24),
@@ -552,6 +552,7 @@
 	uint32_t mismatch_count;
 	uint32_t last_codec_ms;
 	nua_event_t want_event;
+	switch_rtp_bug_flag_t rtp_bugs;
 };
 
 struct callback_t {
@@ -760,3 +761,4 @@
 const char * sofia_state_string(int state);
 switch_status_t sofia_glue_tech_set_codec(private_object_t *tech_pvt, int force);
 void sofia_wait_for_reply(struct private_object *tech_pvt, nua_event_t event, uint32_t timeout);
+void sofia_glue_set_image_sdp(private_object_t *tech_pvt, switch_t38_options_t *t38_options);

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia.c	Wed Jan  7 10:17:00 2009
@@ -1186,12 +1186,25 @@
 	}
 
 	if (switch_true(parse)) {
-		switch_xml_t ut, gateways_tag;
+		switch_xml_t gts, gt, uts, ut, gateways_tag;
+		/* Backwards Compatibility */
 		for (ut = switch_xml_child(x_domain_tag, "user"); ut; ut = ut->next) {
 			if (((gateways_tag = switch_xml_child(ut, "gateways")))) {
 				parse_gateways(profile, gateways_tag);
 			}
 		}
+		/* New Method with <groups> tags and users are now inside a <users> tag */
+		for (gts = switch_xml_child(x_domain_tag, "groups"); gts; gts = gts->next) {
+			for (gt = switch_xml_child(gts, "group"); gt; gt = gt->next) {
+				for (uts = switch_xml_child(gt, "users"); uts; uts = uts->next) {
+					for (ut = switch_xml_child(uts, "user"); ut; ut = ut->next) {
+						if (((gateways_tag = switch_xml_child(ut, "gateways")))) {
+							parse_gateways(profile, gateways_tag);
+						}
+					}
+				}
+			}
+		}
 	}
 }
 
@@ -3549,6 +3562,22 @@
 
 				/* print debug info */
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "INFO DTMF(%c)\n", dtmf.digit);
+				
+				if (switch_channel_test_flag(channel, CF_PROXY_MODE)) {
+					const char *uuid;
+					switch_core_session_t *session_b;
+					
+					if ((uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE)) && (session_b = switch_core_session_locate(uuid))) {
+						while (switch_channel_has_dtmf(channel)) {
+							switch_dtmf_t idtmf = { 0, 0 };
+							if (switch_channel_dequeue_dtmf(channel, &idtmf) == SWITCH_STATUS_SUCCESS) {
+								switch_core_session_send_dtmf(session_b, &idtmf);
+							}
+						}
+
+						switch_core_session_rwunlock(session_b);
+					}
+				}
 
 				/* Send 200 OK response */
 				nua_respond(nh, SIP_200_OK, NUTAG_WITH_THIS(nua), TAG_END());

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia_glue.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia_glue.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia_glue.c	Wed Jan  7 10:17:00 2009
@@ -35,6 +35,75 @@
 #include "mod_sofia.h"
 #include <switch_stun.h>
 
+void sofia_glue_set_image_sdp(private_object_t *tech_pvt, switch_t38_options_t *t38_options)
+{
+	char buf[2048];
+	const char *ip = t38_options->ip;
+	uint32_t port = t38_options->port;
+	const char *family = "IP4";
+
+	if (!ip) {
+		if (!(ip = tech_pvt->adv_sdp_audio_ip)) {
+			ip = tech_pvt->proxy_sdp_audio_ip;
+		}
+	}
+
+	if (!port) {
+		if (!(port = tech_pvt->adv_sdp_audio_port)) {
+			port = tech_pvt->proxy_sdp_audio_port;
+		}
+	}
+
+	if (!tech_pvt->owner_id) {
+		tech_pvt->owner_id = (uint32_t) switch_timestamp(NULL) - port;
+	}
+
+	if (!tech_pvt->session_id) {
+		tech_pvt->session_id = tech_pvt->owner_id;
+	}
+
+	tech_pvt->session_id++;
+
+	family = strchr(ip, ':') ? "IP6" : "IP4";
+	switch_snprintf(buf, sizeof(buf),
+					"v=0\n"
+					"o=FreeSWITCH %010u %010u IN %s %s\n"
+					"s=FreeSWITCH\n"
+					"c=IN %s %s\n" 
+					"t=0 0\n"
+					"m=image %d udptl t38\n"
+					"a=T38MaxBitRate:%d\n"
+					"%s"
+					"%s"
+					"%s"
+					"a=T38FaxRateManagement:%s\n"
+					"a=T38FaxMaxBuffer:%d\n"
+					"a=T38FaxMaxDatagram:%d\n"
+					"a=T38FaxUdpEC:%s\n"
+					"a=T38VendorInfo:%s\n",
+					
+					tech_pvt->owner_id, 
+					tech_pvt->session_id,
+					family,
+					ip,
+					family,
+					ip,
+					port,
+					
+					t38_options->T38MaxBitRate,
+					t38_options->T38FaxFillBitRemoval ? "a=T38FaxFillBitRemoval\n" : "",
+					t38_options->T38FaxTranscodingMMR ? "a=T38FaxTranscodingMMR\n" : "",
+					t38_options->T38FaxTranscodingJBIG ? "a=T38FaxTranscodingJBIG\n" : "",
+					t38_options->T38FaxRateManagement,
+					t38_options->T38FaxMaxBuffer,
+					t38_options->T38FaxMaxDatagram,
+					t38_options->T38FaxUdpEC,
+					t38_options->T38VendorInfo
+					);
+	
+	
+	tech_pvt->local_sdp_str = switch_core_session_strdup(tech_pvt->session, buf);
+}
 
 void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32_t port, const char *sr, int force)
 {
@@ -1775,10 +1844,6 @@
 		flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_DATAWAIT);
 	}
 
-	if (switch_test_flag(tech_pvt, TFLAG_BUGGY_2833)) {
-		flags |= SWITCH_RTP_FLAG_BUGGY_2833;
-	}
-
 	if ((val = switch_channel_get_variable(tech_pvt->channel, "dtmf_type"))) {
 		if (!strcasecmp(val, "rfc2833")) {
 			tech_pvt->dtmf_type = DTMF_2833;
@@ -1923,7 +1988,9 @@
 		tech_pvt->ssrc = switch_rtp_get_ssrc(tech_pvt->rtp_session);
 		switch_set_flag(tech_pvt, TFLAG_RTP);
 		switch_set_flag(tech_pvt, TFLAG_IO);
-
+		
+		switch_rtp_intentional_bugs(tech_pvt->rtp_session, tech_pvt->rtp_bugs);
+		
 		if ((vad_in && inb) || (vad_out && !inb)) {
 			switch_rtp_enable_vad(tech_pvt->rtp_session, tech_pvt->session, &tech_pvt->read_codec, SWITCH_VAD_FLAG_TALKING);
 			switch_set_flag(tech_pvt, TFLAG_VAD);
@@ -2191,7 +2258,7 @@
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	const char *val;
 	const char *crypto = NULL;
-	int got_crypto = 0, got_audio = 0, got_avp = 0, got_savp = 0;
+	int got_crypto = 0, got_audio = 0, got_avp = 0, got_savp = 0, got_udptl = 0;
 
 	switch_assert(tech_pvt != NULL);
 
@@ -2205,12 +2272,12 @@
 
 	if ((tech_pvt->origin = switch_core_session_strdup(session, (char *) sdp->sdp_origin->o_username))) {
 		if (strstr(tech_pvt->origin, "CiscoSystemsSIP-GW-UserAgent")) {
-			switch_set_flag_locked(tech_pvt, TFLAG_BUGGY_2833);
+			tech_pvt->rtp_bugs |= RTP_BUG_CISCO_SKIP_MARK_BIT_2833;
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Activate Buggy RFC2833 Mode!\n");
 		}
 
 		if (strstr(tech_pvt->origin, "Sonus_UAC")) {
-			switch_set_flag_locked(tech_pvt, TFLAG_BUGGY_2833);
+			tech_pvt->rtp_bugs |= RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833;
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, 
 							  "Hello,\nI see you have a Sonus!\n"
 							  "FYI, Sonus cannot follow the RFC on the proper way to send DTMF.\n"
@@ -2252,9 +2319,42 @@
 			got_savp++;
 		} else if (m->m_proto == sdp_proto_rtp) {
 			got_avp++;
+		} else if (m->m_proto == sdp_proto_udptl) {
+			got_udptl++;
 		}
 
-		if (m->m_type == sdp_media_audio && m->m_port && !got_audio) {
+		if (got_udptl && m->m_type == sdp_media_image && m->m_port) {
+			switch_t38_options_t *t38_options = switch_core_session_alloc(tech_pvt->session, sizeof(switch_t38_options_t));
+			
+			for (attr = m->m_attributes; attr; attr = attr->a_next) {
+				if (!strcasecmp(attr->a_name, "T38MaxBitRate") && attr->a_value) { 
+					t38_options->T38MaxBitRate = (uint32_t) atoi(attr->a_value);
+				} else  if (!strcasecmp(attr->a_name, "T38FaxFillBitRemoval")) {
+					t38_options->T38FaxFillBitRemoval = SWITCH_TRUE;
+				} else  if (!strcasecmp(attr->a_name, "T38FaxTranscodingMMR")) {
+					t38_options->T38FaxTranscodingMMR = SWITCH_TRUE;
+				} else  if (!strcasecmp(attr->a_name, "T38FaxTranscodingJBIG")) {
+					t38_options->T38FaxTranscodingJBIG = SWITCH_TRUE;
+				} else  if (!strcasecmp(attr->a_name, "T38FaxRateManagement") && attr->a_value) {
+					t38_options->T38FaxRateManagement = switch_core_session_strdup(tech_pvt->session, attr->a_value);
+				} else  if (!strcasecmp(attr->a_name, "T38FaxMaxBuffer") && attr->a_value) {
+					t38_options->T38FaxMaxBuffer = (uint32_t) atoi(attr->a_value);
+				} else  if (!strcasecmp(attr->a_name, "T38FaxMaxDatagram") && attr->a_value) {
+					t38_options->T38FaxMaxDatagram = (uint32_t) atoi(attr->a_value);
+				} else  if (!strcasecmp(attr->a_name, "T38FaxUdpEC") && attr->a_value) {
+					t38_options->T38FaxUdpEC = switch_core_session_strdup(tech_pvt->session, attr->a_value);
+				} else  if (!strcasecmp(attr->a_name, "T38VendorInfo") && attr->a_value) {
+					t38_options->T38VendorInfo = switch_core_session_strdup(tech_pvt->session, attr->a_value);
+				}
+			}
+
+			switch_channel_set_variable(tech_pvt->channel, "has_t38", "true");
+			switch_channel_set_private(tech_pvt->channel, "t38_options", t38_options);
+
+			switch_channel_set_flag(tech_pvt->channel, CF_PROXY_MEDIA);
+			switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA);
+
+		} else if (m->m_type == sdp_media_audio && m->m_port && !got_audio) {
 			sdp_rtpmap_t *map;
 
 			for (attr = m->m_attributes; attr; attr = attr->a_next) {

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia_reg.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia_reg.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_sofia/sofia_reg.c	Wed Jan  7 10:17:00 2009
@@ -1064,6 +1064,8 @@
 
 	if (regtype == REG_REGISTER) {
 		char exp_param[128] = "";
+		char date[80] = "";
+
 		s_event = NULL;
 
 		if (exptime) {
@@ -1086,7 +1088,12 @@
 			}
 		}
 		
-		nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT(sip->sip_contact), TAG_IF(path_val, SIPTAG_PATH_STR(path_val)), NUTAG_WITH_THIS(nua), TAG_END());
+		switch_rfc822_date(date, switch_timestamp_now());
+		nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT(sip->sip_contact),
+					TAG_IF(path_val, SIPTAG_PATH_STR(path_val)),
+					NUTAG_WITH_THIS(nua),
+					SIPTAG_DATE_STR(date),
+					TAG_END());
 
 		if (s_event) {
 			switch_event_fire(&s_event);
@@ -1245,8 +1252,8 @@
 			break;
 		default:
 			sofia_private->gateway->state = REG_STATE_FAILED;
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s Registration Failed with status %d. failure #%d\n", 
-							  sofia_private->gateway->name, status, ++sofia_private->gateway->failures);
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s Registration Failed with status %s [%d]. failure #%d\n", 
+							  sofia_private->gateway->name, switch_str_nil(phrase), status, ++sofia_private->gateway->failures);
 			break;
 		}
 		if (ostate != sofia_private->gateway->state) {
@@ -1394,7 +1401,7 @@
 	const char *a1_hash = NULL;
 	char *sql;
 	char *mailbox = NULL;
-	switch_xml_t domain, xml = NULL, user, param, uparams, dparams;
+	switch_xml_t domain, xml = NULL, user, param, uparams, dparams, group = NULL, gparams = NULL;
 	char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = "";
 	char *domain_name = NULL;
 	switch_event_t *params = NULL;
@@ -1529,7 +1536,7 @@
 	}
 
 	if (switch_xml_locate_user("id", switch_strlen_zero(username) ? "nobody" : username, 
-							   domain_name, ip, &xml, &domain, &user, params) != SWITCH_STATUS_SUCCESS) {
+							   domain_name, ip, &xml, &domain, &user, &group, params) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Can't find user [%s@%s]\n"
 						  "You must define a domain called '%s' in your directory and add a user with the id=\"%s\" attribute\n"
 						  "and you must configure your device to use the proper domain in it's authentication credentials.\n"
@@ -1545,6 +1552,9 @@
 
 	dparams = switch_xml_child(domain, "params");
 	uparams = switch_xml_child(user, "params");
+	if (group) {
+		gparams = switch_xml_child(group, "params");
+	}
 
 	if (!(dparams || uparams)) {
 		ret = AUTH_OK;
@@ -1575,6 +1585,30 @@
 		}
 	}
 
+	if (gparams) {
+		for (param = switch_xml_child(gparams, "param"); param; param = param->next) {
+			const char *var = switch_xml_attr_soft(param, "name");
+			const char *val = switch_xml_attr_soft(param, "value");
+
+			if (!strcasecmp(var, "sip-forbid-register") && switch_true(val)) {
+				ret = AUTH_FORBIDDEN;
+				goto end;
+			}
+
+			if (!strcasecmp(var, "password")) {
+				passwd = val;
+			}
+
+			if (!strcasecmp(var, "auth-acl")) {
+				auth_acl = val;
+			}
+
+			if (!strcasecmp(var, "a1-hash")) {
+				a1_hash = val;
+			}
+		}
+	}
+
 	if (uparams) {
 		for (param = switch_xml_child(uparams, "param"); param; param = param->next) {
 			const char *var = switch_xml_attr_soft(param, "name");
@@ -1670,7 +1704,7 @@
 			switch_event_create(v_event, SWITCH_EVENT_REQUEST_PARAMS);
 		}
 		if (v_event && *v_event) {
-			switch_xml_t xparams[2];
+			switch_xml_t xparams[3];
 			int i = 0;
 
 			switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "sip_mailbox", mailbox);
@@ -1684,11 +1718,15 @@
 				xparams[i++] = dparams;
 			}
 
+			if (group && (gparams = switch_xml_child(group, "variables"))) {
+				xparams[i++] = gparams;
+			}
+
 			if ((uparams = switch_xml_child(user, "variables"))) {
 				xparams[i++] = uparams;
 			}
 
-			if (dparams || uparams) {
+			if (i <= 3) {
 				int j = 0;
 
 				for (j = 0; j < i; j++) {

Modified: freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c	Wed Jan  7 10:17:00 2009
@@ -142,25 +142,28 @@
 	switch_mutex_lock(globals.listener_mutex);
 	for (l = listen_list.listeners; l; l = l->next) {
 		if (switch_test_flag(l, LFLAG_LOG) && l->level >= node->level) {
-			char *data = strdup(node->data);
-			if (data) {
-				if (switch_queue_trypush(l->log_queue, data) == SWITCH_STATUS_SUCCESS) {
-					if (l->lost_logs) {
-						int ll = l->lost_logs;
-						switch_event_t *event;
-						l->lost_logs = 0;
-						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Lost %d log lines!\n", ll);
-						if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) {
-							switch_event_add_header(event, SWITCH_STACK_BOTTOM, "info", "lost %d log lines", ll);
-							switch_event_fire(&event);
-						}
+
+			switch_log_node_t *dnode = malloc(sizeof(*node));
+			switch_assert(dnode);
+			*dnode = *node;
+			dnode->data = strdup(node->data);
+			switch_assert(dnode->data);
+
+			if (switch_queue_trypush(l->log_queue, dnode) == SWITCH_STATUS_SUCCESS) {
+				if (l->lost_logs) {
+					int ll = l->lost_logs;
+					switch_event_t *event;
+					l->lost_logs = 0;
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Lost %d log lines!\n", ll);
+					if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) {
+						switch_event_add_header(event, SWITCH_STACK_BOTTOM, "info", "lost %d log lines", ll);
+						switch_event_fire(&event);
 					}
-				} else {
-					switch_safe_free(data);
-					l->lost_logs++;
 				}
 			} else {
-				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n");
+				switch_safe_free(dnode->data);
+				switch_safe_free(dnode);
+				l->lost_logs++;
 			}
 		}
 	}
@@ -268,6 +271,8 @@
 static void ei_encode_switch_event_headers(ei_x_buff *ebuf, switch_event_t *event)
 {
 	int i;
+	char *uuid = switch_event_get_header(event, "unique-id");
+
 	switch_event_header_t *hp;
 
 	for (i = 0, hp = event->headers; hp; hp = hp->next, i++);
@@ -275,7 +280,13 @@
 	if (event->body)
 		i++;
 
-	ei_x_encode_list_header(ebuf, i);
+	ei_x_encode_list_header(ebuf, i+1);
+
+	if (uuid) {
+		ei_x_encode_string(ebuf, switch_event_get_header(event, "unique-id"));
+	} else {
+		ei_x_encode_atom(ebuf, "undefined");
+	}
 
 	for (hp = event->headers; hp; hp = hp->next) {
 		ei_x_encode_tuple_header(ebuf, 2);
@@ -936,7 +947,7 @@
 			}
 
 			switch_core_session_t *session;
-			if ((session = switch_core_session_locate(uuid))) {
+			if (!switch_strlen_zero(uuid) && (session = switch_core_session_locate(uuid))) {
 			} else {
 				ei_x_encode_tuple_header(rbuf, 2);
 				ei_x_encode_atom(rbuf, "error");
@@ -980,6 +991,9 @@
 					ei_x_encode_atom(rbuf, "error");
 					ei_x_encode_atom(rbuf, "badmem");
 				}
+
+				/* release the lock returned by switch_core_locate_session */
+				switch_core_session_rwunlock(session);
 				break;
 
 sendmsg_fail:
@@ -1262,20 +1276,48 @@
 		/* send out any pending crap in the log queue */
 		if (switch_test_flag(listener, LFLAG_LOG)) {
 			if (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) {
-				char *data = (char *) pop;
+				switch_log_node_t *dnode = (switch_log_node_t *) pop;
 
-				if (data) {
+				if (dnode->data) {
 					ei_x_buff lbuf;
 					ei_x_new_with_version(&lbuf);
 					ei_x_encode_tuple_header(&lbuf, 2);
 					ei_x_encode_atom(&lbuf, "log");
-					ei_x_encode_string(&lbuf, data);
+					ei_x_encode_list_header(&lbuf, 6);
+
+					ei_x_encode_tuple_header(&lbuf, 2);
+					ei_x_encode_atom(&lbuf, "level");
+					ei_x_encode_char(&lbuf, (unsigned char)dnode->level);
+
+					ei_x_encode_tuple_header(&lbuf, 2);
+					ei_x_encode_atom(&lbuf, "text_channel");
+					ei_x_encode_char(&lbuf, (unsigned char)dnode->level);
+
+					ei_x_encode_tuple_header(&lbuf, 2);
+					ei_x_encode_atom(&lbuf, "file");
+					ei_x_encode_string(&lbuf, dnode->file);
+	
+					ei_x_encode_tuple_header(&lbuf, 2);
+					ei_x_encode_atom(&lbuf, "func");
+					ei_x_encode_string(&lbuf, dnode->func);
+
+					ei_x_encode_tuple_header(&lbuf, 2);
+					ei_x_encode_atom(&lbuf, "line");
+					ei_x_encode_ulong(&lbuf, (unsigned long)dnode->line);
+
+					ei_x_encode_tuple_header(&lbuf, 2);
+					ei_x_encode_atom(&lbuf, "data");
+					ei_x_encode_string(&lbuf, dnode->data);
+
+					ei_x_encode_empty_list(&lbuf);
 
 					switch_mutex_lock(listener->sock_mutex);
 					ei_send(listener->sockfd, &listener->log_pid, lbuf.buff, lbuf.index);
 					switch_mutex_unlock(listener->sock_mutex);
 
 					ei_x_free(&lbuf);
+					free(dnode->data);
+					free(dnode);
 				}
 			}
 		}

Modified: freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c	Wed Jan  7 10:17:00 2009
@@ -332,7 +332,7 @@
 			}
 
 			if (var && strlen(var) > 1) {
-				switch_event_add_body(local_event, var);
+				switch_event_add_body(local_event, "%s", var);
 			}
 
 			switch_event_fire(&local_event);

Modified: freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_event_socket/mod_event_socket.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_event_socket/mod_event_socket.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/event_handlers/mod_event_socket/mod_event_socket.c	Wed Jan  7 10:17:00 2009
@@ -473,6 +473,7 @@
 	}
 	switch_mutex_unlock(globals.listener_mutex);
 
+	switch_yield(1000000);
 
 
 	return SWITCH_STATUS_SUCCESS;
@@ -627,15 +628,67 @@
 
 		switch_mutex_unlock(listener->filter_mutex);
 
+	} else if (!strcasecmp(wcmd, "stop-logging")) {
+		char *id = switch_event_get_header(stream->param_event, "listen-id");
+		uint32_t idl = 0;
+
+		if (id) {
+			idl = (uint32_t) atol(id);
+		}
+
+		if (!(listener = find_listener(idl))) {
+			stream->write_function(stream, "<data><reply type=\"error\">Invalid Listen-ID</reply></data>\n");
+            goto end;
+		}
+
+		if (switch_test_flag(listener, LFLAG_LOG)) {
+			switch_clear_flag_locked(listener, LFLAG_LOG);
+			stream->write_function(stream, "<data><reply type=\"success\">Not Logging</reply></data>\n");
+		} else {
+			stream->write_function(stream, "<data><reply type=\"error\">Not Logging</reply></data>\n");
+		}
+
+		goto end;
+
+	} else if (!strcasecmp(wcmd, "set-loglevel")) {
+		char *loglevel = switch_event_get_header(stream->param_event, "loglevel");
+		char *id = switch_event_get_header(stream->param_event, "listen-id");
+		uint32_t idl = 0;
+
+		if (id) {
+			idl = (uint32_t) atol(id);
+		}
+
+		if (!(listener = find_listener(idl))) {
+			stream->write_function(stream, "<data><reply type=\"error\">Invalid Listen-ID</reply></data>\n");
+            goto end;
+		}
+
+		if (loglevel) {
+			switch_log_level_t ltype = switch_log_str2level(loglevel);
+			if (ltype != SWITCH_LOG_INVALID) {
+				listener->level = ltype;
+				switch_set_flag(listener, LFLAG_LOG);
+				stream->write_function(stream, "<data><reply type=\"success\">Log Level %s</reply></data>\n", loglevel);
+			} else {
+				stream->write_function(stream, "<data><reply type=\"error\">Invalid Level</reply></data>\n");
+			}
+		} else {
+			stream->write_function(stream, "<data><reply type=\"error\">Invalid Syntax</reply></data>\n");
+		}
+
+		goto end;
+
 	} else if (!strcasecmp(wcmd, "create-listener")) {
 		char *events = switch_event_get_header(stream->param_event, "events");
+		char *loglevel = switch_event_get_header(stream->param_event, "loglevel");
 		switch_memory_pool_t *pool;
 		char *next, *cur;
 		uint32_t count = 0, key_count = 0;
 		uint8_t custom = 0;
 		char *edup;
 		
-		if (switch_strlen_zero(events)) {
+		if (switch_strlen_zero(events) && switch_strlen_zero(loglevel)) {
 			stream->write_function(stream, "<data><reply type=\"error\">Missing parameter!</reply></data>\n");
 			goto end;
 		}
@@ -651,64 +704,81 @@
 		switch_set_flag(listener, LFLAG_AUTHED);
 		switch_set_flag(listener, LFLAG_STATEFUL);
 		switch_queue_create(&listener->event_queue, SWITCH_CORE_QUEUE_LEN, listener->pool);
+		switch_queue_create(&listener->log_queue, SWITCH_CORE_QUEUE_LEN, listener->pool);
+
+		if (loglevel) {
+			switch_log_level_t ltype = switch_log_str2level(loglevel);
+			if (ltype != SWITCH_LOG_INVALID) {
+				listener->level = ltype;
+				switch_set_flag(listener, LFLAG_LOG);
+			}
+		}
 		switch_thread_rwlock_create(&listener->rwlock, listener->pool);
 		listener->id = next_id();
 		listener->timeout = 60;
 		listener->last_flush = switch_timestamp(NULL);
 		
-		if (switch_stristr("xml", format)) {
-			listener->format = EVENT_FORMAT_XML;
-		} else {
-			listener->format = EVENT_FORMAT_PLAIN;
-		}
+		if (events) {
+			char delim = ',';
 
-		edup = strdup(events);
-		
-		for (cur = edup; cur; count++) {
-			switch_event_types_t type;
+			if (switch_stristr("xml", format)) {
+				listener->format = EVENT_FORMAT_XML;
+			} else {
+				listener->format = EVENT_FORMAT_PLAIN;
+			}
+			
+			edup = strdup(events);
 
-			if ((next = strchr(cur, ' '))) {
-				*next++ = '\0';
+			if (strchr(edup, ' ')) {
+				delim = ' ';
 			}
 
-			if (custom) {
-				switch_core_hash_insert(listener->event_hash, cur, MARKER);
-			} else if (switch_name_event(cur, &type) == SWITCH_STATUS_SUCCESS) {
-				key_count++;
-				if (type == SWITCH_EVENT_ALL) {
-					uint32_t x = 0;
-					for (x = 0; x < SWITCH_EVENT_ALL; x++) {
-						listener->event_list[x] = 1;
-					}
-				}
-				if (type <= SWITCH_EVENT_ALL) {
-					listener->event_list[type] = 1;
+			for (cur = edup; cur; count++) {
+				switch_event_types_t type;
+				
+				if ((next = strchr(cur, delim))) {
+					*next++ = '\0';
 				}
-				if (type == SWITCH_EVENT_CUSTOM) {
-					custom++;
+
+				if (custom) {
+					switch_core_hash_insert(listener->event_hash, cur, MARKER);
+				} else if (switch_name_event(cur, &type) == SWITCH_STATUS_SUCCESS) {
+					key_count++;
+					if (type == SWITCH_EVENT_ALL) {
+						uint32_t x = 0;
+						for (x = 0; x < SWITCH_EVENT_ALL; x++) {
+							listener->event_list[x] = 1;
+						}
+					}
+					if (type <= SWITCH_EVENT_ALL) {
+						listener->event_list[type] = 1;
+					}
+					if (type == SWITCH_EVENT_CUSTOM) {
+						custom++;
+					}
 				}
+				
+				cur = next;
 			}
-
-			cur = next;
-		}
 		
 
-		switch_safe_free(edup);
+			switch_safe_free(edup);
 
-		if (!key_count) {
-			switch_core_hash_destroy(&listener->event_hash);
-			switch_core_destroy_memory_pool(&listener->pool);
-			stream->write_function(stream, "<data><reply type=\"error\">No keywords supplied</reply></data>\n");
-			goto end;
+			if (!key_count) {
+				switch_core_hash_destroy(&listener->event_hash);
+				switch_core_destroy_memory_pool(&listener->pool);
+				stream->write_function(stream, "<data><reply type=\"error\">No keywords supplied</reply></data>\n");
+				goto end;
+			}
 		}
 
-
 		switch_set_flag_locked(listener, LFLAG_EVENTS);
 		add_listener(listener);
 		stream->write_function(stream, "<data>\n");
 		stream->write_function(stream, " <reply type=\"success\">Listener %u Created</reply>\n", listener->id);
 		xmlize_listener(listener, stream);
 		stream->write_function(stream, "</data>\n");
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Creating event-sink listener [%u]\n", listener->id);
 
 		goto end;
 	} else if (!strcasecmp(wcmd, "destroy-listener")) {		
@@ -720,6 +790,7 @@
 		}
 
 		if ((listener = find_listener(idl))) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Destroying event-sink listener [%u]\n", idl);
 			remove_listener(listener);
 			stream->write_function(stream, "<data>\n <reply type=\"success\">listener %u destroyed</reply>\n", listener->id);
 			xmlize_listener(listener, stream);
@@ -727,6 +798,7 @@
 			expire_listener(&listener);
 			goto end;
 		} else {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Request to destroy unknown event-sink listener [%u]\n", idl);
 			stream->write_function(stream, "<data><reply type=\"error\">Can't find listener</reply></data>\n");
 			goto end;
 		}
@@ -749,7 +821,38 @@
 		listener->last_flush = switch_timestamp(NULL);
 		stream->write_function(stream, "<data>\n <reply type=\"success\">Current Events Follow</reply>\n");			
 		xmlize_listener(listener, stream);
-		stream->write_function(stream, "<events>\n");			
+
+		if (switch_test_flag(listener, LFLAG_LOG)) {
+			stream->write_function(stream, "<log_data>\n");
+
+			while (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) {
+				switch_log_node_t *dnode = (switch_log_node_t *) pop;
+				int encode_len = (strlen(dnode->data) * 3) + 1;
+				char *encode_buf = malloc(encode_len);
+				
+				switch_assert(encode_buf);
+				
+				memset(encode_buf, 0, encode_len);
+				switch_url_encode((char *) dnode->data, encode_buf, encode_len);
+				
+
+				stream->write_function(stream, "<log log-level=\"%d\" text-channel=\"%d\" log-file=\"%s\" log-func=\"%s\" log-line=\"%d\">%s</log>\n",
+									   dnode->level,
+									   dnode->channel,
+									   dnode->file,
+									   dnode->func,
+									   dnode->line,
+									   encode_buf
+									   );
+				free(encode_buf);
+				free(dnode->data);
+				free(dnode);
+			}
+
+			stream->write_function(stream, "</log_data>\n");
+		}
+
+		stream->write_function(stream, "<events>\n");
 
 		while (switch_queue_trypop(listener->event_queue, &pop) == SWITCH_STATUS_SUCCESS) {
 			char *etype;
@@ -821,6 +924,9 @@
 
 	switch_mutex_init(&globals.listener_mutex, SWITCH_MUTEX_NESTED, pool);
 
+	memset(&listen_list, 0, sizeof(listen_list));
+	switch_mutex_init(&listen_list.sock_mutex, SWITCH_MUTEX_NESTED, pool);
+
 	if (switch_event_bind_removable(modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
 		return SWITCH_STATUS_GENERR;
@@ -1482,7 +1588,7 @@
 			ltype = switch_log_str2level(level_s);
 		}
 
-		if (ltype && ltype != SWITCH_LOG_INVALID) {
+		if (ltype != SWITCH_LOG_INVALID) {
 			listener->level = ltype;
 			switch_set_flag(listener, LFLAG_LOG);
 			switch_snprintf(reply, reply_len, "+OK log level %s [%d]", level_s, listener->level);
@@ -1824,7 +1930,7 @@
 	switch_mutex_unlock(listener->filter_mutex);
 	if (listener->sock) {
 		char disco_buf[512] = "";
-		const char message[] = "Disconnected, goodbye!\nSee you at ClueCon http://www.cluecon.com!\n";
+		const char message[] = "Disconnected, goodbye!\nSee you at ClueCon http://www.cluecon.com/ !!!\n";
 		int mlen = strlen(message);
 		
 		switch_snprintf(disco_buf, sizeof(disco_buf), "Content-Type: text/disconnect-notice\nContent-Length: %d\n\n", mlen);
@@ -1927,17 +2033,12 @@
 	listener_t *listener;
 	uint32_t x = 0;
 
-	memset(&listen_list, 0, sizeof(listen_list));
-	config();
-
 	if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "OH OH no pool\n");
 		return SWITCH_STATUS_TERM;
 	}
 
-
-	switch_mutex_init(&listen_list.sock_mutex, SWITCH_MUTEX_NESTED, pool);
-
+	config();
 
 	for (;;) {
 		rv = switch_sockaddr_info_get(&sa, prefs.ip, SWITCH_INET, prefs.port, 0, pool);

Modified: freeswitch/branches/gmaruzz/src/mod/formats/mod_shout/Makefile
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/formats/mod_shout/Makefile	(original)
+++ freeswitch/branches/gmaruzz/src/mod/formats/mod_shout/Makefile	Wed Jan  7 10:17:00 2009
@@ -30,7 +30,7 @@
 	$(GETLIB) $(MPG123).tar.gz
 
 $(MPG123_DIR)/Makefile: $(MPG123_DIR)
-	cd $(MPG123_DIR) && CFLAGS=$(AM_CFLAGS) ./configure --disable-shared --with-pic
+	cd $(MPG123_DIR) && CFLAGS=$(AM_CFLAGS) ./configure --disable-shared --with-pic CPPFLAGS= LDFLAGS=
 	$(TOUCH_TARGET)
 
 $(MPG123LA): $(MPG123_DIR)/Makefile
@@ -41,7 +41,7 @@
 	$(GETLIB) $(LAME).tar.gz
 
 $(LAME_DIR)/Makefile: $(LAME_DIR)
-	cd $(LAME_DIR) && ./configure $(DEFAULT_ARGS) --disable-decoder
+	cd $(LAME_DIR) && ./configure $(DEFAULT_ARGS) --disable-decoder CPPFLAGS= LDFLAGS=
 	$(TOUCH_TARGET)
 
 $(LAMELA): $(LAME_DIR)/Makefile
@@ -52,7 +52,7 @@
 	$(GETLIB) $(SHOUT).tar.gz
 
 $(SHOUT_DIR)/Makefile: $(SHOUT_DIR)
-	cd $(SHOUT_DIR) && ./configure $(DEFAULT_ARGS) --without-speex --without-vorbis --without-ogg
+	cd $(SHOUT_DIR) && ./configure $(DEFAULT_ARGS) --without-speex --without-vorbis --without-ogg CPPFLAGS= LDFLAGS=
 	$(TOUCH_TARGET)
 
 $(SHOUTLA): $(SHOUT_DIR)/Makefile

Modified: freeswitch/branches/gmaruzz/src/mod/languages/mod_managed/freeswitch_wrap.cxx
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/languages/mod_managed/freeswitch_wrap.cxx	(original)
+++ freeswitch/branches/gmaruzz/src/mod/languages/mod_managed/freeswitch_wrap.cxx	Wed Jan  7 10:17:00 2009
@@ -2290,7 +2290,7 @@
   int jresult ;
   int result;
   
-  result = (int) 32;
+  result = (int) 48;
   
   jresult = result; 
   return jresult;
@@ -2312,7 +2312,7 @@
   int jresult ;
   int result;
   
-  result = (int) (2*32*(120+10));
+  result = (int) 4096;
   
   jresult = result; 
   return jresult;
@@ -2600,6 +2600,302 @@
 }
 
 
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38MaxBitRate_set(void * jarg1, unsigned long jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  uint32_t arg2 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (uint32_t)jarg2; 
+  if (arg1) (arg1)->T38MaxBitRate = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38MaxBitRate_get(void * jarg1) {
+  unsigned long jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  uint32_t result;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (uint32_t) ((arg1)->T38MaxBitRate);
+  jresult = (unsigned long)result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxFillBitRemoval_set(void * jarg1, int jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  switch_bool_t arg2 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (switch_bool_t)jarg2; 
+  if (arg1) (arg1)->T38FaxFillBitRemoval = arg2;
+  
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxFillBitRemoval_get(void * jarg1) {
+  int jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  switch_bool_t result;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (switch_bool_t) ((arg1)->T38FaxFillBitRemoval);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingMMR_set(void * jarg1, int jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  switch_bool_t arg2 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (switch_bool_t)jarg2; 
+  if (arg1) (arg1)->T38FaxTranscodingMMR = arg2;
+  
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingMMR_get(void * jarg1) {
+  int jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  switch_bool_t result;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (switch_bool_t) ((arg1)->T38FaxTranscodingMMR);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_set(void * jarg1, int jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  switch_bool_t arg2 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (switch_bool_t)jarg2; 
+  if (arg1) (arg1)->T38FaxTranscodingJBIG = arg2;
+  
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_get(void * jarg1) {
+  int jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  switch_bool_t result;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (switch_bool_t) ((arg1)->T38FaxTranscodingJBIG);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxRateManagement_set(void * jarg1, char * jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  char *arg2 = (char *) 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (char *)jarg2; 
+  {
+    if (arg2) {
+      arg1->T38FaxRateManagement = (char const *) (new char[strlen((const char *)arg2)+1]);
+      strcpy((char *)arg1->T38FaxRateManagement, (const char *)arg2);
+    } else {
+      arg1->T38FaxRateManagement = 0;
+    }
+  }
+}
+
+
+SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxRateManagement_get(void * jarg1) {
+  char * jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  char *result = 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (char *) ((arg1)->T38FaxRateManagement);
+  jresult = SWIG_csharp_string_callback((const char *)result); 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxBuffer_set(void * jarg1, unsigned long jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  uint32_t arg2 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (uint32_t)jarg2; 
+  if (arg1) (arg1)->T38FaxMaxBuffer = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxBuffer_get(void * jarg1) {
+  unsigned long jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  uint32_t result;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (uint32_t) ((arg1)->T38FaxMaxBuffer);
+  jresult = (unsigned long)result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxDatagram_set(void * jarg1, unsigned long jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  uint32_t arg2 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (uint32_t)jarg2; 
+  if (arg1) (arg1)->T38FaxMaxDatagram = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxDatagram_get(void * jarg1) {
+  unsigned long jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  uint32_t result;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (uint32_t) ((arg1)->T38FaxMaxDatagram);
+  jresult = (unsigned long)result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxUdpEC_set(void * jarg1, char * jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  char *arg2 = (char *) 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (char *)jarg2; 
+  {
+    if (arg2) {
+      arg1->T38FaxUdpEC = (char const *) (new char[strlen((const char *)arg2)+1]);
+      strcpy((char *)arg1->T38FaxUdpEC, (const char *)arg2);
+    } else {
+      arg1->T38FaxUdpEC = 0;
+    }
+  }
+}
+
+
+SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxUdpEC_get(void * jarg1) {
+  char * jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  char *result = 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (char *) ((arg1)->T38FaxUdpEC);
+  jresult = SWIG_csharp_string_callback((const char *)result); 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38VendorInfo_set(void * jarg1, char * jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  char *arg2 = (char *) 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (char *)jarg2; 
+  {
+    if (arg2) {
+      arg1->T38VendorInfo = (char const *) (new char[strlen((const char *)arg2)+1]);
+      strcpy((char *)arg1->T38VendorInfo, (const char *)arg2);
+    } else {
+      arg1->T38VendorInfo = 0;
+    }
+  }
+}
+
+
+SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38VendorInfo_get(void * jarg1) {
+  char * jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  char *result = 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (char *) ((arg1)->T38VendorInfo);
+  jresult = SWIG_csharp_string_callback((const char *)result); 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_ip_set(void * jarg1, char * jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  char *arg2 = (char *) 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (char *)jarg2; 
+  {
+    if (arg2) {
+      arg1->ip = (char const *) (new char[strlen((const char *)arg2)+1]);
+      strcpy((char *)arg1->ip, (const char *)arg2);
+    } else {
+      arg1->ip = 0;
+    }
+  }
+}
+
+
+SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_ip_get(void * jarg1) {
+  char * jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  char *result = 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (char *) ((arg1)->ip);
+  jresult = SWIG_csharp_string_callback((const char *)result); 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_port_set(void * jarg1, unsigned long jarg2) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  uint32_t arg2 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  arg2 = (uint32_t)jarg2; 
+  if (arg1) (arg1)->port = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_port_get(void * jarg1) {
+  unsigned long jresult ;
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  uint32_t result;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  result = (uint32_t) ((arg1)->port);
+  jresult = (unsigned long)result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_t38_options_t() {
+  void * jresult ;
+  switch_t38_options_t *result = 0 ;
+  
+  result = (switch_t38_options_t *)new switch_t38_options_t();
+  jresult = (void *)result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_t38_options_t(void * jarg1) {
+  switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
+  
+  arg1 = (switch_t38_options_t *)jarg1; 
+  delete arg1;
+  
+}
+
+
 SWIGEXPORT void SWIGSTDCALL CSharp_switch_input_args_t_input_callback_set(void * jarg1, void * jarg2) {
   switch_input_args_t *arg1 = (switch_input_args_t *) 0 ;
   switch_input_callback_function_t arg2 = (switch_input_callback_function_t) 0 ;
@@ -6323,6 +6619,38 @@
 }
 
 
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_lock_codec_write(void * jarg1) {
+  switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+  
+  arg1 = (switch_core_session_t *)jarg1; 
+  switch_core_session_lock_codec_write(arg1);
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unlock_codec_write(void * jarg1) {
+  switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+  
+  arg1 = (switch_core_session_t *)jarg1; 
+  switch_core_session_unlock_codec_write(arg1);
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_lock_codec_read(void * jarg1) {
+  switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+  
+  arg1 = (switch_core_session_t *)jarg1; 
+  switch_core_session_lock_codec_read(arg1);
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unlock_codec_read(void * jarg1) {
+  switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+  
+  arg1 = (switch_core_session_t *)jarg1; 
+  switch_core_session_unlock_codec_read(arg1);
+}
+
+
 SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_read_impl(void * jarg1, void * jarg2) {
   int jresult ;
   switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
@@ -19729,7 +20057,7 @@
   {
     size_t ii;
     switch_byte_t *b = (switch_byte_t *) arg1->write_frame_data;
-    for (ii = 0; ii < (size_t)(2*32*(120+10)); ii++) b[ii] = *((switch_byte_t *) arg2 + ii);
+    for (ii = 0; ii < (size_t)4096; ii++) b[ii] = *((switch_byte_t *) arg2 + ii);
   }
 }
 
@@ -21417,13 +21745,15 @@
 }
 
 
-SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_unbind_dtmf_meta_session(void * jarg1) {
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_unbind_dtmf_meta_session(void * jarg1, unsigned long jarg2) {
   int jresult ;
   switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+  uint32_t arg2 ;
   switch_status_t result;
   
   arg1 = (switch_core_session_t *)jarg1; 
-  result = (switch_status_t)switch_ivr_unbind_dtmf_meta_session(arg1);
+  arg2 = (uint32_t)jarg2; 
+  result = (switch_status_t)switch_ivr_unbind_dtmf_meta_session(arg1,arg2);
   jresult = result; 
   return jresult;
 }
@@ -22378,6 +22708,16 @@
 }
 
 
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_intentional_bugs(void * jarg1, int jarg2) {
+  switch_rtp_t *arg1 = (switch_rtp_t *) 0 ;
+  switch_rtp_bug_flag_t arg2 ;
+  
+  arg1 = (switch_rtp_t *)jarg1; 
+  arg2 = (switch_rtp_bug_flag_t)jarg2; 
+  switch_rtp_intentional_bugs(arg1,arg2);
+}
+
+
 SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_data_set(void * jarg1, char * jarg2) {
   switch_log_node_t *arg1 = (switch_log_node_t *) 0 ;
   char *arg2 = (char *) 0 ;
@@ -22592,6 +22932,29 @@
 }
 
 
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_channel_set(void * jarg1, int jarg2) {
+  switch_log_node_t *arg1 = (switch_log_node_t *) 0 ;
+  switch_text_channel_t arg2 ;
+  
+  arg1 = (switch_log_node_t *)jarg1; 
+  arg2 = (switch_text_channel_t)jarg2; 
+  if (arg1) (arg1)->channel = arg2;
+  
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_node_t_channel_get(void * jarg1) {
+  int jresult ;
+  switch_log_node_t *arg1 = (switch_log_node_t *) 0 ;
+  switch_text_channel_t result;
+  
+  arg1 = (switch_log_node_t *)jarg1; 
+  result = (switch_text_channel_t) ((arg1)->channel);
+  jresult = result; 
+  return jresult;
+}
+
+
 SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_log_node_t() {
   void * jresult ;
   switch_log_node_t *result = 0 ;
@@ -23109,6 +23472,21 @@
 }
 
 
+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_find_child_multi(void * jarg1, char * jarg2) {
+  void * jresult ;
+  switch_xml_t arg1 = (switch_xml_t) 0 ;
+  char *arg2 = (char *) 0 ;
+  void *arg3 = 0 ;
+  switch_xml_t result;
+  
+  arg1 = (switch_xml_t)jarg1; 
+  arg2 = (char *)jarg2; 
+  result = (switch_xml_t)switch_xml_find_child_multi(arg1,(char const *)arg2,arg3);
+  jresult = (void *)result; 
+  return jresult;
+}
+
+
 SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_attr(void * jarg1, char * jarg2) {
   char * jresult ;
   switch_xml_t arg1 = (switch_xml_t) 0 ;
@@ -23428,7 +23806,29 @@
 }
 
 
-SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user(char * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5, void * jarg6, void * jarg7, void * jarg8) {
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_group(char * jarg1, char * jarg2, void * jarg3, void * jarg4, void * jarg5, void * jarg6) {
+  int jresult ;
+  char *arg1 = (char *) 0 ;
+  char *arg2 = (char *) 0 ;
+  switch_xml_t *arg3 = (switch_xml_t *) 0 ;
+  switch_xml_t *arg4 = (switch_xml_t *) 0 ;
+  switch_xml_t *arg5 = (switch_xml_t *) 0 ;
+  switch_event_t *arg6 = (switch_event_t *) 0 ;
+  switch_status_t result;
+  
+  arg1 = (char *)jarg1; 
+  arg2 = (char *)jarg2; 
+  arg3 = (switch_xml_t *)jarg3; 
+  arg4 = (switch_xml_t *)jarg4; 
+  arg5 = (switch_xml_t *)jarg5; 
+  arg6 = (switch_event_t *)jarg6; 
+  result = (switch_status_t)switch_xml_locate_group((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user(char * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5, void * jarg6, void * jarg7, void * jarg8, void * jarg9) {
   int jresult ;
   char *arg1 = (char *) 0 ;
   char *arg2 = (char *) 0 ;
@@ -23437,7 +23837,8 @@
   switch_xml_t *arg5 = (switch_xml_t *) 0 ;
   switch_xml_t *arg6 = (switch_xml_t *) 0 ;
   switch_xml_t *arg7 = (switch_xml_t *) 0 ;
-  switch_event_t *arg8 = (switch_event_t *) 0 ;
+  switch_xml_t *arg8 = (switch_xml_t *) 0 ;
+  switch_event_t *arg9 = (switch_event_t *) 0 ;
   switch_status_t result;
   
   arg1 = (char *)jarg1; 
@@ -23447,8 +23848,27 @@
   arg5 = (switch_xml_t *)jarg5; 
   arg6 = (switch_xml_t *)jarg6; 
   arg7 = (switch_xml_t *)jarg7; 
-  arg8 = (switch_event_t *)jarg8; 
-  result = (switch_status_t)switch_xml_locate_user((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8);
+  arg8 = (switch_xml_t *)jarg8; 
+  arg9 = (switch_event_t *)jarg9; 
+  result = (switch_status_t)switch_xml_locate_user((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user_in_domain(char * jarg1, void * jarg2, void * jarg3, void * jarg4) {
+  int jresult ;
+  char *arg1 = (char *) 0 ;
+  switch_xml_t arg2 = (switch_xml_t) 0 ;
+  switch_xml_t *arg3 = (switch_xml_t *) 0 ;
+  switch_xml_t *arg4 = (switch_xml_t *) 0 ;
+  switch_status_t result;
+  
+  arg1 = (char *)jarg1; 
+  arg2 = (switch_xml_t)jarg2; 
+  arg3 = (switch_xml_t *)jarg3; 
+  arg4 = (switch_xml_t *)jarg4; 
+  result = (switch_status_t)switch_xml_locate_user_in_domain((char const *)arg1,arg2,arg3,arg4);
   jresult = result; 
   return jresult;
 }

Modified: freeswitch/branches/gmaruzz/src/mod/languages/mod_managed/managed/swig.cs
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/languages/mod_managed/managed/swig.cs	(original)
+++ freeswitch/branches/gmaruzz/src/mod/languages/mod_managed/managed/swig.cs	Wed Jan  7 10:17:00 2009
@@ -1499,6 +1499,22 @@
     freeswitchPINVOKE.switch_core_session_unset_write_codec(SWIGTYPE_p_switch_core_session.getCPtr(session));
   }
 
+  public static void switch_core_session_lock_codec_write(SWIGTYPE_p_switch_core_session session) {
+    freeswitchPINVOKE.switch_core_session_lock_codec_write(SWIGTYPE_p_switch_core_session.getCPtr(session));
+  }
+
+  public static void switch_core_session_unlock_codec_write(SWIGTYPE_p_switch_core_session session) {
+    freeswitchPINVOKE.switch_core_session_unlock_codec_write(SWIGTYPE_p_switch_core_session.getCPtr(session));
+  }
+
+  public static void switch_core_session_lock_codec_read(SWIGTYPE_p_switch_core_session session) {
+    freeswitchPINVOKE.switch_core_session_lock_codec_read(SWIGTYPE_p_switch_core_session.getCPtr(session));
+  }
+
+  public static void switch_core_session_unlock_codec_read(SWIGTYPE_p_switch_core_session session) {
+    freeswitchPINVOKE.switch_core_session_unlock_codec_read(SWIGTYPE_p_switch_core_session.getCPtr(session));
+  }
+
   public static switch_status_t switch_core_session_get_read_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) {
     switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_get_read_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp));
     return ret;
@@ -3262,8 +3278,8 @@
     return ret;
   }
 
-  public static switch_status_t switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session session) {
-    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session.getCPtr(session));
+  public static switch_status_t switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session session, uint key) {
+    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session.getCPtr(session), key);
     return ret;
   }
 
@@ -3524,6 +3540,10 @@
     return ret;
   }
 
+  public static void switch_rtp_intentional_bugs(SWIGTYPE_p_switch_rtp rtp_session, switch_rtp_bug_flag_t bugs) {
+    freeswitchPINVOKE.switch_rtp_intentional_bugs(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), (int)bugs);
+  }
+
   public static switch_status_t switch_log_init(SWIGTYPE_p_apr_pool_t pool, switch_bool_t colorize) {
     switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_log_init(SWIGTYPE_p_apr_pool_t.getCPtr(pool), (int)colorize);
     return ret;
@@ -3602,6 +3622,12 @@
     return ret;
   }
 
+  public static switch_xml switch_xml_find_child_multi(switch_xml node, string childname) {
+    IntPtr cPtr = freeswitchPINVOKE.switch_xml_find_child_multi(switch_xml.getCPtr(node), childname);
+    switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false);
+    return ret;
+  }
+
   public static string switch_xml_attr(switch_xml xml, string attr) {
     string ret = freeswitchPINVOKE.switch_xml_attr(switch_xml.getCPtr(xml), attr);
     return ret;
@@ -3718,8 +3744,18 @@
     return ret;
   }
 
-  public static switch_status_t switch_xml_locate_user(string key, string user_name, string domain_name, string ip, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain, SWIGTYPE_p_p_switch_xml user, switch_event arg7) {
-    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user(key, user_name, domain_name, ip, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(user), switch_event.getCPtr(arg7));
+  public static switch_status_t switch_xml_locate_group(string group_name, string domain_name, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain, SWIGTYPE_p_p_switch_xml group, switch_event arg5) {
+    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_group(group_name, domain_name, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(group), switch_event.getCPtr(arg5));
+    return ret;
+  }
+
+  public static switch_status_t switch_xml_locate_user(string key, string user_name, string domain_name, string ip, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain, SWIGTYPE_p_p_switch_xml user, SWIGTYPE_p_p_switch_xml ingroup, switch_event arg8) {
+    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user(key, user_name, domain_name, ip, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(user), SWIGTYPE_p_p_switch_xml.getCPtr(ingroup), switch_event.getCPtr(arg8));
+    return ret;
+  }
+
+  public static switch_status_t switch_xml_locate_user_in_domain(string user_name, switch_xml domain, SWIGTYPE_p_p_switch_xml user, SWIGTYPE_p_p_switch_xml ingroup) {
+    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user_in_domain(user_name, switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(user), SWIGTYPE_p_p_switch_xml.getCPtr(ingroup));
     return ret;
   }
 
@@ -4927,6 +4963,78 @@
   [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtp_hdr_t")]
   public static extern void delete_switch_rtp_hdr_t(HandleRef jarg1);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38MaxBitRate_set")]
+  public static extern void switch_t38_options_t_T38MaxBitRate_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38MaxBitRate_get")]
+  public static extern uint switch_t38_options_t_T38MaxBitRate_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxFillBitRemoval_set")]
+  public static extern void switch_t38_options_t_T38FaxFillBitRemoval_set(HandleRef jarg1, int jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxFillBitRemoval_get")]
+  public static extern int switch_t38_options_t_T38FaxFillBitRemoval_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingMMR_set")]
+  public static extern void switch_t38_options_t_T38FaxTranscodingMMR_set(HandleRef jarg1, int jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingMMR_get")]
+  public static extern int switch_t38_options_t_T38FaxTranscodingMMR_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_set")]
+  public static extern void switch_t38_options_t_T38FaxTranscodingJBIG_set(HandleRef jarg1, int jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_get")]
+  public static extern int switch_t38_options_t_T38FaxTranscodingJBIG_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxRateManagement_set")]
+  public static extern void switch_t38_options_t_T38FaxRateManagement_set(HandleRef jarg1, string jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxRateManagement_get")]
+  public static extern string switch_t38_options_t_T38FaxRateManagement_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxBuffer_set")]
+  public static extern void switch_t38_options_t_T38FaxMaxBuffer_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxBuffer_get")]
+  public static extern uint switch_t38_options_t_T38FaxMaxBuffer_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxDatagram_set")]
+  public static extern void switch_t38_options_t_T38FaxMaxDatagram_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxDatagram_get")]
+  public static extern uint switch_t38_options_t_T38FaxMaxDatagram_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxUdpEC_set")]
+  public static extern void switch_t38_options_t_T38FaxUdpEC_set(HandleRef jarg1, string jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxUdpEC_get")]
+  public static extern string switch_t38_options_t_T38FaxUdpEC_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38VendorInfo_set")]
+  public static extern void switch_t38_options_t_T38VendorInfo_set(HandleRef jarg1, string jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38VendorInfo_get")]
+  public static extern string switch_t38_options_t_T38VendorInfo_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_ip_set")]
+  public static extern void switch_t38_options_t_ip_set(HandleRef jarg1, string jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_ip_get")]
+  public static extern string switch_t38_options_t_ip_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_port_set")]
+  public static extern void switch_t38_options_t_port_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_port_get")]
+  public static extern uint switch_t38_options_t_port_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_new_switch_t38_options_t")]
+  public static extern IntPtr new_switch_t38_options_t();
+
+  [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_t38_options_t")]
+  public static extern void delete_switch_t38_options_t(HandleRef jarg1);
+
   [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_input_callback_set")]
   public static extern void switch_input_args_t_input_callback_set(HandleRef jarg1, HandleRef jarg2);
 
@@ -5782,6 +5890,18 @@
   [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unset_write_codec")]
   public static extern void switch_core_session_unset_write_codec(HandleRef jarg1);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_lock_codec_write")]
+  public static extern void switch_core_session_lock_codec_write(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unlock_codec_write")]
+  public static extern void switch_core_session_unlock_codec_write(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_lock_codec_read")]
+  public static extern void switch_core_session_lock_codec_read(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unlock_codec_read")]
+  public static extern void switch_core_session_unlock_codec_read(HandleRef jarg1);
+
   [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_read_impl")]
   public static extern int switch_core_session_get_read_impl(HandleRef jarg1, HandleRef jarg2);
 
@@ -9320,7 +9440,7 @@
   public static extern int switch_ivr_bind_dtmf_meta_session(HandleRef jarg1, uint jarg2, uint jarg3, string jarg4);
 
   [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_unbind_dtmf_meta_session")]
-  public static extern int switch_ivr_unbind_dtmf_meta_session(HandleRef jarg1);
+  public static extern int switch_ivr_unbind_dtmf_meta_session(HandleRef jarg1, uint jarg2);
 
   [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_soft_hold")]
   public static extern int switch_ivr_soft_hold(HandleRef jarg1, string jarg2, string jarg3, string jarg4);
@@ -9535,6 +9655,9 @@
   [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_stun_ping")]
   public static extern int switch_rtp_activate_stun_ping(HandleRef jarg1, string jarg2, ushort jarg3, uint jarg4, int jarg5);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_intentional_bugs")]
+  public static extern void switch_rtp_intentional_bugs(HandleRef jarg1, int jarg2);
+
   [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_data_set")]
   public static extern void switch_log_node_t_data_set(HandleRef jarg1, string jarg2);
 
@@ -9583,6 +9706,12 @@
   [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_userdata_get")]
   public static extern string switch_log_node_t_userdata_get(HandleRef jarg1);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_channel_set")]
+  public static extern void switch_log_node_t_channel_set(HandleRef jarg1, int jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_channel_get")]
+  public static extern int switch_log_node_t_channel_get(HandleRef jarg1);
+
   [DllImport("mod_managed", EntryPoint="CSharp_new_switch_log_node_t")]
   public static extern IntPtr new_switch_log_node_t();
 
@@ -9706,6 +9835,9 @@
   [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_find_child")]
   public static extern IntPtr switch_xml_find_child(HandleRef jarg1, string jarg2, string jarg3, string jarg4);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_find_child_multi")]
+  public static extern IntPtr switch_xml_find_child_multi(HandleRef jarg1, string jarg2);
+
   [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_attr")]
   public static extern string switch_xml_attr(HandleRef jarg1, string jarg2);
 
@@ -9769,8 +9901,14 @@
   [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_domain")]
   public static extern int switch_xml_locate_domain(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_group")]
+  public static extern int switch_xml_locate_group(string jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5, HandleRef jarg6);
+
   [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_user")]
-  public static extern int switch_xml_locate_user(string jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, HandleRef jarg6, HandleRef jarg7, HandleRef jarg8);
+  public static extern int switch_xml_locate_user(string jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, HandleRef jarg6, HandleRef jarg7, HandleRef jarg8, HandleRef jarg9);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_user_in_domain")]
+  public static extern int switch_xml_locate_user_in_domain(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4);
 
   [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_open_cfg")]
   public static extern IntPtr switch_xml_open_cfg(string jarg1, HandleRef jarg2, HandleRef jarg3);
@@ -16062,7 +16200,8 @@
   SBF_DIAL_BLEG = (1 << 2),
   SBF_EXEC_BLEG = (1 << 3),
   SBF_EXEC_OPPOSITE = (1 << 4),
-  SBF_EXEC_SAME = (1 << 5)
+  SBF_EXEC_SAME = (1 << 5),
+  SBF_ONCE = (1 << 6)
 }
 
 }
@@ -18462,6 +18601,7 @@
   SWITCH_MESSAGE_INDICATE_DISPLAY,
   SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY,
   SWITCH_MESSAGE_INDICATE_AUDIO_SYNC,
+  SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA,
   SWITCH_MESSAGE_INVALID
 }
 
@@ -22265,6 +22405,16 @@
     } 
   }
 
+  public switch_text_channel_t channel {
+    set {
+      freeswitchPINVOKE.switch_log_node_t_channel_set(swigCPtr, (int)value);
+    } 
+    get {
+      switch_text_channel_t ret = (switch_text_channel_t)freeswitchPINVOKE.switch_log_node_t_channel_get(swigCPtr);
+      return ret;
+    } 
+  }
+
   public switch_log_node_t() : this(freeswitchPINVOKE.new_switch_log_node_t(), true) {
   }
 
@@ -22561,6 +22711,23 @@
 
 namespace FreeSWITCH.Native {
 
+public enum switch_rtp_bug_flag_t {
+  RTP_BUG_NONE = 0,
+  RTP_BUG_CISCO_SKIP_MARK_BIT_2833 = (1 << 0),
+  RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833 = (1 << 1)
+}
+
+}
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+namespace FreeSWITCH.Native {
+
 public enum switch_rtp_crypto_direction_t {
   SWITCH_RTP_CRYPTO_SEND,
   SWITCH_RTP_CRYPTO_RECV,
@@ -23986,6 +24153,163 @@
 
 namespace FreeSWITCH.Native {
 
+using System;
+using System.Runtime.InteropServices;
+
+public class switch_t38_options_t : IDisposable {
+  private HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal switch_t38_options_t(IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new HandleRef(this, cPtr);
+  }
+
+  internal static HandleRef getCPtr(switch_t38_options_t obj) {
+    return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  ~switch_t38_options_t() {
+    Dispose();
+  }
+
+  public virtual void Dispose() {
+    lock(this) {
+      if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwn) {
+        swigCMemOwn = false;
+        freeswitchPINVOKE.delete_switch_t38_options_t(swigCPtr);
+      }
+      swigCPtr = new HandleRef(null, IntPtr.Zero);
+      GC.SuppressFinalize(this);
+    }
+  }
+
+  public uint T38MaxBitRate {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38MaxBitRate_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_t38_options_t_T38MaxBitRate_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public switch_bool_t T38FaxFillBitRemoval {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38FaxFillBitRemoval_set(swigCPtr, (int)value);
+    } 
+    get {
+      switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxFillBitRemoval_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public switch_bool_t T38FaxTranscodingMMR {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingMMR_set(swigCPtr, (int)value);
+    } 
+    get {
+      switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingMMR_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public switch_bool_t T38FaxTranscodingJBIG {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingJBIG_set(swigCPtr, (int)value);
+    } 
+    get {
+      switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingJBIG_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public string T38FaxRateManagement {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38FaxRateManagement_set(swigCPtr, value);
+    } 
+    get {
+      string ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxRateManagement_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint T38FaxMaxBuffer {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxBuffer_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxBuffer_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint T38FaxMaxDatagram {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxDatagram_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxDatagram_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public string T38FaxUdpEC {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38FaxUdpEC_set(swigCPtr, value);
+    } 
+    get {
+      string ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxUdpEC_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public string T38VendorInfo {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_T38VendorInfo_set(swigCPtr, value);
+    } 
+    get {
+      string ret = freeswitchPINVOKE.switch_t38_options_t_T38VendorInfo_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public string ip {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_ip_set(swigCPtr, value);
+    } 
+    get {
+      string ret = freeswitchPINVOKE.switch_t38_options_t_ip_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint port {
+    set {
+      freeswitchPINVOKE.switch_t38_options_t_port_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_t38_options_t_port_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public switch_t38_options_t() : this(freeswitchPINVOKE.new_switch_t38_options_t(), true) {
+  }
+
+}
+
+}
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+namespace FreeSWITCH.Native {
+
 public enum switch_text_channel_t {
   SWITCH_CHANNEL_ID_LOG,
   SWITCH_CHANNEL_ID_LOG_CLEAN,

Modified: freeswitch/branches/gmaruzz/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c	Wed Jan  7 10:17:00 2009
@@ -42,7 +42,7 @@
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_spidermonkey_load);
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_spidermonkey_shutdown);
-SWITCH_MODULE_DEFINITION(mod_spidermonkey, mod_spidermonkey_load, mod_spidermonkey_shutdown, NULL);
+SWITCH_MODULE_DEFINITION_EX(mod_spidermonkey, mod_spidermonkey_load, mod_spidermonkey_shutdown, NULL, SMODF_GLOBAL_SYMBOLS);
 
 #define METHOD_SANITY_CHECK()  if (!jss || !jss->session) {				\
 		eval_some_js("~throw new Error(\"You must call the session.originate method before calling this method!\");", cx, obj, rval); \
@@ -882,50 +882,54 @@
 static switch_status_t sm_load_file(char *filename)
 {
 	sm_loadable_module_t *module = NULL;
-	switch_dso_handle_t *dso = NULL;
+	switch_dso_lib_t dso = NULL;
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
-	switch_dso_handle_sym_t function_handle = NULL;
+	switch_loadable_module_function_table_t *function_handle = NULL;
 	spidermonkey_init_t spidermonkey_init = NULL;
 	const sm_module_interface_t *module_interface = NULL, *mp;
-
-	int loading = 1;
+	char *derr = NULL;
 	const char *err = NULL;
-	char derr[512] = "";
 
 	switch_assert(filename != NULL);
 
-	status = switch_dso_load(&dso, filename, module_manager.pool);
+	if (!(dso = switch_dso_open(filename, 1, &derr))) {
+		status = SWITCH_STATUS_FALSE;
+	}
 
-	while (loading) {
-		if (status != SWITCH_STATUS_SUCCESS) {
-			switch_dso_error(dso, derr, sizeof(derr));
-			err = derr;
-			break;
-		}
+	if (derr || status != SWITCH_STATUS_SUCCESS) {
+		err = derr;
+		goto err;
+	}
 
-		status = switch_dso_sym(&function_handle, dso, "spidermonkey_init");
-		spidermonkey_init = (spidermonkey_init_t) (intptr_t) function_handle;
+	function_handle = switch_dso_data_sym(dso, "spidermonkey_init", &derr);
 
-		if (spidermonkey_init == NULL) {
-			err = "Cannot Load";
-			break;
-		}
+	if (!function_handle || derr) {
+		status = SWITCH_STATUS_FALSE;
+		err = derr;
+		goto err;
+	}
 
-		if (spidermonkey_init(&module_interface) != SWITCH_STATUS_SUCCESS) {
-			err = "Module load routine returned an error";
-			break;
-		}
+	spidermonkey_init = (spidermonkey_init_t) (intptr_t) function_handle;
 
-		if (!(module = (sm_loadable_module_t *) switch_core_permanent_alloc(sizeof(*module)))) {
-			err = "Could not allocate memory\n";
-			break;
-		}
+	if (spidermonkey_init == NULL) {
+		err = "Cannot Load";
+		goto err;
+	}
+
+	if (spidermonkey_init(&module_interface) != SWITCH_STATUS_SUCCESS) {
+		err = "Module load routine returned an error";
+		goto err;
+	}
 
-		loading = 0;
+	if (!(module = (sm_loadable_module_t *) switch_core_permanent_alloc(sizeof(*module)))) {
+		err = "Could not allocate memory\n";
 	}
 
-	if (err) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Loading module %s\n**%s**\n", filename, err);
+ err:
+
+	if (err || !module) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Loading module %s\n**%s**\n", filename, switch_str_nil(err));
+		switch_safe_free(derr);
 		return SWITCH_STATUS_GENERR;
 	}
 

Modified: freeswitch/branches/gmaruzz/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c	Wed Jan  7 10:17:00 2009
@@ -95,10 +95,12 @@
 	if (!globals.port) {
 		globals.port = 8080;
 	}
-	if (user && pass && realm) {
+	if (realm) {
 		set_global_realm(realm);
-		set_global_user(user);
-		set_global_pass(pass);
+		if (user && pass) {
+			set_global_user(user);
+			set_global_pass(pass);
+		}
 	}
 	switch_xml_free(xml);
 
@@ -176,6 +178,7 @@
 				if ((dp = strchr(user, '@'))) {
 					*dp++ = '\0';
 					domain_name = dp;
+					at++;
 				}
 				
 				if (!domain_name) {
@@ -194,19 +197,21 @@
 					goto fail;
 				}
 
-				switch_snprintf(z, sizeof(z), "%s:%s", globals.user, globals.pass);
-				Base64Encode(z, t);
+				if (!switch_strlen_zero(globals.user)) {
+					switch_snprintf(z, sizeof(z), "%s:%s", globals.user, globals.pass);
+					Base64Encode(z, t);
 
-				if (!strcmp(p, t)) {
-					r->requestInfo.user = strdup(user);
-					goto authed;
+					if (!strcmp(p, t)) {
+						r->requestInfo.user = strdup(user);
+						goto authed;
+					}
 				}
 
 				switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
 				switch_assert(params);
 				switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "mailbox", "check");
 
-				if (switch_xml_locate_user("id", user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, params) != SWITCH_STATUS_SUCCESS) {
+				if (switch_xml_locate_user("id", user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, NULL, params) != SWITCH_STATUS_SUCCESS) {
 					switch_event_destroy(&params);
 					goto fail;
 				}
@@ -496,7 +501,7 @@
 		}
 	}
 
-	if (!fs_user || !strcmp(fs_user, globals.user)) {
+	if (!fs_user || (!switch_strlen_zero(globals.user) && !strcmp(fs_user, globals.user))) {
 		auth = 1;
 	} else {
 		if (!j) {

Modified: freeswitch/branches/gmaruzz/src/switch_apr.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_apr.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_apr.c	Wed Jan  7 10:17:00 2009
@@ -761,9 +761,9 @@
 
 SWITCH_DECLARE(switch_status_t) switch_socket_recvfrom(switch_sockaddr_t *from, switch_socket_t *sock, int32_t flags, char *buf, size_t *len)
 {
-	apr_status_t r;
+	apr_status_t r = SWITCH_STATUS_GENERR;
 
-	if ((r = apr_socket_recvfrom(from, sock, flags, buf, len)) == APR_SUCCESS) {
+	if (from && sock && (r = apr_socket_recvfrom(from, sock, flags, buf, len)) == APR_SUCCESS) {
 		from->port = ntohs(from->sa.sin.sin_port);
 		/* from->ipaddr_ptr = &(from->sa.sin.sin_addr);
 		 * from->ipaddr_ptr = inet_ntoa(from->sa.sin.sin_addr);

Modified: freeswitch/branches/gmaruzz/src/switch_channel.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_channel.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_channel.c	Wed Jan  7 10:17:00 2009
@@ -1140,13 +1140,12 @@
 	return channel->state;
 }
 
-SWITCH_DECLARE(void) switch_channel_event_set_data(switch_channel_t *channel, switch_event_t *event)
+SWITCH_DECLARE(void) switch_channel_event_set_basic_data(switch_channel_t *channel, switch_event_t *event)
 {
 	switch_caller_profile_t *caller_profile, *originator_caller_profile = NULL, *originatee_caller_profile = NULL;
-	switch_event_header_t *hi;
 	switch_codec_t *codec;
 	char state_num[25];
-	int x;
+
 	switch_mutex_lock(channel->profile_mutex);
 
 	if ((caller_profile = switch_channel_get_caller_profile(channel))) {
@@ -1178,7 +1177,7 @@
 		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Name", switch_str_nil(codec->implementation->iananame));
 		switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Rate", "%u", codec->implementation->actual_samples_per_second);
 	}
-	
+
 	/* Index Caller's Profile */
 	if (caller_profile) {
 		switch_caller_profile_event_set_data(caller_profile, "Caller", event);
@@ -1199,7 +1198,16 @@
 		}
 	}
 
+	switch_mutex_unlock(channel->profile_mutex);
+}
+
+SWITCH_DECLARE(void) switch_channel_event_set_extended_data(switch_channel_t *channel, switch_event_t *event)
+{
+	switch_event_header_t *hi;
+	int x;
 
+	switch_mutex_lock(channel->profile_mutex);
+	
 	if (switch_channel_test_flag(channel, CF_VERBOSE_EVENTS) || 
 		event->event_id == SWITCH_EVENT_CHANNEL_ORIGINATE ||
 		event->event_id == SWITCH_EVENT_CHANNEL_UUID ||
@@ -1235,6 +1243,17 @@
 	switch_mutex_unlock(channel->profile_mutex);
 }
 
+
+SWITCH_DECLARE(void) switch_channel_event_set_data(switch_channel_t *channel, switch_event_t *event)
+{
+	switch_mutex_lock(channel->profile_mutex);
+	switch_channel_event_set_basic_data(channel, event);
+	switch_channel_event_set_extended_data(channel, event);
+	switch_mutex_unlock(channel->profile_mutex);
+}
+
+
+
 SWITCH_DECLARE(void) switch_channel_set_caller_profile(switch_channel_t *channel, switch_caller_profile_t *caller_profile)
 {
 	char *uuid = NULL;
@@ -1628,8 +1647,8 @@
 
 	msg.message_id = SWITCH_MESSAGE_INDICATE_PROGRESS;
 	msg.from = channel->name;
-	status = switch_core_session_receive_message(channel->session, &msg);
-
+	status = switch_core_session_perform_receive_message(channel->session, &msg, file, func, line);
+	
 	if (status == SWITCH_STATUS_SUCCESS) {
 		switch_channel_perform_mark_pre_answered(channel, file, func, line);
 	} else {
@@ -1660,7 +1679,7 @@
 
 	msg.message_id = SWITCH_MESSAGE_INDICATE_RINGING;
 	msg.from = channel->name;
-	status = switch_core_session_receive_message(channel->session, &msg);
+	status = switch_core_session_perform_receive_message(channel->session, &msg, file, func, line);
 
 	if (status == SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_NOTICE, "Ring Ready %s!\n", channel->name);
@@ -1765,7 +1784,7 @@
 
 	msg.message_id = SWITCH_MESSAGE_INDICATE_ANSWER;
 	msg.from = channel->name;
-	status = switch_core_session_receive_message(channel->session, &msg);
+	status = switch_core_session_perform_receive_message(channel->session, &msg, file, func, line);
 
 	if (status == SWITCH_STATUS_SUCCESS) {
 		switch_channel_perform_mark_answered(channel, file, func, line);

Modified: freeswitch/branches/gmaruzz/src/switch_console.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_console.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_console.c	Wed Jan  7 10:17:00 2009
@@ -249,10 +249,18 @@
 
 	SWITCH_STANDARD_STREAM(stream);
 	if (stream.data) {
+		FILE *handle = switch_core_get_console();
+
 		if (switch_api_execute(cmd, arg, NULL, &stream) == SWITCH_STATUS_SUCCESS) {
-			switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CONSOLE, "API CALL [%s(%s)] output:\n%s\n", cmd, arg ? arg : "", (char *) stream.data);
+			if (handle) {
+				fprintf(handle, "API CALL [%s(%s)] output:\n%s\n", cmd, arg ? arg : "", (char *) stream.data);
+				fflush(handle);
+			}
 		} else {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Unknown Command: %s\n", cmd);
+			if (handle) {
+				fprintf(handle, "Unknown Command: %s\n", cmd);
+				fflush(handle);
+			}
 		}
 		free(stream.data);
 	} else {

Modified: freeswitch/branches/gmaruzz/src/switch_core.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_core.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_core.c	Wed Jan  7 10:17:00 2009
@@ -168,7 +168,7 @@
 
 SWITCH_DECLARE(void) switch_core_remove_state_handler(const switch_state_handler_table_t *state_handler)
 {
-	int index, total = 0;
+	int index, tmp_index = 0;
 	const switch_state_handler_table_t *tmp[SWITCH_MAX_STATE_HANDLERS+1] = { 0 };
 	
 	switch_mutex_lock(runtime.global_mutex);
@@ -179,13 +179,12 @@
 		if (cur == state_handler) {
 			continue;
 		}
-		tmp[index] = runtime.state_handlers[index];
-		total++;
+		tmp[tmp_index++] = cur;
 	}
 
 	runtime.state_handler_index = 0;
 
-	for (index = 0; index < total; index++) {
+	for (index = 0; index < tmp_index; index++) {
 		runtime.state_handlers[runtime.state_handler_index++] = tmp[index];
 	}
 	switch_mutex_unlock(runtime.global_mutex);
@@ -881,7 +880,7 @@
 					if (domain) {
 						switch_event_t *my_params = NULL;
 						switch_xml_t x_domain, xml_root;
-						switch_xml_t ut;
+						switch_xml_t gt, gts, ut, uts;
 
 						switch_event_create(&my_params, SWITCH_EVENT_GENERAL);
 						switch_assert(my_params);
@@ -914,6 +913,32 @@
 								free(token);
 							}
 						}
+
+						for (gts = switch_xml_child(x_domain, "groups"); gts; gts = gts->next) {
+							for (gt = switch_xml_child(gts, "group"); gt; gt = gt->next) {
+								for (uts = switch_xml_child(gt, "users"); uts; uts = uts->next) {
+									for (ut = switch_xml_child(uts, "user"); ut; ut = ut->next) {
+										const char *user_cidr = switch_xml_attr(ut, "cidr");
+										const char *id = switch_xml_attr(ut, "id");
+										
+										if (id && user_cidr) {
+											char *token = switch_mprintf("%s@%s", id, domain);
+											switch_assert(token);
+											
+											if (switch_network_list_add_cidr_token(list, user_cidr, ok, token) == SWITCH_STATUS_SUCCESS) {
+												switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding %s (%s) [%s] to list %s\n", 
+																  user_cidr, ok ? "allow" : "deny", switch_str_nil(token), name);
+											} else {
+												switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Adding %s (%s) [%s] to list %s\n",
+																  user_cidr, ok ? "allow" : "deny", switch_str_nil(token), name);
+											}
+											free(token);
+										}
+									}
+								}
+							}
+						}
+
 						switch_xml_free(xml_root);
 					} else if (cidr) {
 						if (switch_network_list_add_cidr(list, cidr, ok) == SWITCH_STATUS_SUCCESS) {

Modified: freeswitch/branches/gmaruzz/src/switch_core_io.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_core_io.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_core_io.c	Wed Jan  7 10:17:00 2009
@@ -539,10 +539,6 @@
 	switch_mutex_unlock(session->read_codec->mutex);
 	switch_mutex_unlock(session->codec_read_mutex);
 
-	if (switch_core_session_private_event_count(session)) {
-		switch_ivr_parse_all_events(session);
-	}
-
 	return status;
 }
 
@@ -571,7 +567,7 @@
 
 	switch_status_t status = SWITCH_STATUS_FALSE;
 	switch_frame_t *enc_frame = NULL, *write_frame = frame;
-	unsigned int flag = 0, need_codec = 0, perfect = 0, do_bugs = 0, do_write = 0, do_resample = 0, ptime_mismatch = 0, pass_cng = 0;
+	unsigned int flag = 0, need_codec = 0, perfect = 0, do_bugs = 0, do_write = 0, do_resample = 0, ptime_mismatch = 0, pass_cng = 0, resample = 0;
 	
 	switch_assert(session != NULL);
 	switch_assert(frame != NULL);
@@ -645,6 +641,7 @@
 
 	if (!need_codec) {
 		do_write = TRUE;
+		write_frame = frame;
 		goto done;
 	}
 
@@ -674,6 +671,7 @@
 
 		switch (status) {
 		case SWITCH_STATUS_RESAMPLE:
+			resample++;
 			write_frame = &session->raw_write_frame;
 			if (!session->write_resampler) {
 				switch_mutex_lock(session->resample_mutex);
@@ -842,6 +840,7 @@
 
 			switch (status) {
 			case SWITCH_STATUS_RESAMPLE:
+				resample++;
 				/* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Fixme 2\n"); */
 			case SWITCH_STATUS_SUCCESS:
 				session->enc_write_frame.codec = session->write_codec;
@@ -916,6 +915,7 @@
 														  &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag);
 						switch (status) {
 						case SWITCH_STATUS_RESAMPLE:
+							resample++;
 							session->enc_write_frame.codec = session->write_codec;
 							session->enc_write_frame.samples = enc_frame->datalen / sizeof(int16_t);
 							session->enc_write_frame.m = frame->m;
@@ -987,9 +987,14 @@
 							switch_mutex_unlock(session->resample_mutex);
 
 						}
+
 						if (flag & SFF_CNG) {
 							switch_set_flag(write_frame, SFF_CNG);
 						}
+						
+						if (ptime_mismatch || resample) {
+							write_frame->timestamp = 0;
+						}
 
 						if ((status = perform_write(session, write_frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) {
 							break;
@@ -1003,8 +1008,12 @@
 	
  done:
 
+	if (ptime_mismatch || resample) {
+		write_frame->timestamp = 0;
+	}
+
 	if (do_write) {
-		status = perform_write(session, frame, flags, stream_id);
+		status = perform_write(session, write_frame, flags, stream_id);
 	}
 	
  error:

Modified: freeswitch/branches/gmaruzz/src/switch_core_session.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_core_session.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_core_session.c	Wed Jan  7 10:17:00 2009
@@ -421,28 +421,29 @@
 }
 
 static const char *message_names[] = {
-	"SWITCH_MESSAGE_REDIRECT_AUDIO",
-	"SWITCH_MESSAGE_TRANSMIT_TEXT",
-	"SWITCH_MESSAGE_INDICATE_ANSWER",
-	"SWITCH_MESSAGE_INDICATE_PROGRESS",
-	"SWITCH_MESSAGE_INDICATE_BRIDGE",
-	"SWITCH_MESSAGE_INDICATE_UNBRIDGE",
-	"SWITCH_MESSAGE_INDICATE_TRANSFER",
-	"SWITCH_MESSAGE_INDICATE_RINGING",
-	"SWITCH_MESSAGE_INDICATE_MEDIA",
-	"SWITCH_MESSAGE_INDICATE_NOMEDIA",
-	"SWITCH_MESSAGE_INDICATE_HOLD",
-	"SWITCH_MESSAGE_INDICATE_UNHOLD",
-	"SWITCH_MESSAGE_INDICATE_REDIRECT",
-	"SWITCH_MESSAGE_INDICATE_RESPOND",
-	"SWITCH_MESSAGE_INDICATE_BROADCAST",
-	"SWITCH_MESSAGE_INDICATE_MEDIA_REDIRECT",
-	"SWITCH_MESSAGE_INDICATE_DEFLECT",
-	"SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ",
-	"SWITCH_MESSAGE_INDICATE_DISPLAY",
-	"SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY",
-	"SWITCH_MESSAGE_INDICATE_AUDIO_SYNC",
-	"SWITCH_MESSAGE_INVALID"
+	"REDIRECT_AUDIO",
+	"TRANSMIT_TEXT",
+	"ANSWER",
+	"PROGRESS",
+	"BRIDGE",
+	"UNBRIDGE",
+	"TRANSFER",
+	"RINGING",
+	"MEDIA",
+	"NOMEDIA",
+	"HOLD",
+	"UNHOLD",
+	"REDIRECT",
+	"RESPOND",
+	"BROADCAST",
+	"MEDIA_REDIRECT",
+	"DEFLECT",
+	"VIDEO_REFRESH_REQ",
+	"DISPLAY",
+	"TRANSCODING_NECESSARY",
+	"AUDIO_SYNC",
+	"REQUEST_IMAGE_MEDIA",
+	"INVALID"
 };
 
 SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(switch_core_session_t *session, 

Modified: freeswitch/branches/gmaruzz/src/switch_core_state_machine.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_core_state_machine.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_core_state_machine.c	Wed Jan  7 10:17:00 2009
@@ -206,6 +206,7 @@
 
 //static switch_hash_t *stack_table = NULL;
 static Hash stack_table;
+static switch_mutex_t *stack_mutex = NULL;
 
 #if defined (__GNUC__) && defined (LINUX) && defined (HAVE_EXECINFO_H)
 #include <execinfo.h>
@@ -244,9 +245,14 @@
 	switch_thread_id_t thread_id;
 	jmp_buf *env;
 
-	if (sig && (thread_id = switch_thread_self())
-		&& (env = (jmp_buf *) sqlite3HashFind(&stack_table, &thread_id, sizeof(thread_id)))) {
-		//&& (env = (jmp_buf *) switch_core_hash_find(stack_table, (char *)&thread_id, sizeof(thread_id)))) {
+	if (!sig) return;
+
+	thread_id = switch_thread_self();
+	switch_mutex_lock(stack_mutex);
+	env = (jmp_buf *) sqlite3HashFind(&stack_table, &thread_id, sizeof(thread_id));
+	switch_mutex_unlock(stack_mutex);
+
+	if (thread_id && env) {
 		print_trace();
 		longjmp(*env, sig);
 	} else {
@@ -259,7 +265,10 @@
 {
 
 	if (switch_test_flag((&runtime), SCF_CRASH_PROT)) {
+		switch_mutex_init(&stack_mutex, SWITCH_MUTEX_NESTED, pool);
+		switch_mutex_lock(stack_mutex);
 		sqlite3HashInit(&stack_table, SQLITE_HASH_BINARY, 0);
+		switch_mutex_unlock(stack_mutex);
 	}
 }
 
@@ -328,8 +337,9 @@
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Thread has crashed for channel %s\n", switch_channel_get_name(session->channel));
 			switch_channel_hangup(session->channel, SWITCH_CAUSE_CRASH);
 		} else {
+			switch_mutex_lock(stack_mutex);
 			sqlite3HashInsert(&stack_table, &thread_id, sizeof(thread_id), (void *) &env);
-			//apr_hash_set(stack_table, &thread_id, sizeof(thread_id), &env);
+			switch_mutex_unlock(stack_mutex);
 		}
 	}
 
@@ -399,6 +409,8 @@
 					
 					STATE_MACRO(hangup, "HANGUP");
 					
+					switch_core_media_bug_remove_all(session);
+
 					hook_var = switch_channel_get_variable(session->channel, SWITCH_API_HANGUP_HOOK_VARIABLE);
 					if (switch_true(switch_channel_get_variable(session->channel, SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE))) {
 						use_session = session;

Modified: freeswitch/branches/gmaruzz/src/switch_dso.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_dso.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_dso.c	Wed Jan  7 10:17:00 2009
@@ -24,14 +24,14 @@
 
 #ifdef WIN32
 
-void switch_dso_destroy(switch_dso_lib_t *lib) {
+SWITCH_DECLARE(void) switch_dso_destroy(switch_dso_lib_t *lib) {
 	if (lib && *lib) {
 		FreeLibrary(*lib);
 		*lib = NULL;
 	}
 }
 
-switch_dso_lib_t switch_dso_open(const char *path, int global, char **err) {
+SWITCH_DECLARE(switch_dso_lib_t) switch_dso_open(const char *path, int global, char **err) {
     HINSTANCE lib;
 	
 	lib = LoadLibraryEx(path, NULL, 0);
@@ -48,7 +48,7 @@
 	return lib;
 }
 
-switch_dso_func_t switch_dso_func_sym(switch_dso_lib_t lib, const char *sym, char **err) {
+SWITCH_DECLARE(switch_dso_func_t) switch_dso_func_sym(switch_dso_lib_t lib, const char *sym, char **err) {
 	FARPROC func = GetProcAddress(lib, sym);
 	if (!func) {
 		DWORD error = GetLastError();
@@ -57,7 +57,7 @@
 	return (switch_dso_func_t)func;
 }
 
-void *switch_dso_data_sym(switch_dso_lib_t lib, const char *sym, char **err) {
+SWITCH_DECLARE(void *) switch_dso_data_sym(switch_dso_lib_t lib, const char *sym, char **err) {
 	FARPROC addr = GetProcAddress(lib, sym);
 	if (!addr) {
 		DWORD error = GetLastError();

Modified: freeswitch/branches/gmaruzz/src/switch_event.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_event.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_event.c	Wed Jan  7 10:17:00 2009
@@ -930,13 +930,20 @@
 
 static switch_xml_t add_xml_header(switch_xml_t xml, char *name, char *value, int offset)
 {
-	switch_xml_t header = switch_xml_add_child_d(xml, "header", offset);
-
+	switch_xml_t header = switch_xml_add_child_d(xml, name, offset);
+	
 	if (header) {
-		switch_xml_set_attr_d(header, "name", name);
-		switch_xml_set_attr_d(header, "value", value);
+		int encode_len = (strlen(value) * 3) + 1;
+		char *encode_buf = malloc(encode_len);
+		
+		switch_assert(encode_buf);
+ 
+		memset(encode_buf, 0, encode_len);
+		switch_url_encode((char *) value, encode_buf, encode_len);
+		switch_xml_set_txt_d(header, encode_buf);
+		free(encode_buf);
 	}
-
+	
 	return header;
 }
 
@@ -948,6 +955,7 @@
 	switch_xml_t xml = NULL;
 	uint32_t off = 0;
 	va_list ap;
+	switch_xml_t xheaders = NULL;
 
 	if (!(xml = switch_xml_new("event"))) {
 		return xml;
@@ -972,8 +980,11 @@
 		}
 	}
 
-	for (hp = event->headers; hp; hp = hp->next) {
-		add_xml_header(xml, hp->name, hp->value, off++);
+	if ((xheaders = switch_xml_add_child_d(xml, "headers", off++))) {
+		int hoff = 0;
+		for (hp = event->headers; hp; hp = hp->next) {
+			add_xml_header(xheaders, hp->name, hp->value, hoff++);
+		}
 	}
 
 	if (!switch_strlen_zero(data)) {
@@ -1032,7 +1043,7 @@
 	switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Date-Local", date);
 	switch_rfc822_date(date, ts);
 	switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Date-GMT", date);
-	switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Event-Date-timestamp", "%" SWITCH_UINT64_T_FMT, (uint64_t) ts);
+	switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Event-Date-Timestamp", "%" SWITCH_UINT64_T_FMT, (uint64_t) ts);
 	switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Calling-File", switch_cut_path(file));
 	switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Calling-Function", func);
 	switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Event-Calling-Line-Number", "%d", line);

Modified: freeswitch/branches/gmaruzz/src/switch_ivr.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_ivr.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_ivr.c	Wed Jan  7 10:17:00 2009
@@ -41,6 +41,7 @@
 SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, uint32_t ms, switch_bool_t sync, switch_input_args_t *args)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
+	int media_ready = 0;
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
 	switch_time_t start = switch_timestamp_now(), now, done = switch_timestamp_now() + (ms * 1000);
 	switch_frame_t *read_frame, cng_frame = { 0 };
@@ -53,10 +54,19 @@
 	switch_codec_t codec = { 0 };
 	int sval = 0;
 	const char *var;
+
+	if (!switch_channel_test_flag(channel, CF_PROXY_MODE) && !switch_channel_media_ready(channel) && !switch_channel_test_flag(channel, CF_SERVICE)) {
+		if ((status = switch_channel_pre_answer(channel)) != SWITCH_STATUS_SUCCESS) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot establish media.\n");
+			return SWITCH_STATUS_FALSE;
+		}
+	}
+
+	media_ready = (switch_channel_media_ready(channel) && !switch_channel_test_flag(channel, CF_SERVICE));
 	
-	if ((var = switch_channel_get_variable(channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE)) && (sval = atoi(var))) {
+	if (ms > 100 && media_ready && (var = switch_channel_get_variable(channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE)) && (sval = atoi(var))) {
 		switch_core_session_get_read_impl(session, &imp);
-	
+		
 		if (switch_core_codec_init(&codec,
 								   "L16",
 								   NULL,
@@ -81,12 +91,10 @@
 		write_frame.datalen = imp.decoded_bytes_per_packet;
 		write_frame.samples = write_frame.datalen / sizeof(int16_t);
 
-		if (!switch_channel_media_ready(channel)) {
-			if ((status = switch_channel_pre_answer(channel)) != SWITCH_STATUS_SUCCESS) {
-				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot establish media.\n");
-				return SWITCH_STATUS_FALSE;
-			}
-		}
+	}
+
+	if (!write_frame.datalen) {
+		sval = 0;
 	}
 
 	cng_frame.data = data;
@@ -94,7 +102,7 @@
 	cng_frame.buflen = 2;
 	switch_set_flag((&cng_frame), SFF_CNG);
 
-	if (sync && !switch_channel_test_flag(channel, CF_PROXY_MODE)) {
+	if (sync && media_ready) {
 		switch_channel_audio_sync(channel);
 	}
 	
@@ -161,29 +169,25 @@
 			}
 		}
 
-		if (switch_channel_test_flag(channel, CF_PROXY_MODE)) {
+		if (!media_ready) {
 			switch_cond_next();
 			continue;
 		}
 
-		if (switch_channel_test_flag(channel, CF_SERVICE) ||
-			(!switch_channel_test_flag(channel, CF_ANSWERED) && !switch_channel_test_flag(channel, CF_EARLY_MEDIA))) {
-			switch_cond_next();
-		} else {
-			status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
-			if (!SWITCH_READ_ACCEPTABLE(status)) {
-				break;
-			}
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
+
+		if (!SWITCH_READ_ACCEPTABLE(status)) {
+			break;
 		}
 
-		if (sval) {
+		if (sval && write_frame.datalen) {
 			switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.samples, sval);
 			switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
 		} else {
 			switch_core_session_write_frame(session, &cng_frame, SWITCH_IO_FLAG_NONE, 0);
 		}
 	}
-
+	
 	if (write_frame.codec) {
 		switch_core_codec_destroy(&codec);
 	}
@@ -1920,7 +1924,7 @@
 
 SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *session, const char *data)
 {
-	switch_xml_t x_domain, xml = NULL, x_user, x_param, x_params;
+	switch_xml_t x_domain, xml = NULL, x_user, x_param, x_params, x_group = NULL;
 	char *user, *mailbox, *domain;
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_status_t status = SWITCH_STATUS_FALSE;
@@ -1937,7 +1941,7 @@
 
 	*domain++ = '\0';
 
-	if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) {
+	if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, &x_group, NULL) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", user, domain);
 		goto done;
 	}
@@ -1959,6 +1963,17 @@
 		}
 	}
 
+	if (x_group && (x_params = switch_xml_child(x_group, "variables"))) {
+		for (x_param = switch_xml_child(x_params, "variable"); x_param; x_param = x_param->next) {
+			const char *var = switch_xml_attr(x_param, "name");
+			const char *val = switch_xml_attr(x_param, "value");
+
+			if (var && val) {
+				switch_channel_set_variable(channel, var, val);
+			}
+		}
+	}
+
 	if ((x_params = switch_xml_child(x_user, "variables"))) {
 		for (x_param = switch_xml_child(x_params, "variable"); x_param; x_param = x_param->next) {
 			const char *var = switch_xml_attr(x_param, "name");

Modified: freeswitch/branches/gmaruzz/src/switch_ivr_async.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_ivr_async.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_ivr_async.c	Wed Jan  7 10:17:00 2009
@@ -1445,6 +1445,44 @@
 
 #define SWITCH_META_VAR_KEY "__dtmf_meta"
 
+typedef struct {
+	switch_core_session_t *session;
+	const char *app;
+	int flags;
+} bch_t;
+
+static void *SWITCH_THREAD_FUNC bcast_thread(switch_thread_t *thread, void *obj)
+{
+	bch_t *bch = (bch_t *) obj;
+
+	switch_ivr_broadcast(switch_core_session_get_uuid(bch->session), bch->app, bch->flags);
+
+	return NULL;
+
+}
+static void broadcast_in_thread(switch_core_session_t *session, const char *app, int flags)
+{
+	switch_thread_t *thread;
+	switch_threadattr_t *thd_attr = NULL;
+	switch_memory_pool_t *pool;
+	bch_t *bch;
+	
+	switch_assert(session);
+
+	pool = switch_core_session_get_pool(session);
+	
+	bch = switch_core_session_alloc(session, sizeof(*bch));
+	bch->session = session;
+	bch->app = app;
+	bch->flags = flags;
+	
+	
+	switch_threadattr_create(&thd_attr, pool);
+	switch_threadattr_detach_set(thd_attr, 1);
+	switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
+	switch_thread_create(&thread, thd_attr, bcast_thread, bch, pool);
+}
+
 static switch_status_t meta_on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf, switch_dtmf_direction_t direction)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -1497,7 +1535,7 @@
 
 			if (ok && md->sr[direction].map[dval].app) {
 				uint32_t flags = md->sr[direction].map[dval].flags;
-
+				
 				if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_OPPOSITE)) {
 					if (direction == SWITCH_DTMF_SEND) {
 						flags |= SMF_ECHO_ALEG;
@@ -1520,7 +1558,19 @@
 
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Processing meta digit '%c' [%s]\n",
 								  switch_channel_get_name(channel), dtmf->digit, md->sr[direction].map[dval].app);
-				switch_ivr_broadcast(switch_core_session_get_uuid(session), md->sr[direction].map[dval].app, flags);
+
+				if (switch_channel_test_flag(channel, CF_PROXY_MODE)) {
+					broadcast_in_thread(session, md->sr[direction].map[dval].app, flags | SMF_REBRIDGE);
+				} else {
+					switch_ivr_broadcast(switch_core_session_get_uuid(session), md->sr[direction].map[dval].app, flags);
+				}
+
+				if ((md->sr[direction].map[dval].bind_flags & SBF_ONCE)) {
+					memset(&md->sr[direction].map[dval], 0, sizeof(md->sr[direction].map[dval]));
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Unbinding meta digit '%c'\n",
+									  switch_channel_get_name(channel), dtmf->digit);
+				}
+
 			} else {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s Ignoring meta digit '%c' not mapped\n",
 								  switch_channel_get_name(channel), dtmf->digit);
@@ -1534,10 +1584,26 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session)
+SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session, uint32_t key)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
-	switch_channel_set_private(channel, SWITCH_META_VAR_KEY, NULL);
+	
+	if (key) {
+		dtmf_meta_data_t *md = switch_channel_get_private(channel, SWITCH_META_VAR_KEY);
+		
+		if (!md || key > 9) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid key %u\n", key);
+			return SWITCH_STATUS_FALSE;
+		}
+		
+		memset(&md->sr[SWITCH_DTMF_RECV].map[key], 0, sizeof(md->sr[SWITCH_DTMF_RECV].map[key]));
+		memset(&md->sr[SWITCH_DTMF_SEND].map[key], 0, sizeof(md->sr[SWITCH_DTMF_SEND].map[key]));
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "UnBound A-Leg: %d\n", key);
+
+	} else {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "UnBound A-Leg: ALL\n");
+		switch_channel_set_private(channel, SWITCH_META_VAR_KEY, NULL);
+	}
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -1566,7 +1632,7 @@
 			md->sr[SWITCH_DTMF_RECV].map[key].app = switch_core_session_strdup(session, app);
 			md->sr[SWITCH_DTMF_RECV].map[key].flags |= SMF_HOLD_BLEG;
 			md->sr[SWITCH_DTMF_RECV].map[key].bind_flags = bind_flags;
-
+			
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Bound A-Leg: %d %s\n", key, app);
 		}
 		if ((bind_flags & SBF_DIAL_BLEG)) {
@@ -2134,6 +2200,10 @@
 		other_session = NULL;
 	}
 
+	if (switch_stristr("record", app)) {
+		nomedia = 0;
+	}
+
 	if ((flags & SMF_ECHO_ALEG)) {
 		if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
 			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute");

Modified: freeswitch/branches/gmaruzz/src/switch_ivr_bridge.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_ivr_bridge.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_ivr_bridge.c	Wed Jan  7 10:17:00 2009
@@ -829,8 +829,8 @@
 			switch_channel_set_variable(peer_channel, SWITCH_BRIDGE_VARIABLE, switch_core_session_get_uuid(session));
 
 			if (!switch_channel_media_ready(caller_channel) || 
-				!(switch_channel_test_flag(peer_channel, CF_ANSWERED) || switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA))) {
-				if ((status = switch_ivr_wait_for_answer(session, peer_session)) != SWITCH_STATUS_SUCCESS) {
+				(!switch_channel_test_flag(peer_channel, CF_ANSWERED) && !switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA))) {
+				if ((status = switch_ivr_wait_for_answer(session, peer_session)) != SWITCH_STATUS_SUCCESS || !switch_channel_ready(caller_channel)) {
 					switch_channel_state_t w_state = switch_channel_get_state(caller_channel);
 					switch_channel_hangup(peer_channel, SWITCH_CAUSE_ALLOTTED_TIMEOUT);
 					if (w_state < CS_HANGUP && w_state != CS_ROUTING && w_state != CS_PARK && 
@@ -850,6 +850,7 @@
 					switch_core_session_rwunlock(peer_session);
 					goto done;
 				}
+
 				if (switch_channel_test_flag(peer_channel, CF_ANSWERED) && !switch_channel_test_flag(caller_channel, CF_ANSWERED)) {
 					switch_channel_answer(caller_channel);
 				}
@@ -1187,7 +1188,7 @@
 		switch_channel_answer(rchannel);
 	}
 
-	switch_channel_set_state_flag(rchannel, CF_TRANSFER);
+ 	switch_channel_set_state_flag(rchannel, CF_TRANSFER);
 	switch_channel_set_state(rchannel, CS_PARK);
 	
 	if (bchannel) {

Modified: freeswitch/branches/gmaruzz/src/switch_ivr_originate.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_ivr_originate.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_ivr_originate.c	Wed Jan  7 10:17:00 2009
@@ -39,6 +39,16 @@
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 
+	if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) {
+		while (switch_channel_get_state(channel) == CS_CONSUME_MEDIA && !switch_channel_test_flag(channel, CF_TAGGED)) {
+			if (!switch_channel_media_ready(channel)) {
+				switch_yield(10000);
+			} else {
+				switch_ivr_sleep(session, 10, SWITCH_FALSE, NULL);
+			}
+		}
+	}
+
 	switch_channel_clear_state_handler(channel, &originate_state_handlers);
 
 	return SWITCH_STATUS_FALSE;
@@ -324,7 +334,7 @@
 	}
 
 	if ((switch_channel_test_flag(peer_channel, CF_ANSWERED) || switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA))) {
-		return SWITCH_STATUS_SUCCESS;
+		goto end;
 	}
 
 	switch_zmalloc(write_frame.data, SWITCH_RECOMMENDED_BUFFER_SIZE);
@@ -545,7 +555,9 @@
 
 	switch_safe_free(write_frame.data);
 
-	return status;
+ end:
+
+	return (!caller_channel || switch_channel_ready(caller_channel)) ? status : SWITCH_STATUS_FALSE;
 }
 
 static void process_import(switch_core_session_t *session, switch_channel_t *peer_channel)

Modified: freeswitch/branches/gmaruzz/src/switch_log.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_log.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_log.c	Wed Jan  7 10:17:00 2009
@@ -122,6 +122,7 @@
 		if (!LEVELS[x]) {
 			break;
 		}
+
 		if (!strcasecmp(LEVELS[x], str)) {
 			level = (switch_log_level_t) x;
 			break;

Modified: freeswitch/branches/gmaruzz/src/switch_rtp.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_rtp.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_rtp.c	Wed Jan  7 10:17:00 2009
@@ -199,6 +199,7 @@
 	switch_port_t stun_port;
 	int from_auto;
 	uint32_t cng_count;
+	switch_rtp_bug_flag_t rtp_bugs;
 };
 
 static int global_init = 0;
@@ -486,6 +487,11 @@
 	return port;
 }
 
+SWITCH_DECLARE(void) switch_rtp_intentional_bugs(switch_rtp_t *rtp_session, switch_rtp_bug_flag_t bugs)
+{
+	rtp_session->rtp_bugs = bugs;
+}
+
 SWITCH_DECLARE(switch_status_t) switch_rtp_set_local_address(switch_rtp_t *rtp_session, const char *host, switch_port_t port, const char **err)
 {
 	switch_socket_t *new_sock = NULL, *old_sock = NULL;
@@ -1204,7 +1210,7 @@
 							  rtp_session->dtmf_data.timestamp_dtmf,
 							  rtp_session->dtmf_data.out_digit_sofar,
 							  rtp_session->dtmf_data.out_digit_sub_sofar, rtp_session->dtmf_data.out_digit_dur, rtp_session->seq);
-			if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BUGGY_2833)) {
+			if (rtp_session->rtp_bugs & RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833) {
 				rtp_session->dtmf_data.timestamp_dtmf = rtp_session->last_write_ts + samples;
 			}
 		}
@@ -1257,7 +1263,7 @@
 			switch_rtp_write_manual(rtp_session,
 									rtp_session->dtmf_data.out_digit_packet,
 									4,
-									switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BUGGY_2833) ? 0 : 1,
+									rtp_session->rtp_bugs & RTP_BUG_CISCO_SKIP_MARK_BIT_2833 ? 0 : 1,
 									rtp_session->te, rtp_session->dtmf_data.timestamp_dtmf, &flags);
 
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send start packet for [%c] ts=%u dur=%d/%d/%d seq=%d\n",

Modified: freeswitch/branches/gmaruzz/src/switch_xml.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/switch_xml.c	(original)
+++ freeswitch/branches/gmaruzz/src/switch_xml.c	Wed Jan  7 10:17:00 2009
@@ -300,6 +300,62 @@
 	return p;
 }
 
+SWITCH_DECLARE(switch_xml_t) switch_xml_find_child_multi(switch_xml_t node, const char *childname, ...)
+{
+	switch_xml_t p = NULL;
+	const char *names[256] = {0};
+	const char *vals[256] = {0};
+	int x, i = 0;
+	va_list ap;
+	const char *attrname, *value = NULL;
+
+	va_start(ap, childname);
+	
+	while(i < 255) {
+		if ((attrname = va_arg(ap, const char *))) {
+			value = va_arg(ap, const char *);
+		}
+		if (attrname && value) {
+			names[i] = attrname;
+			vals[i] = value;
+		} else {
+			break;
+		}
+		i++;
+	}
+
+	va_end(ap);
+
+	if (!(childname && i)) {
+		return node;
+	}
+	
+	for (p = switch_xml_child(node, childname); p; p = p->next) {
+		for (x = 0; x < i; x++) {
+			if (names[x] && vals[x]) {
+				const char *aname = switch_xml_attr(p, names[x]);
+
+				if (aname) {
+					if (*vals[x] == '!') {
+						const char *sval = vals[x] + 1;
+						if (sval && strcasecmp(aname, sval)) {
+							goto done;
+						}
+					} else {
+						if (!strcasecmp(aname, vals[x])) {
+							goto done;
+						}
+					}
+				}
+			}
+		}
+	}
+
+ done:
+
+	return p;
+}
+
 // returns the first child tag with the given name or NULL if not found
 SWITCH_DECLARE(switch_xml_t) switch_xml_child(switch_xml_t xml, const char *name)
 {
@@ -1528,6 +1584,112 @@
 	return status;
 }
 
+SWITCH_DECLARE(switch_status_t) switch_xml_locate_group(const char *group_name,
+														const char *domain_name, 
+														switch_xml_t *root,
+														switch_xml_t *domain,
+														switch_xml_t *group,
+														switch_event_t *params)
+{
+	switch_status_t status = SWITCH_STATUS_FALSE;
+	switch_event_t *my_params = NULL;
+	switch_xml_t groups = NULL;
+
+	*root = NULL;
+	*group = NULL;
+	*domain = NULL;
+
+	if (!params) {
+		switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
+		switch_assert(my_params);
+		params = my_params;
+	}
+
+	if (group_name) {
+		switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "group_name", group_name);
+	}
+
+	if (domain_name) {
+		switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain_name);
+	}
+
+	if ((status = switch_xml_locate_domain(domain_name, params, root, domain)) != SWITCH_STATUS_SUCCESS) {
+		goto end;
+	}
+	
+	status = SWITCH_STATUS_FALSE;
+
+	if ((groups = switch_xml_child(*domain, "groups"))) {
+		if ((*group = switch_xml_find_child(groups, "group", "name", group_name))) {
+			status = SWITCH_STATUS_SUCCESS;
+		}
+	}
+
+ end:
+
+	if (my_params) {
+		switch_event_destroy(&my_params);
+	}
+
+	return status;
+}
+
+static switch_status_t find_user_in_tag(switch_xml_t tag, const char *ip, const char *user_name, const char *key, switch_event_t *params, switch_xml_t *user)
+{
+	const char *type = "!pointer";
+	const char *val;
+
+	if (params && (val = switch_event_get_header(params, "user_type"))) {
+		if (!strcasecmp(val, "any")) {
+			type = NULL;
+		} else {
+			type = val;
+		}
+	}
+
+	if (ip) {
+		if ((*user = switch_xml_find_child_multi(tag, "user", "ip", ip, "type", type, NULL))) {
+			return SWITCH_STATUS_SUCCESS;
+		}
+	} 
+
+	if (user_name) {
+		if (params && switch_event_get_header(params, (char *) "mailbox")) {
+			if ((*user = switch_xml_find_child_multi(tag, "user", "mailbox", user_name, "type", type, NULL))) {
+				return SWITCH_STATUS_SUCCESS;
+			}
+		}
+
+		if ((*user = switch_xml_find_child_multi(tag, "user", key, user_name, "type", type, NULL))) {
+			return SWITCH_STATUS_SUCCESS;
+		}
+	}
+	
+	return SWITCH_STATUS_FALSE;
+	
+}
+
+SWITCH_DECLARE(switch_status_t) switch_xml_locate_user_in_domain(const char *user_name, switch_xml_t domain, switch_xml_t *user, switch_xml_t *ingroup)
+{
+	switch_xml_t group = NULL, groups = NULL, users = NULL;
+	switch_status_t status = SWITCH_STATUS_FALSE;
+	
+	if ((groups = switch_xml_child(domain, "groups"))) {
+		for (group = switch_xml_child(groups, "group"); group; group = group->next) {
+			if ((users = switch_xml_child(group, "users"))) {
+				if ((status = find_user_in_tag(users, NULL, user_name, "id", NULL, user)) == SWITCH_STATUS_SUCCESS) {
+					if (ingroup) {
+						*ingroup = group;
+					}
+					break;
+				}
+			}
+		}
+	}
+
+	return status;
+}
+
 SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key,
 													   const char *user_name,
 													   const char *domain_name, 
@@ -1535,15 +1697,21 @@
 													   switch_xml_t *root,
 													   switch_xml_t *domain,
 													   switch_xml_t *user,
+													   switch_xml_t *ingroup,
 													   switch_event_t *params)
 {
 	switch_status_t status = SWITCH_STATUS_FALSE;
-	switch_event_t *my_params = NULL;
-
+	switch_event_t *my_params = NULL, *search_params = NULL;
+	switch_xml_t group = NULL, groups = NULL, users = NULL;
+	
 	*root = NULL;
 	*user = NULL;
 	*domain = NULL;
 
+	if (ingroup) {
+		*ingroup = NULL;
+	}
+
 	if (!params) {
 		switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
 		switch_assert(my_params);
@@ -1570,26 +1738,27 @@
 	
 	status = SWITCH_STATUS_FALSE;
 
-	if (ip) {
-		if ((*user = switch_xml_find_child(*domain, "user", "ip", ip))) {
-			status = SWITCH_STATUS_SUCCESS;
-			goto end;
-		}
-	} 
+	if (params != my_params) {
+		search_params = params;
+	}
 
-	if (user_name) {
-		if (params != my_params && switch_event_get_header(params, (char *) "mailbox")) {
-			if ((*user = switch_xml_find_child(*domain, "user", "mailbox", user_name))) {
-				status = SWITCH_STATUS_SUCCESS;
-				goto end;
+	if ((groups = switch_xml_child(*domain, "groups"))) {
+		for (group = switch_xml_child(groups, "group"); group; group = group->next) {
+			if ((users = switch_xml_child(group, "users"))) {
+				if ((status = find_user_in_tag(users, ip, user_name, key, params, user)) == SWITCH_STATUS_SUCCESS) {
+					if (ingroup) {
+						*ingroup = group;
+					}
+					break;
+				}
 			}
 		}
+	}
 
-		if ((*user = switch_xml_find_child(*domain, "user", key, user_name))) {
-			status = SWITCH_STATUS_SUCCESS;
-			goto end;
-		}
+	if (status != SWITCH_STATUS_SUCCESS) {
+		status = find_user_in_tag(*domain, ip, user_name, key, params, user);
 	}
+	
 
  end:
 

Modified: freeswitch/branches/gmaruzz/support-d/.screenrc
==============================================================================
--- freeswitch/branches/gmaruzz/support-d/.screenrc	(original)
+++ freeswitch/branches/gmaruzz/support-d/.screenrc	Wed Jan  7 10:17:00 2009
@@ -1,2 +1,3 @@
+startup_message off
 escape ^\b
 defscrollback 500000



More information about the Freeswitch-svn mailing list