From f8ab4fe079c80974de057696cd43e17a28dfcee2 Mon Sep 17 00:00:00 2001 From: Martins Mozeiko Date: Tue, 8 Jun 2010 00:17:24 +0300 Subject: [PATCH] Added backend & sample for Android --- .gitignore | 5 + Alc/ALc.c | 6 + Alc/android.c | 263 +++ OpenAL32/Include/alMain.h | 7 + README-ANDROID | 47 + android/AndroidManifest.xml | 16 + .../assets/trash80_-_three-four-robot-slojam.ogg | Bin 0 -> 778094 bytes .../assets/trash80_-_three-four-robot-slojam.txt | 1 + android/build.properties | 20 + android/build.xml | 67 + android/default.properties | 11 + android/jni/Android.mk | 92 + android/jni/Application.mk | 3 + android/jni/config.h | 97 + android/jni/example.c | 283 +++ android/jni/tremolo/CHANGELOG | 47 + android/jni/tremolo/COPYING | 372 ++++ android/jni/tremolo/Makefile | 105 + android/jni/tremolo/Profile.txt | 496 +++++ android/jni/tremolo/README | 64 + android/jni/tremolo/TODO | 2 + android/jni/tremolo/annotate.c | 300 +++ android/jni/tremolo/asm_arm.h | 245 +++ android/jni/tremolo/bibble.txt | 486 +++++ android/jni/tremolo/bitwise.c | 843 ++++++++ android/jni/tremolo/bitwiseARM.s | 359 ++++ android/jni/tremolo/codebook.c | 874 ++++++++ android/jni/tremolo/codebook.h | 69 + android/jni/tremolo/codec_internal.h | 213 ++ android/jni/tremolo/config_types.h | 26 + android/jni/tremolo/dpen.s | 449 +++++ android/jni/tremolo/dsp.c | 298 +++ android/jni/tremolo/floor0.c | 428 ++++ android/jni/tremolo/floor1.c | 382 ++++ android/jni/tremolo/floor1ARM.s | 31 + android/jni/tremolo/floor1LARM.s | 30 + android/jni/tremolo/floor_lookup.c | 92 + android/jni/tremolo/framing.c | 1118 +++++++++++ android/jni/tremolo/info.c | 348 ++++ android/jni/tremolo/ivorbiscodec.h | 104 + android/jni/tremolo/ivorbisfile.h | 122 ++ android/jni/tremolo/ivorbisfile_example.c | 86 + android/jni/tremolo/lsp_lookup.h | 108 + android/jni/tremolo/mapping0.c | 241 +++ android/jni/tremolo/mdct.c | 562 ++++++ android/jni/tremolo/mdct.h | 59 + android/jni/tremolo/mdctARM.s | 1179 +++++++++++ android/jni/tremolo/mdctLARM.s | 1167 +++++++++++ android/jni/tremolo/mdct_lookup.h | 539 +++++ android/jni/tremolo/misc.c | 208 ++ android/jni/tremolo/misc.h | 192 ++ android/jni/tremolo/ogg.h | 215 ++ android/jni/tremolo/os.h | 62 + android/jni/tremolo/os_types.h | 101 + android/jni/tremolo/profile.c | 110 ++ android/jni/tremolo/res012.c | 225 +++ android/jni/tremolo/speed.s | 120 ++ android/jni/tremolo/testtremor.c | 423 ++++ android/jni/tremolo/vorbisfile.c | 1589 +++++++++++++++ android/jni/tremolo/window_lookup.h | 2087 ++++++++++++++++++++ android/src/net/strangesoft/kcat/OpenAL.java | 50 + 61 files changed, 18144 insertions(+) create mode 100644 Alc/android.c create mode 100644 README-ANDROID create mode 100644 android/AndroidManifest.xml create mode 100644 android/assets/trash80_-_three-four-robot-slojam.ogg create mode 100644 android/assets/trash80_-_three-four-robot-slojam.txt create mode 100644 android/build.properties create mode 100644 android/build.xml create mode 100644 android/default.properties create mode 100644 android/jni/Android.mk create mode 100644 android/jni/Application.mk create mode 100644 android/jni/config.h create mode 100644 android/jni/example.c create mode 100644 android/jni/tremolo/CHANGELOG create mode 100644 android/jni/tremolo/COPYING create mode 100644 android/jni/tremolo/Makefile create mode 100644 android/jni/tremolo/Profile.txt create mode 100644 android/jni/tremolo/README create mode 100644 android/jni/tremolo/TODO create mode 100644 android/jni/tremolo/annotate.c create mode 100644 android/jni/tremolo/asm_arm.h create mode 100644 android/jni/tremolo/bibble.txt create mode 100644 android/jni/tremolo/bitwise.c create mode 100644 android/jni/tremolo/bitwiseARM.s create mode 100644 android/jni/tremolo/codebook.c create mode 100644 android/jni/tremolo/codebook.h create mode 100644 android/jni/tremolo/codec_internal.h create mode 100644 android/jni/tremolo/config_types.h create mode 100644 android/jni/tremolo/dpen.s create mode 100644 android/jni/tremolo/dsp.c create mode 100644 android/jni/tremolo/floor0.c create mode 100644 android/jni/tremolo/floor1.c create mode 100644 android/jni/tremolo/floor1ARM.s create mode 100644 android/jni/tremolo/floor1LARM.s create mode 100644 android/jni/tremolo/floor_lookup.c create mode 100644 android/jni/tremolo/framing.c create mode 100644 android/jni/tremolo/info.c create mode 100644 android/jni/tremolo/ivorbiscodec.h create mode 100644 android/jni/tremolo/ivorbisfile.h create mode 100644 android/jni/tremolo/ivorbisfile_example.c create mode 100644 android/jni/tremolo/lsp_lookup.h create mode 100644 android/jni/tremolo/mapping0.c create mode 100644 android/jni/tremolo/mdct.c create mode 100644 android/jni/tremolo/mdct.h create mode 100644 android/jni/tremolo/mdctARM.s create mode 100644 android/jni/tremolo/mdctLARM.s create mode 100644 android/jni/tremolo/mdct_lookup.h create mode 100644 android/jni/tremolo/misc.c create mode 100644 android/jni/tremolo/misc.h create mode 100644 android/jni/tremolo/ogg.h create mode 100644 android/jni/tremolo/os.h create mode 100644 android/jni/tremolo/os_types.h create mode 100644 android/jni/tremolo/profile.c create mode 100644 android/jni/tremolo/res012.c create mode 100644 android/jni/tremolo/speed.s create mode 100644 android/jni/tremolo/testtremor.c create mode 100644 android/jni/tremolo/vorbisfile.c create mode 100644 android/jni/tremolo/window_lookup.h create mode 100644 android/src/net/strangesoft/kcat/OpenAL.java diff --git a/.gitignore b/.gitignore index 378eac25..cacf240b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,6 @@ build +android/bin +android/gen +android/libs +android/res +android/local.properties diff --git a/Alc/ALc.c b/Alc/ALc.c index a1aca654..62878d7c 100644 --- a/Alc/ALc.c +++ b/Alc/ALc.c @@ -69,6 +69,9 @@ static BackendInfo BackendList[] = { #ifdef HAVE_PORTAUDIO { "port", alc_pa_init, alc_pa_deinit, alc_pa_probe, EmptyFuncs }, #endif +#ifdef HAVE_ANDROID + { "android", alc_android_init, alc_android_deinit, alc_android_probe, EmptyFuncs }, +#endif { "null", alc_null_init, alc_null_deinit, alc_null_probe, EmptyFuncs }, { "wave", alc_wave_init, alc_wave_deinit, alc_wave_probe, EmptyFuncs }, @@ -632,6 +635,9 @@ void al_print(const char *fname, unsigned int line, const char *fmt, ...) } str[sizeof(str)-1] = 0; +#ifdef ANDROID + __android_log_write(ANDROID_LOG_WARN, "OpenAL", str); +#endif fprintf(LogFile, "%s", str); fflush(LogFile); } diff --git a/Alc/android.c b/Alc/android.c new file mode 100644 index 00000000..488d17e8 --- /dev/null +++ b/Alc/android.c @@ -0,0 +1,263 @@ +/** + * OpenAL cross platform audio library + * Copyright (C) 2010 by Chris Robinson + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * Or go to http://www.gnu.org/copyleft/lgpl.html + */ + +#include "config.h" + +#include +#include +#include +#include "alMain.h" +#include "AL/al.h" +#include "AL/alc.h" + +static JavaVM* javaVM; + +jint JNI_OnLoad(JavaVM* vm, void* reserved) +{ + javaVM = vm; + return JNI_VERSION_1_2; +} + +typedef struct +{ + ALCdevice* device; + + pthread_t thread; + volatile int running; + + int buffers; + int frequency; + int channels; + int bytes; + +} AndroidData; + +#define STREAM_MUSIC 3 +#define CHANNEL_CONFIGURATION_MONO 2 +#define CHANNEL_CONFIGURATION_STEREO 3 +#define ENCODING_PCM_8BIT 3 +#define ENCODING_PCM_16BIT 2 +#define MODE_STREAM 1 + +static void* thread_function(void* arg) +{ + AndroidData* data = (AndroidData*)arg; + + JNIEnv* env; + (*javaVM)->AttachCurrentThread(javaVM, &env, NULL); + + (*env)->PushLocalFrame(env, 3); + + jclass cAudioTrack = (*env)->FindClass(env, "android/media/AudioTrack"); + jmethodID mAudioTrack = (*env)->GetMethodID(env, cAudioTrack, "", "(IIIIII)V"); + jmethodID mGetMinBufferSize = (*env)->GetStaticMethodID(env, cAudioTrack, "getMinBufferSize", "(III)I"); + jmethodID mPlay = (*env)->GetMethodID(env, cAudioTrack, "play", "()V"); + jmethodID mStop = (*env)->GetMethodID(env, cAudioTrack, "stop", "()V"); + jmethodID mRelease = (*env)->GetMethodID(env, cAudioTrack, "release", "()V"); + jmethodID mWrite = (*env)->GetMethodID(env, cAudioTrack, "write", "([BII)I"); + + int sampleRateInHz = data->frequency; + int channelConfig = data->channels == 1 ? CHANNEL_CONFIGURATION_MONO : CHANNEL_CONFIGURATION_STEREO; + int audioFormat = data->bytes == 1 ? ENCODING_PCM_8BIT : ENCODING_PCM_16BIT; + + int bufferSizeInBytes = (*env)->CallStaticIntMethod(env, cAudioTrack, + mGetMinBufferSize, sampleRateInHz, channelConfig, audioFormat); + + int bufferSizeInSamples = bufferSizeInBytes / data->channels / data->bytes; + + jobject track = (*env)->NewObject(env, cAudioTrack, mAudioTrack, + STREAM_MUSIC, sampleRateInHz, channelConfig, audioFormat, data->buffers * bufferSizeInBytes, MODE_STREAM); + + (*env)->CallNonvirtualVoidMethod(env, track, cAudioTrack, mPlay); + + jarray buffer = (*env)->NewByteArray(env, bufferSizeInBytes); + + while (data->running) + { + void* pBuffer = (*env)->GetPrimitiveArrayCritical(env, buffer, NULL); + + if (pBuffer) + { + aluMixData(data->device, pBuffer, bufferSizeInSamples); + (*env)->ReleasePrimitiveArrayCritical(env, buffer, pBuffer, 0); + + (*env)->CallNonvirtualIntMethod(env, track, cAudioTrack, mWrite, buffer, 0, bufferSizeInBytes); + } + else + { + AL_PRINT("Failed to get pointer to array bytes"); + } + } + + (*env)->CallNonvirtualVoidMethod(env, track, cAudioTrack, mStop); + (*env)->CallNonvirtualVoidMethod(env, track, cAudioTrack, mRelease); + + (*env)->PopLocalFrame(env, NULL); + + (*javaVM)->DetachCurrentThread(javaVM); + return NULL; +} + +static const ALCchar android_device[] = "Android Software"; + +static ALCboolean android_open_playback(ALCdevice *device, const ALCchar *deviceName) +{ + AndroidData* data; + int channels; + int bytes; + + if (!deviceName) + { + deviceName = android_device; + } + else if(strcmp(deviceName, android_device) != 0) + { + return ALC_FALSE; + } + + data = (AndroidData*)calloc(1, sizeof(*data)); + data->device = device; + device->szDeviceName = strdup(deviceName); + device->ExtraData = data; + return ALC_TRUE; +} + +static void android_close_playback(ALCdevice *device) +{ + AndroidData* data = (AndroidData*)device->ExtraData; + if (data != NULL) + { + free(data); + device->ExtraData = NULL; + } +} + +static ALCboolean android_reset_playback(ALCdevice *device) +{ + AndroidData* data = (AndroidData*)device->ExtraData; + + int channels = aluChannelsFromFormat(device->Format); + int bytes = aluBytesFromFormat(device->Format); + + if (channels != 1 && channels != 2) + { + AL_PRINT("Output with %d channels is not suppported", channels); + return ALC_FALSE; + } + + if (bytes != 1 && bytes != 2) + { + AL_PRINT("Output with %d bytes per sample is not supported", bytes); + return ALC_FALSE; + } + + SetDefaultChannelOrder(device); + + data->buffers = device->NumUpdates; + data->frequency = device->Frequency; + data->channels = channels; + data->bytes = bytes; + + data->running = 1; + pthread_create(&data->thread, NULL, thread_function, data); + + return ALC_TRUE; +} + +static void android_stop_playback(ALCdevice *device) +{ + AndroidData* data = (AndroidData*)device->ExtraData; + + if (data->running) + { + data->running = 0; + + pthread_join(data->thread, NULL); + } +} + +static ALCboolean android_open_capture(ALCdevice *pDevice, const ALCchar *deviceName) +{ + (void)pDevice; + (void)deviceName; + return ALC_FALSE; +} + +static void android_close_capture(ALCdevice *pDevice) +{ + (void)pDevice; +} + +static void android_start_capture(ALCdevice *pDevice) +{ + (void)pDevice; +} + +static void android_stop_capture(ALCdevice *pDevice) +{ + (void)pDevice; +} + +static void android_capture_samples(ALCdevice *pDevice, ALCvoid *pBuffer, ALCuint lSamples) +{ + (void)pDevice; + (void)pBuffer; + (void)lSamples; +} + +static ALCuint android_available_samples(ALCdevice *pDevice) +{ + (void)pDevice; + return 0; +} + +static const BackendFuncs android_funcs = { + android_open_playback, + android_close_playback, + android_reset_playback, + android_stop_playback, + android_open_capture, + android_close_capture, + android_start_capture, + android_stop_capture, + android_capture_samples, + android_available_samples +}; + +void alc_android_init(BackendFuncs *func_list) +{ + *func_list = android_funcs; +} + +void alc_android_deinit(void) +{ +} + +void alc_android_probe(int type) +{ + if (type == DEVICE_PROBE) + { + AppendDeviceList(android_device); + } + else if (type == ALL_DEVICE_PROBE) + { + AppendAllDeviceList(android_device); + } +} diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 4d963563..e7c76764 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -130,6 +130,10 @@ typedef DWORD tls_type; #include #include +#ifdef ANDROID +#include +#endif + #define IsBadWritePtr(a,b) ((a) == NULL && (b) != 0) typedef pthread_key_t tls_type; @@ -295,6 +299,9 @@ void alc_wave_probe(int type); void alc_pulse_init(BackendFuncs *func_list); void alc_pulse_deinit(void); void alc_pulse_probe(int type); +void alc_android_init(BackendFuncs *func_list); +void alc_android_deinit(void); +void alc_android_probe(int type); void alc_null_init(BackendFuncs *func_list); void alc_null_deinit(void); void alc_null_probe(int type); diff --git a/README-ANDROID b/README-ANDROID new file mode 100644 index 00000000..cbb6fde6 --- /dev/null +++ b/README-ANDROID @@ -0,0 +1,47 @@ +OpenAL Soft for Android +======================= + +To build OpenAL Soft for Android you must have install SDK and NDK (at least r4) installed. + +Go to Android directory and execute + +$ PATH/TO/NDK/ndk-build # this will build libopenal.so and libexample.so + +Now you will find libopenal.so under libs subdirectory. You can use it in your own projects. +If you want to build Java example, then first update project to your local SDK installation: + +$ PATH/TO/SDK/TOOLS/android update project --path . --target android -3 + +Run this only once (it will create local.properties file, and update default.properties file). +After that use ant to compile and package Java code: + +$ ant debug + +Now you will find OpenAL-debug.apk under bin directory. Don't worry that it is debug. All the +decoding will be done from native C code from jni/example.c file. +Install it to your device: + +$ adb install -r bin/OpenAL-debug.apk + +And run it either manually, or with am from command-line: + +$ adb shell am start -a android.intent.action.MAIN -n net.strangesoft.kcat/.OpenAL + +Example will decode ogg file using Tremolo library and will play audio with streaming source. +Tremolo library is heavily optimized Tremor library (integer only Vorbis decoder). +It is BSD licensed: http://wss.co.uk/pinknoise/tremolo/ + +You can open DDMS to watch debug logging or any error messages if there is any. You can filter +out OpenAL error/info messages with tag "OpenAL". + +Example is using trash80 song Three/Four Robot Slojam from http://trash80.net/music +It is distributed under Creative Commons license. + +Take into consideration that Android mobile devices is not as powerful as your desktop, so do +not put on OpenAL too many work. Use low sample rate (22050 or better 11025, if not lower) data. +Also not all Android devices have hardware floting point calculations available. Many of them +will execute floating point calculations in software which is slower. + +-- +Martins Mozeiko +martins.mozeiko@gmail.com diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml new file mode 100644 index 00000000..2152e7d4 --- /dev/null +++ b/android/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/android/assets/trash80_-_three-four-robot-slojam.ogg b/android/assets/trash80_-_three-four-robot-slojam.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b9e12f1a92ab7d9413cd0f5412c185c4e79bed66 GIT binary patch literal 778094 zcwX$gbyQu=vM)Lp?hq^lch>;H9fAc25L|-=4equGt|1F|cMt9)5C|45xCVFkg}g<+ zz2AQ4j`7|(W4!z4?a`}ecUM>S?5gVOU(W$5A3mr9aKOJ3I{iP-SL_WIAaanKy_1QR z^HT>LwdOyRuDO4nB_Ne2&i^|-ae`pa)e?kcY`Mq(XKH}|M-D%XETJMq`QHAWt0tuh zuNkG@OHNJ!PHs*v14>4d_s-^Kl=dGfwXGa1*;SlAFgR1%TA676Wo3Gr0)+UF94bjE zO%Nas07Q~F%!n1HF@iq{sG?rvW=jq*^^r-AQsvP~g$efZ_7R!NHk(CA_6Ll{Y5-3R z`J`HJo#ffJ(w*~&w1ynFDPgq@$`3=1sC2MejKCJeDTeDGDwY$|)3^Y9*$BrXB3Lb- z6jm#Ks@ZWhLY#gHz-pV6p=wT*yiZi34_HpEIYGCJLqw;*+jX zVB_RM^5r55v|}u+GU>f?8B=qa%f4C-d}ST{y4S+~mt773-m2pNaKK0Y%V!1vD8`Ht zdHgZ!+K>XBOyr=DayS4C00^*g7_v3^N++}5DF|F)3Z^q1S1*@9q4GHrxmxl*`o{z~0Pr54KP;e+7KJLv z1fN0Lv5*p0+o07R@Z6?FSq#LHY)bbYY=&|CRRwH~U6esMlCUwbf+;^wqm72kC`bEbIk?@c#;Rg2^NOXIU`f(}p0GQKOZ0qLqcv_Cr|ZLeCgWfnadyR&GjYu-Fy@n$VOU|3| zK5BHxrs9HbByCu!tUkpLjIFq|3yv{UIL{yTC1ZGweeBvRPp z4I?~kLIfZe05C#wt$;x|Z9?%0AQkCY7|a0o2Jh+YV|0K;rfLaw6G!mh;GzoSmH9$D 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

((E( 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 ^{wLtOlhM`MEwCMY^r`kn`;CdFY`! z-C{Ay1!rAqAFSXIX+GNaNuViC8GU-50zF?)yI%{b9OT7KN{i;aRVXP!5@h#L4QS{4 z#xt&alR2x>WYj4-{^(An!HDZzM$zqe_uvsdIUrrS%8$6gV}L-WB2#`A6kvZF8l^Ey zDj_JTiZbJznTzsFDY~@pBT7MY$SG5-tmIQ{xp$<c?1R>n3tZMX04tc()#Zfvi-`#$6G5v+~jsoMC| zq!07G4S9__U=8(A%f3CDG!`o-``$sOt`gAjEMW{ypEy+xcEI2xr|fK2faqygP0Wwz zXm2gs(+%2ORY!T6YYy`N(E65U%EQ3enlG+evMm~)Fv!0Wze1vqmlCq1x+qNv`L@Dw z$rTXbIB4Ne-(YFZmuz1xKo%vyuS&PBwaVO!O>gp(Jr4^aS^UQ2C(C)^A0C|Rp+=t> z_;I&Gda{e=n@@2!;{Fh)Sve(#qx$&Tzi8{6vp+yp&V4CglX!wmQ3Wb%7bGbZiA{~B zog39reZa4+(MF^(qWIc44xQ}d7v8owFn5GY>sWgd+zVpV-12`R-#8JIO9yiJ=d4vI z$3%EVM-}Q1>`|{iZeQ^9MTgzZdVly3GG?Vy8m?NdJ#P|oN1M@rERTY@AcS6ap*OpZw~moAb!EaC!rezAFaVwH5d!==CSn^;$~ zs-{~y@YZiDZzt!}-}}_LDv(h$ci21^Dc(`_YIRz_KqI(|f@M|$l4ShqwFk$K*MCr! zlF5s>pG-7iRLIW(ly-@2Tl=S;$}&d#EY`F2)5Mn%w0CkWLd_N2#Ng}Bq*t=x26)g{ z0%JTs6o4p`56UR^I2bSB{Ss@Z^+euNJ1Mo!v^0(i71g_^r`XOX=V=YQYPpqDj=H;p z1kwF_5IFwxfLUIanRt@3czi+ZMZG>;(0T*@bUiJ{sqRUd>Yy?tE}hXSHK@^e=V=u4 zMbT+3&Nta??m%N*>Y6+7v6znKQG@g=J<7h|85CPL0=^e~OSL8Bb{IwaN|{#H3B{Rx z!J$1vEh}>|k1p4N+vK?OvYT_X`SI+T#@y*S$Q^lHfeGFvsod&^@NPbzX{`i0n+dG_ za(_R0I%8kjMdp61mk8+Z^4NcP=p$R%L`5&)S8r@|Q2i}NnLF|%%a2~9g6k71+$ z%LTtXerzPD)GXvFS6t$9yANvIBMd!U*XnJ0u0}+xd8@(@ZDlwovQQ!OLPgfl-1ZVq zMOLRTNUJ0N%?2Yu#N*XOw(q*KM#}C~Xh^s8LNikArcoCjFndT9I7sCz&pb^@^J%JV zu|pIT@V9nlh$7I#!^g_9DMlc(c19q3qAgGq#wUN=o;@pl8||H2I+!<}&@dx|%bTzY zq2rZr74KbT98XV(lby9sm~_u#QBAQ!rgyH}8hg6HRsz&!dB>k2rn;oT5U0WoxZn+( z)fVv5Y>=OTX;Wq|VT`*?8nek&pKO_x{$>&p+ZTCmNQiaPuT+h%wCYCMU$5bejaUwy z68GoCTYK3ij|*pb&m~h>d)dQT>7oOv zp2XN*rnzg!?P4mE^i}nQ>ZB3JS|v_Kdl|OEc=ewfVSSu#_H~>j`b%YItE+oJk$_Qo z7r^M1eCH)k`fMn49M7NP%QUn;^EXp}0r{`*a$H4%w7PGwvjhFplJNWCQU8zs#DEI+ z#m{`6KNxB2`bv`Ui&ohLG zbv)slr$b_`6uuuRi;N{$xZE15G9iA^d$+sZHGiAWV1DVfvwFuVHi)W#b|x_C`uyqb z%&&3@>E{{eAj9RxEs2+iyNcf1CHx*=31rKgsU`+=3Ur-M0l-ggB8@{!RFne)fZ*HR z_?ti~RK^@CW5!VI!@>`t9s(bqhuHb*T5nYa6ptM*g!U{PTVK(rFgN5a;42H@_jaL= zvPhztWddZl=&XaQak?;Yavq|d1FE#G`qizk=nyPea`P_d!IY6d_0=ZI;9Oc zb#Fygihh0#tqaD4J{NeU%C3gvbPoa^KfXt!(yVKv6pd*CIcS4ufV(MbzNfw2X@in} zW07ybUmg6|ZfxHMBG9)3e#1YnOLUKvLg;>*D*TdeLDrJ=C2<2AIltG6P^!+q(VG;9 z|A<^d0r)ON(i%>8x>RjOcZknlR2Z&D-8mxWDho!&?!W63%-oczw;YdP5BwSpHKQt6 zG4F%cPp%S9&lTcc9wFNtV@PZ#QGRr7qHc!`j1q@YfC!mCQJ?@Tjzs$co=e0R+4b-r zbv7iPKI)5cmbnIP6iZIOZMtYo+x@+EId(k|3tUbt$I(eHqENBX>J8PpG7*+r@~ zWoXB8o@Kr);hBZpn3K76?|E!yYzk#wiItlANE~j+7Mt_eyEg7X&WTjJyfRcXQtK-V zy1UbzaLh?Yf|L$|1O81=(>AD0iEs8zS&Hra+(N8NY};-QYRs&&M4dYF(tXuef}QBTKo5>SXP>|$+GP2TkFgxSSGcJH8kH@ZKA-(bFv#5ag2xA30pnM z>2^tptEWmxJ(>O6u3B;>!ZtIhCgN%K8O&-g$-o9c&g<1bB9%J6_P*K23-CQi?WpDKWZCfxf1zbl_~FP$QuAPcJ$6V5qa zr!YQMyXZ12Grg9Dnf8NW- zr1^9U-*~f!-xcuNFy%d9n_c#w(UYj+gN%j`f+$?|b>CRoPyU%a8*sc7ci}wIa3&oZ z&{125^%f?IuUa1;OJiPn3VfYANEv!~)I$bZhx(nA-fUK`yRu6dJ`>I2A)0nr?y|}$}U5qYrM9Uw%vr@*%@}i^`rCpyv>vwplZ8L4f3>6 z-)L@h#YNF;k^$B=tZ;InX`MTBf>m|b2OWt%QnkMv8T}Tzy29%*Drd5t(Fae@OW!j4 zDnwVkJ;<#l`B1EzU~`@&0Q8GbD$J0C202RTovvV=lod_{V4iq|;^zhDh9B+ZkLtMB- zmKfRli;~6mx3^k5IwwKmnoK5%6nX)S=(Bbh>iomYEdU5I*op}hHp%+1Cq4PDG7vo= zi1kEYT3R|bZ+yH54EK5_RRJCTS$-F4J4F#YTtd7B>zirE;%bP*&^G|J-bY*x7K#koln_JG8i~Rj&Iye zDBS&N(2=ubgcu(X==OX`FOO#Hi-(eF|AQZE)}mnN1j5>x$Lm0r3QjcjHZQ)tNz`vV zSlk8Q2K4{Nfn4e%jxZ32lc#|MkYL|Z!Q-uO>)!VD`Cj5WCn6Kk2M&Pc+52R9p77SG z&Z^{bn+qOP1}}^))AD7lK{JiQBd6m7uwD)j9%x@?x5JZ8x%EWbWVcY6p=*{Elyds^mCV!+etBfDCM0sDu$xYPkpD1r(_u=?e z30AjBLrY-ly?=gV?ZGlcm1JeMKzWNR--FKxi)uZ=-DY$o!KPEKe-^kLji9@V=&8k;pjr5qTat5@ zTb46A(cn#pb8r7pj4GsceCzBk-b(E0!jfdB(Cw{){m1F=f=nD$Q}@FMRrrz1F=tJc z!_ND%&#PC90!MqE?N`O?9p3Le1voHzYx)glUt%TIl)l9&0whds9|)_xIzRC0zSHiC zr4bF*?(7>r-ri#FHdtQBA>ZtD$hUrqAVGX7aB9}Y+3C3@dbI1aC9+GZL0OVwNtX6u zx$mfpYNxD9;Cf(rS6H|2;8>5Ta9H~BP$lWGp6}{0FH`2c<4P$KlkU4^*LUPX*23J~ zM4m1)K;=YafEt!yQ-}MKnGod>ZLgGK^m}xnmm9nw+tx$()q8YCs675(B?%qV?R8fu z?ELcBKWO=*$L$29_3GS_ulnSq67qR>LgLNq$@gxg0JC6}L`zPm5X3w?PD+BkThv>i zo>emNHNoi?nxf2o9@@{pz6u!KZ+p{|l~>`*#cCrW$J}Etw35;S(YP@;u!wK~+9CnQ zIP{`wnP=dFRlApEu;p6cMwesehpYm{lLg*AMxW~ zp%xZ9Ys6q~5#%0WFk$sidrGqNlhVN@5=%j;|FSd?&rJV7AZPPd5-gE$RKYbEmQXXy z9Cp@SRFdI*5RsYW<`;d@QA{e{?#>>o^?xyh*8gG%yZ_q%EZ>wHS23paz26NmY^>VG!!wIFI8~PGiLCV+< z!at)`^*l5$S;arPQ@Z;cSTxTvrwVwdKbWsnPS15{`5;A8HNdptKcs+KpQBD2yTskg z6FyKb=hHpzhU3x!EFY5Hw|PZz9r>->D>`C7Uv4$Bv$d!9U}wej8~uygiCLR2RBWJE zEQeJS`nCI8ilw5CYgP_}U!-I!p^0>J9fVeFOnH$6`J2mTwDmRKlwd#gX~@FK)0H=P zZ&qt$QE%~TqB6i5etq8qYXiA###RVRg(la;Bq#WU^m%2_chWnssXqJ8uLeS*H$Ny& z3pb|ITbcB(w!6&gEcmQF>FVWmB|Z(bpETB}-@!w@{U}!jxZ09QA~iV%?i(E=cT~(l zyG^=h9VW=0^7{c5(0=Rq+|70a<;u9LcdhU`)uci)n({T6J}55 zFsmRM*{{9GQDwTBKVwfA?ohb<|vdUjW^i2v7XXSQ@xA8kLv zuYN~1=p!-nSv?6X^S4tT1)`_%r^#x`|A-eZv2*%IQcqY}evG_xc(*Dj`1eb+r(ZOe zt6R(if$RB;4dZ^Le)?~CEqn*`xXej+#pM!Fii0QJ1|2muGLj1VOxm@9y`_+9&Us4L zSTp?g%gT|u+|#)F40(OYFbmO}+X z!;x?E|7Nq%{o5c4A4@;Ko2+rhO;YfpA1acVv=8!kH$OXjF865bUw7VpHz~`*n`=*G ztSk7@qkz+1+5K~3wl1nxN9<1RLWnS-)`LN1)M7xRjgCczUyYP*siO$X3i|Y0FrlK& z$}`t9=zIeGF|lUq=+D;&wL=|L9AKlCRtfFB*Wg^uKdGN6#Bm!mf(guwU8V!7 zgqnFq-w~xaT%$=cPS>v5^-e?OCeov|<|*RB?svy~Kl6_t7fC#lJllqpyw9RQA3aM~ zU&#GrxvoUj2!b**2%L@CyK#-R2(X11(-D$ie4l<57SeoZ^Y@?cUy}C<=S`>~u_$cs zEz`wEKvi;h27iVAVPwFxK3k=f@#gChfBYeg6}K1NS6px1Z!G@(n7=k9tyU-UgY<&y zJ+*(RNT*OIXtyg+tWVd)+9D{XhK|pXC8e(0YH&#HyO8(ydyGs>5@Up5-z2>9cBfDN z@Opl4-(~7d@RhstXMfMv_t&xAReX!HI_mx66@>@tX#yY=GmYZ2kGM^nT+U^QHKPFG zEV(%1{hH3FeX2iO0v<==ku^LRxR9nxm^u0csWbOVnKOezhlErK327Vk(~U7K4Ru(k%1a6h(WH11{?7moona^VHU zzf8)^T@Fs0_PbGlhY0Z?-gjDh5sYFTfeRK|{JAK##r3&c&Cb6$yb3O_=horDT9^kB zO^F4i0pBL`<6Oj)mL^tI1P&ew>6I+0a>imNg>$(-?>#?myoNTUqtAEfBPX9hS5MD} zPjV)(_Vl<|Kv!=)#p-eCeGbIJ>Bj+lqW{&C%V26 zJlMMH3jZ{n6&_{xN!BeM!gOfHTCTVxa9ufv&nkg?D5Qk~KE{ZdoGeFZxcip3wcNMQ zo%giNxV~*;QvFG=9klT~H$Y@BH#fA3m68f2N6eY51D$|_DuXObCj8u!Q@)~Rl)-D~ zRpE38f44&0rnvuB5O))_vi4pmE_#!Kqd84>@TNaG!WXKTAF5{EcV)Y|EU^A0)YaIw zK3RP5-MBXJs7rH=0@jUKF1Mh~ZpMc7IxT%Qq7LTzS8Q`*YOaslX0V&kz#sklsyu_0 zafFOkbwcCp=>H??EyJ2{pf>J-C@LxlNQX$bw6uuCKtQ@dq+>%m#s&(4bmvIvmTo3U z*MQM6L^?+gHsbw1@AbUz^XdM2KAr2nf7iLr{kZ~Wslxct##O^oKbftQkFS9q!1so# zXyE~XRG#2YRxB&m?U*sQtW1s1AVGwB6QbiNF`9rK;n(u%O!*|)R3(*gQh%-TCr3Oc zWyVkcZBh5y?OafN%c171#7}g#SsPnnZ!SD`4eNMtF$FJxd)QFg$&%nlq>tLCJ=Vb^ z;0S8^rVf&2Han>nQlnZ9+V}UEK8Q~B5y((d=g7N*O`8oZ#D~cuPQ4G zX&Bl)onu{eMrpln+EEI`Hp^wqE28wS*6==gm15Yf_D`%%&JuQWv<4Q^PE{xsX~OE*(h!zHDMtK()#Xhg?kKKXBjx8i)qOnx6TJ-s z0C4u;{v;Pb>RP=kedS~O^vLJsPJMm-UG@0gG^%nm3xpQ}MHF(5Py3xs4L-XXzi?e4 zmVew+U72u&kJOU*H&EKg%{fviCU(ZqliK>vMC|)*(N<0JwDahU0Ml8&nfyAA`8)Mq zDYyk2^WOGR!VaV~!;!1HgN=EzHII{p02V2tO7OAt3xu_&=p(=TkrV)c|Fq<>W2&!D zKt56qZ8}}HN1AChr;Sv8$QS;+&RUHyWsvhIzU?}~z1+#V$oa;sqpHQ-zN2;budnJw zg+WzOMC-{{6}H*4k~@GLK1&@2=`ZF!a;3D%O$qDjta}T^*Nwch3xb zXboCXGpm6j%?&LJp7jQicrUt7<^o2$*S&3jg?fCNB&fazcnxpgx<`DZ_SDFLJ=L`i zK%Ew=hF8E9F9U@zEgtq=ZUTFsEB6}5T&Bod##;Y=a8c9oN}BKILrf;b)bQ*urid56*|HizyYU$@_tnjQwJfLfm^~Ym^Z`o4KFd zQxB6@=y$Rg2@13(k8X`ohZBaV-y@$O@g#al;KB|4)Q>BBY>k!QEjCU`xH|P@ zsm%gyU9EIiJ_N}^?zw2>>SqW%22@KlaJq9egp)<`wK{Cx8B1`d+(l@jeIYk{!IgWH zZjR`rO_(0CIHqVP+}6BRw6Mr;Ck-et`e9VL!1x?|7#Mlg{w~2Fxng=;?VY@HWmt$! z&f5fs#XnY!3+P4dnX=9ix|D>260s6A*l{`daqS-|)lC{{Y<5gQz!97Rh82thR zeAZlWbH{DZ;qaT2{b!|y9dO&w>x|bfn(7j!fiG9W736(gAwG}6MS z=O~=om^I;~JR3y@T1aR$3m?9o6=$$SiBZ?x0Tv#MQ2;&$89Qzh0D_oJ#=c-;j}-5J zxvwr!UZ$2;IE~)fy)8(9+4oup@}TG?o>F7cm`c9znO=2!e^~qbn+A&z(ABW84c7e> zD!Q}B4eEX=Gh>Ak#%n}q75URBh=^3x*`ccq*IW9Qldi57+1gZ4p;JRN? z8h4@Y&V2NP!&T3i;OvW+5QW_S{A!>)tCB@^b-Ta(!;({m+=00z@!Y8>{vc05wZ+DR zG`EHE#}lHN6#JA?E3TiIyQF#}o_h|m{a|7jx4Hk;pO)-pVivai@2sXo?awxCn~>EZ zZhNmA{uG~PFcGXxR5js^)C-IFAhz$8yj=ZZiXUY=vE9W&RXoKFQm1Nr{b66l<}l2b zTN_Bb*sIDgko@U;Mdaj#Jo3b#GtMBlj=8)ZxpJ0aCF9P5Dtr6KYq~MHq(X=2^6@zJ z*(@QAmrqZI3f>S+a^-uUDgCQPV!WHZl0iH4JZtskns<8Pjy;FSqa~nO`AF}>&)NW3 zx#vuC%s?NN1i7l zKWD(T$9|?cMbS<8*0Uxn;qNW2kCgG66IaFIXHG$9dp74Y?(xwXuPIc5!LPwWkkON%^ZIR&(nHDNvPF5G%*! z;}x)Q4*yncZJv#oc?T6!#)EDtV*=bmyjAa3bC3&sa@<;Nk_8M*(4~hj)2jes)3ook z$7x?`e@ZTLq)e)&e9Tqp=TI$0pxR6&@La#@YiZtgtV2h0^fNA>fr6f?9sfe(teB4Q&0jcg%6-tOuWl>j@Apa1&yPG=zuSDUg-89T#=TAbLh3jE)5PW6EH zL{Us}8}bUfcbJgLJY3o#)BC2;jSbXx(E^$*j}b~J(5MITu>zggfOlR|q9EILWFU8r zM=>qzN^9S#GL{Z<+ zM%AsSJ9QsS-H)yW6Kj9uz$BVw5Gi&=Ep9l>@jLrs`Rz9=H92@u3MddYVVK}4>L{jW z>zN+CB(&R7Fv*>t-0BD8cGqys`ZR#tnW#U7h-wrHewIRKF*$~|iPyPbOw3L6s4NO4 z)^{yD#hY%e2yeYaBO`JJrKb`>{+Mk;mJs{V&~JZj!P8A@s7uGY29G>}~cl@}TMxPezUx*&8037Eo z_;R+VsyNP5J7yvz)H990&*c~Ch5p-AX@E7UZp6Rx@O6B{mSvF&yeoHE%DwSF=%E`j zBt)z0=@8@sT9h`$0ECwWCXcKn&nnBxJVj!O9d9k2g_b44dc~`jzcn)D;brHoWLUHo zarEbHIf`2?7M`-vHFR|i#0L^J-M#)~f7sASPSwD7D;<;mT-s|bE?VHq$v7nw5mxS# zbg_44x>33E&xi|?!pNUlEwz|Sbl%G&LpxBr4|e>2)tRCH2Pz!?)95vV;+NmTeu6#x z^S=jw4~YnYWgB?;=l}F{1-rYYM+SdS_k~&fzmBTsfzW*bKt9iW3Z|;QVx^xfk`42= z7&wQmapqBTqkNEpROXD&`lbb504ZjNF7kWC7B`I>D)~R}dFU;k&4Ge!FO(Fo-5o{L z{D7au=Nb8151PndOq`(>yX@8>8x<|s=)nvwK}X;g=$l@XIvwSekrKSNr~jQJ>GMvK zCzJq&I1(GxJOHuGFt_1`*;xA7Rjt)k>k1vR4+w4^Z@Ej`l3i}^+&A8R2OOZkbp*R6 zcs8X#z1ig+mc42VO;cy@Af;Ag^+nqGoQ%6=_hS*|> z)xNB3a<2lebuCjoVGuz-e0hU57L_%S_<8Y@=v=tY1b((ZyjmhXV~yu;T-Zfssi)Sy zf#Q%JEw`c*kfef}j)TU=8D~bvz$5(YR?g?5_(nY1zsY80FV$Sc=4im;fKnyJx#QXl zyu7g#bv`~GEQDrBtWxv|7cWQnZ}fZ#%X!^u`$}R%;8BP)n@*F+%Z@+4>r;yUc|wnt zcn}xjWss>;tC3T~#b*eQog?d;>qYMB1ExV|$IPXf8#?|oVUa{nySq;@Zet>H5@o>r zxyYv-P4%p|p$~1w`tr6F!uno<6fcA$*(yYmMe70b_*k~9o8600$Ia8pwF9Vi$T>Gkz1r2ow0HV z->}2pRm*gGoTuG;r|=sx<(bfUq3+JWgHEyAQ^Q;2dbP{4sdLtp{5;~qz^h;Ul36K4 zOZsJIx3241&~j7W3r78oY_07Q^@{8l?zZ^&QH)Hh&Dq~Ru(yTH^R4|)(!}|dv?j?* zDhYO84n1a@9~!Jb?4_}|TPSg(DLeEt`~)2CtaK z9PzC?`7uI_|F$3bj3$aLlP*LpL7viNuwGV}d5|PJJeNx!wEgt9*S+3IPrqu(#V0b5 z{rmR*9mxtjkJHM3#hf+gjh}nl@YqGM7gRi8=yo`-u?@2^V+b2+v>e8)55+EeFneSd zmOFzcQ``@HC7Oo?Ubq`5{J2nE_$2p=J|fi1k?SQ&v48d4P;a|>aEQ6Kh24a-t5QHB z=wo3KvBD7(Cgx~p?Qfpb#Y%kpp(eh!^k^)7PPx804f z<#oTE8XP>^hwYL{2D%B?nd{jvLL3gek<+M)#v&t}-&7T|m_W+(g9n`i#p;hU2s4=A zp02kKaw6A{J#|BFUJd!`)VL!%QNc^QIxGR46;1*cViR3zZUw^-T~QVAPO&V9&(zsF z>POkb>TF!U3I23YiUMA*F3x@R%J`sP9)3GDs3aHMO+5D73hQ4<++|zaIDyCha%8*;c3iBa`RmlTI1Y4@m?nMWK z726HrpK9jP=JUl$TLMnr`HbaSK6Aar@}8%Ync3MJU-c{w8@R8=!p;TO`>21*%hMY? z!99Hc8~-TCZtGHt`I!f*NcYDk-L03dISJ+Pr=%orp=fxOnSl>3k%(e?RQ$iF-c{Yz z=Cba1$~y2nTa={_Mt!WF=)Vb`h&An0E)GT9C*7+$Mc`ja z5)ZzjIS6C-dk_x&lle|s%}wl~qNe{c>Rk|x8PgZ_CsstCo}pb9Kizw~n&&qoM0$@h zJRU{?>zvKS{NhPZOO8=L`K)Z*T3oTKCnqRllyNg#*alzUU4#2d?3&C5u99Z<$qrs{ zB)8+5tb_v6+D#r*{Jmxb6tTuOPRDM{SHNfCPK9$(qp&W>lGPc4ixRNo*41oWPjExr zO_|?$`DFlf*Ho+Q8+%Ay%tL+~U>f}N)9V_S#>%dzxnGV1g~Oo(OV!V))u=67%J@oM z3(J6^h5VzK>?(SUcjUQ(p|DsKsrbT`4L0k#!oKom8|&jwdVNOxR#(l0wE4l4@xXqZ zGvi2L?+>^T)DZJh>eu?9aTBS=+o?ATpXb6q{oW-#KT~Dcr>-{D(fMvB{Ho!JoQrz6 zGQm@$XDj4C$KMjnFsD0&b=H=-bT^Tc4$4d^_d#|G+ZePCcKBR9iGREcs3!A-$Qy50AG@+!7p6{W^J3S0$$xG->@;0!#Pm znj~etr>$GYJV~EHHR}y~9w8Oqq91_f6Rf{JI;mMmLTVWIo-gnqtna=IKelS9tSr#0 zKVr#yB9j|^cUGgn4Q)PoyLOD9<-NRPi^YHbi3#apf!lYi`;QF=z|Jqk>{k%DDcV1_ z*k!RnZ)J;x*_;U`t~sR^`H%-sO;kv)X7f37xS*tn7LX4%KJ$^zQ)(XhbLx+0R^#Fo z`crk)OGraQXx&cj zye82959#R2n+6@fgJ`N|LGqf0oM+OeH@ilb&LZVF3C<$KUAmUVYxbfS><<-6=jkSY z6MCvkXPJ8@ZM&i-qQAi+C{S};?^8cC%0Iwak2`0F`Gbt1XDrVlY0|He**h^~vj|=oz{u&aF)}7K?^o+@8z3E?}t_gKqGK zay70+ou!6P5qES1W*TCD#(oC${k!gLlu7fwtV1>SZR2P5n{N-0e*@2poG}cY#ea2YHF{aob6ZC_8C!+E=YkBlvYelcv)pPR)@~ML z<%0{XTYyLD7TxRPStDrEI9fgY7jNB)>*cePGBxG{`yWWQNs6mTdkf99j1=f@ZTnJ- zpmwnI8k>Fl4hx#2 z?1b9-y4x+Fo!y%+VD#DZKgBZZoHRD&^@}}LMK03S5FTYN=BEdfonl#bO<}u2vW{&P z#V%m8tjl>RM#h6es~B&`P8sPlBR{)jhM&Mv2dSxFqN1Z{UaV-k%>!kiQWY!6ewqfc z08&w@bCXGrvar+T?sM~lzX={azUQeV4DDp&PT{;Y>Zuq1bMx5%%45oV)oK;#V7g-k zNv!keJ7zFV%&rP|<2iWfhThDaejQspm{Bpwp@A?_4t3e|QV1>J*_$)Y63?LZC>6>t zaEz`0!$OxB%0Y_VDLM9@)T3MU)6|qg?)6oz2Jx9Z$>e?Xo69Ejt9c3_N^?{8rML3> z`=GhH6Jvq$vN9b;J|=_XUGc}&9|Wo=5Hmkn`YRGUeZ6>~?8K*bZ(OAQC>|_QgIg`B zRukkVC6SUKB&U|6`2K)cd^UxC4AzSHMap4{-}1T3;Mq^M*l#HRY+9&Q;Fsl>V^tK+3{-}I+F zht#FrvafdNXlxE|1!KohtD*4ELapC|KjUmS{c{YT%-a>t#7A%3=RM!zVGj|SIR@>y z4jhqNcQkeRs&;?mk=s}AdH|pZg*>CB1TexBK%=IwY8tEc_4OTjey(EkZ5QA$29rvR zl$>fyKGWaL4!hY9!=G2BXSg4Fsawk6Vfwk;D-;3>>1wWy2s-RNtxnE#s(3!zh)o?9OY#u`~_=` zE;Txp0!*Jd=C#Z!RCuFFmen_M1T|7q)v_nO@%lblVcd5$j-;KLbJYkYJ;=NThraD0 zv-;Uq`=-V(jh&p>0;dZvt&dKp?aO@UYeV?W*Gb(=}B+-4uED7|Qa2!|sF>4y8rE8j21+_gLV zRO03K&=8Eww8Vt#Kj>^m4dRLH2$c(V@qYPpPi?V(m{R3y(V+CzDW|P80XMv@i}w_y zSzsqSLkq#|&m^c3=0K{~}8WvSx;^FF?0gDPtHL?nTrbPt9LQo}nPm7l# zeeLXYras_qFkr!yo11~#!<QyJf7{CGvKgmRWBs5O>1a^LRGD~%e1;cL%WT|M0T&hc=Gv* zP8)59q5#u^mEk-$*8z0*@eU!{*>eT}h|~io7?S`Pu8H4NFUF$-X$S8&W@eU`@jQK~ zFf(hoS0$ZD%a1SdPCYqqy>^#E0GVAAL?;lA>muaqydWtngm(1#BtJf#IBlZ_q_t(n zA6i`DnzueD8hn}1=Aj}l{$cS|ZdC=`$;`9A(ANU<5o2DSmB4M2h>zYm{+TsQfL8aM z0|1Cy6czXZzyAIv05rOyY~06MG6|m@iCTn4#bXCMB)}cJH}Yq5&q6OwZg=LT_J-xv zJ>Z=!_;!jrC3i;`(}czoo?le+WlOI8wqiE)#Kww>FAwOzaf?-zTwi#S>T`S)yCdhk zM%F5(bX)7%4jD&VtNA3?eHEmQ%&F>`%cd+s{Cx=h3*S>&AjCti`5N7U^u~ZOSmQC119nfXA0svlYyGySn{d zZJpQNU{@Slq^%Yb$#gVL zI=)|3{3R;{4_jp^K5b8KaGZH~!MUUI4EV?psfrnX_`$w>ZJ@@D8xSBpq7>^wOwxIO z{t!b^K=Zv^Qvj=VyRR{4y5`-vQtvDe7Q<#ZSXvzYPq&K%S*GzL_2RN9 zPTv95HM`oVPv5$L!qjTkJDDB-B4VFOJtFXI`7J)UJXSkGk63$MtcQ3nzo)WOjW%xd>)mCkoO=L-LKN>sCX!I|t+Pq{n zZp2;Tjy7JmnWd;psSE4E5$xhi%a&QK5Ewo?yA|*3oNstFawofbmu(5lLW>dx3=UY^ z*r~`RZkZb4g4gJwnJ%o#1_)c#bRQ<&!c7>o#~CJm8-Q_dO17*Dyx5exGmKtf**f+u zW8D13XFDl0x&B4cMGGzkvNK3jurm_}?b`^)XoS%wh(_7g1GzOQ4|8x)+_RjmvK&GK z^?6N>;DllH%}(aGI7tG}VgAf4CF(ZN*V3KS)YAxcn5%v0nLhNRbC>scME@iaUZblg*E@{ks zK7-p_0!}S~^6fN{1trG)lF4|~>K!_u^QsV{AuKECIr=+N&D8S;;h}>5H|hZ)M?yXL zzITZj%~R-2EXT1ub!u2PMfr2}wR>>GWtIMfUiUDC_zEr^1gKU9wBSK*?L+f|F}6SJ z%vHcc!BVo`I(?W^-6%goRFds@$U}Ma!T5Nf2(W)iLId@_fY$l;%$cWSM)_p~n;$T1 zbToit0pil2tj*;a#R&T{3t$_sKAc)M(u+C-t{cXNz!gbbAyrY?Z&%Ow0ga-JpM z-Whw*FUWmBK6=VJYEtI{Ve?uXRJH#c^>2(^oW@DHV8(kp`YUg=3!C1ms^8{J+F=)M zeZTP9c=UPqw{m52VD8@~&iQbS=3d~2P67=Q4vm2En+&|*n6aPG$O z5qBr?u)dt~k;hMZ+6_9mteWp0{g`VMDdQu#%|54Ik0-g6~=xhHPwk)%rmHu7n&7W+S#%;C?Pz6%}Mz3R`x9Q!nvR`z+;-ZMT~U6coUB`_Gh14T9 z{XL{?{~|7C!&%c?kNS=|ZxoEJ+PEFhTHe`Qy>{5^w(r37?$?nv?7uh&fvHU2=H>2O z4QBYR%dzKk%k@HIK|T->xGu z{ZNR4B_8CAo;S4a1}+9dV=cAdXB{~lr@+OeRFK+DSHUy;b9ecghK3s-vxDZvaOX8> z|FIV?d*NDQA?L#H&}G|mZTZx-Qj_FGZbu}G3!5MJ;~zX`uU`kEtRE+-y!goEH6Sff z`COuCWoWFDFWp@3#&c-$#3jeyUy9!fEoj}O$l%jBx?IBv;xFF2qU5RaAOfmSN>Yg^ z+V?xGnGhvc&$6?52n@SOB`$O-`JGgyYUMN_wxZF%>`tK=cX8QknQjbw&%}NN5A&Yhs<* z7x*$eLho4#t=g_uJZ1PT@;B$}Lt%$&f@gYG0$KkV7D-E~tek7l%mbHhY%K5pulp!u~y3d{N z0(-WzuRG}f*-oXxUplg#w&r)pkR1z}%tJgBA~@7qfs!A=Hh0%5lXRmYzk1tL%>cI~ zY^wPLfZn&ke2;@3$>%;6SA}fDOUnqjDjE zp{X3n{ynqH?!E_gHm_uuq<)@?x`ZC z%kxd70gVpzS@Z){!_4q;{Ixui*RQy{6$O;nv?`O@TX>YZp0aTb+y^|4u}-{o+t2Ud zAalHDVaiGbVDR*=j(!eIeA{~=KmH)ES%`mb{iRQ8g`I(<*g?toiUVWJgS+=rH4|&% z7cHK+7j+N(nj0=1-^mmogm+rz<)nFyXuWP4q6H8essnn2&FOZ{4yhp&?;I?@rOY}j zk$G|Q>#M@Uc)jvjHXi3<6kdA zUZtB-zUy~gZdGuG#k;2ue?W47DJYp3EfD5@OL|QlAeo_# z0Dlv(ZyG-ndTJ}`8BB+L@fkZP>VCR_Ds=`lhdv+UXfFY;gyxsZ9UAuD#z8XW>GW3( zPoT5s9rvS_X1iJ@Q1W-L4s^8~>m;xk%W@6X%@OkxXL-9)gGozg4IsSU1LP0tgVnE9 zff7q*!upu&<3j?T;*yqtNeKCf;-U&=MAQ=(t%poaobNAxe(78<613aj&B-Z;N#{(b zQfq=4WmN-ltEc_*2v59v<01sVV`6FT(PYxK!++4WiJ8B_O6hDBf8 z`}9(Ok?npz;3bab4bxt0MOj&r8Iv9-C-u$wUc<9ne0xCPio7#^i&;);UdDFQ>kf*; z;&8=in>tC;6=pL>xvPbn;4s+@!_&lFl*W@UhK9_JbB8DGu9um1sld~^SI%vvVf`!g z#pKH~MjbveKRxR@Ca$x8q)`%UM$ynnupGbkHP62XwL0$%UYIC?zW)0ZZPG&r08CM7 zivnow-*%&04rYdXXD1HY?{=!{qSpUOmzSxLeHG#724S_Tye^XpM*TUwaTW9nZEw=g zFh}On)cu5f zQG`fVn4GkD)yhSzO({S&mRp+N4Ipf%Ni5nFjR*iQKD(On00{5j62D;{8oniW4PZ?_ znVePv8|Z6j2>#|AD>j}Lvc!Ck5k0#r+0%QbxTwRh>tTO=gt2DRTPQ;&X}VphH5M z3oUAj@r3hAC_fmFWD>yR@2=PkZWa<$eD^F0&I3469Q}~04{B?SDw<=z17I$S;ZAD zJ_+qN*PW8Z5XkYF9Z!yoQO;&ypnB%WAFre17EEQ22E|hII|MT5_-Q$)^uhLgF z4kIqpFcPB;jnU=BgoV5p(hOHqw#DAB;m^$JS%C@yO{P2Ep&nk|Hbtyw+a^MGDhAde ztnr9C3C;ZqPF4}GDZ7a7!}9aF2gRrJD4~_&oD~$<#qD4j^|H=Xg1`h~lWtA-jH4Z* zXP^@_{s@u(*C0%bFW-{(g+s5`>$%|_VSVt-P~0d?%S^GsMbjKV~Z*+*TyHps4uuHuYV#|^12 zT~R~TOV&=t)VDdA(9_Cg-MOTnYrtLbuURA|`{G?~1Xo zMDY?j*(h)Tmp`7f&eX3&52P-l@pB&i66AueQtl86VU)vsVEYfG8diVWHoq8SDm_Co^6 z;6i0#dhZqY+Y%cmXFV>_mwI$};|x{%87@3a!|De5El%{~hxvCmXQUos)Qp}CEjxSA zR&4yCrMIjIao);;_`bYKZ06$tS*m3uQS6q%FZzu8b4vk_?Z0M=K4e{H6-z9aWL{Kw z@zaN{VX^UtChhJB7t4y4qNV{*o`C2+o9t6f2Sevq6SLfO4RcSN3IH%u-S>p5RDN|5 zWSI{#hqiA>=a^%&&9dV5Oa5mdTk^WruSQw7pBe9@ti-1WT?5zLr$O-xjhf?5C{I}b z&SC30?St)$j@7=YhXT1MKvVNKDjYe@-zt^1gu6nx#^U=IJ1c(+;S$bNU{mcrUm(yn z&4G*jrz53rAU9y4tcj3)ClwAc?hi}Hg8@bYQ5Zi8Zl9P{Jj(O->L2&>lAF!Oa>s_t5n^5=iLS9$}EaM4@)o43%w zWf|j;tJZY4a98%4gesf`h=Ezj$>xW0~Hz7dBxo6iQS zJ=;4^waB=riH)sCxlZYZ?cLKz2%R5bWUZmQDLp_~Uv+BkddsxqdS))|mlw}Nin07& z?)DsQHFxsVTGbdKyj2berLps@O2=q$6py_a+`` zykcJ^k_B803Au?zK%+3%7tt4JwC<@p=bPiKJ13FNO#Gy#DwK4SEoy?rw=K>!30xA&ea)3Ph;9gHs|Vu@34R z;{~(}jkD=jKB{&mU7{);@gObPo9m7MX?Gk^;KCD7m@~hn$+_juuSV|xbur?~l;|}; zYq_4q=eH$nc3EudfRC#tebO}Yw_kf=hyOD*J=Vwj`&d~frK^RHmt`4M#?EE|O*5|M zv=F)4Di_GsM3qg$M<3#<9rG{n{pXhmH_Y0zNZs>)DhwXN*GFOW36PBU4_0@Zund#7xu1>-;JP? zmrds$;Dudyf;!;w(I5EpB6!M*$XR8XFuOQG#!fkOZ5gxFY3WG5JTgWd*ic~r&#nh% z2Q*ElSUhFV$chyeJtPJEf=tt7??0un-I2wAXDHWK3*h11pqBziy!-gmlItA&%G^qG z#T4%O(7*0R5%V-m%3+whN1B?n_CaUTHzK)6#Yq5w!pSXD9RRrHsAq=yj?hb;+&`_! z?-e-=C@(YHp$f@v!p5F+liW08b@!&uv9{*6s4*W`Rg(_CpF>zu{TtINv%3nW6m~qPGXEB2@Fy=F_aTLrlZy#V*mAee)VweJQSv9D`)~$ux_roc$QAOY=_n79f& zJN!re0DCML$EeOQ8?6rD4k@$fRWE(PW+44va{9e97Xg)g1bD!4%lcY|2m>~YlZRdD~9TkbSoaEuvxMq z(zB?sP$X#mM6bq+lou0bD!+?P^K`MmM*O z36h-HHFNSbBBcYD9=8}k;2-Gi-l5jaM{Mkbwv6oh%~Xow-%UFAW$uiOoB1dFAVuDO1)9$(-dI3-3 z)Vns~i^cac--$qrD$<$0XV+O+Xsqm=?cUm&6>qgaGmM-Wp%`850QO5LL&x`f zMrWxA#8A`Q~(q_oIk@7P4NAVfTl(&KllDc=7BmGF+_4%e6MqV7Nu>!RA$XBXG zYn~pjMH|+%t1w;9WaP+lilLT0;InN7)>*oXT^FO(=H8ebUHXpm6nNo>DgS5Xa;Mc5 zpKsbjs2#ofuLWw-6#c@(L%*aX6?|mt0XsBr2}Lc9vBP@?ir-OZ%eX9se|-GR?c~=w z6VYR;$-sek>re;SQ9}oDTzOfUUJ;{p`UlU%8|^#T`d>xy!s4?Ik0>pz7QvnN_|!=_ zJYh1ZHRH2Bs|UCz+F7jPyIA`1HT9{X{)oGk7z5Nt1U)SGaX0#%$nqQXM%3$qaajb2fDbbi3YCjGPI+}1rh?NVUXdf$G@g*jCAMfgAPLx2SdWi9}4 zw448s67bh>ZOt)&xfu#AFC*Wkti+k4bP>J;>tIt z;p^vnak04Du-~eT5ma`CS!_d|O;5J@8Ve4WRg_6pkNveJreAl* zU%lH8zTUoNCS`KKqpXDcIS-Nf?!a}w0x@hpwcc4r22ui^azoMpuedH_Z25=F7<{T{p&2R)h}I0m|2g&yRE3ZBGS0( zuWoSBQ^%Ywc(O!8Mn1RW#`~5q{K$rF;%KbgL6FTwSlvpss7C0$Gii4?nlMZje@Q2~ zO;CkSA=GhPlE;XT<#08zIf{jd4pniHE9HD#`ty*GjOXgnQPo}DH8>*L$xr2qF4>n< zf=0&1Lr}m)!eP>jRmnHKI5#6D!u^(2O0M(POm_4^Tanw@8E##$-aSx=S@ZOd0$85Z zPiJ~Diwy+N%-lL(Vq4%ywJl&fMsBU6vwP6x`Jln(sCc&2;n%Uuh%qOYI?mIZyM529 zHS~JmHNj$|2Aef7j?Eb2w1_B`w$Viefy;>Y$Bsm~nbHIH2AXbBJ^bgRxOpq7iPIKV z4{zg4XXn&|;QcZip;*HhkL-RgChsKAA-T#YbZM<3?>F_L-nxTSDy_q3n@?RDoL5Jq^P8VH(N74_n}CEL@C$Ff${J2e;0Z;N0W#V| z8wjJ`vbYWFiM{^zpp+Rb7)Aa+%Ksj62(wr@fgRqs;xg$H1OZRX48b3-}p|t>(msTkX;g zVQz0Og&NJuCbea%MJHKg+gx?{C0yJMMBGRR|Gvhpg=XMx8sX|q=KVDEf?R-XXHNsx z@JT)LHejJ-^mjndth-inw?mMhfqrt4Hbag;AT*0{|NG+=lT3~4TOadwEaa{`^)P3k zvHT#**D*L7nKQ9}pf&R=xLmeP!DE5J{;zYVi?_PAa32lzhwi~N`TmtGFb@l(_cP{q z#wVy!S0%ctECoHahzvu_*|cKY8TcDnT1V1Wi;MA1D%=0|Zvq%!{Qp$K`9HM}aMxf? zip@23cZcMqW+oRKf_+nd{D@4ZvH>%tJ_;2A>)Tg3hrpITcR>_bETk)OG->vy^u3;*iVLs*~T_0z@@^W#d zCdB;;_c&3<9@qCl4``|r$Yg(C9(odX?um5g0(xI%?1>No0O6M7{xSc~bw1~iAd|{@ zK%Ajw;O+J)#6j^?H=`@8tg*FRsi3f`1LAasTJ~92_$O*X=G_#S>(hsq|G1RmHKXGx zc|U|YxFi&{d@W!Q*lIM1 z7~fKCEFpF6C75Y*R{cZ3ce#9@g`1q~h$M!a$^IOsc0K+s60z={URB1k`Ah!}bgO*r z?3#0pznDq(&IzSfJ{o+w)^1PTp}J{N*OYnbcE!u{1?E=Ik=_YCZ%cG9(?o`QxsAGF z`0Q~|coEP>ewx1S?UG7fg0w+0!Xs4UR%1KX)PS#?kGEA4twNTVA-gTDNz5{H&Scyx zc&04T^vW0t)--b?a1l%XU0ozG+TkaA=->UXW>r`piYk%Y$?m`eifU=NKoeeop=eI5 zwZBVLcj}e~Bvx(6o*?7NvYuwd8=prhdGMi^_g@j` zWaD9K%qGoPK3#psZ@pX29awPF^0LgB9L9wBMv!ar@AAoCl~c=V+Zy8`7YKU#+VgqG zu!4M`sG$dN#qy3~IV}g0n51^!-VllGr>-|I)JryhJI@)%ft4+}*r%oG;*{XsnvmkE z{P=HICnxvMOSkjs{nIbJEhh#lWrAY0t;`X^oXPQJzKdei0dW9}k^hINvxzbH(+--%bpwL$han~RB|e$z)`-2*m%(Eec%jyO~}T@FHr?<%Wrhc=%x?K zc3x4%?jyC-60y;Lo~e2jK6LoyO6H%bOiS>m?5yo<*31}@j>qm|#}iDc_9{8=O}Ul+ z&oJfpYew3xol{=%*9B%5_E>>PL7N$B!1YtY%OiX_&K&YD@wS!C#gkQ>U*tq@4gnSY zSRCMXUU&j!FEs=9J+xZ)8O5bg3(I%jVku=mORLsCF1o8MMVbI_5I`@MmZnQ1W zMeg5Mu$}Hvo`lXCHhLNP&tJ`_{;~dz>n9xYD*n?ocH~j^`=^r{y!eye9x?#i*fGW@ zKgX~^lODklywJLg^KlrVu9;Eg!R~Jbl9+@yFw*ICS^GIEE8CGGSw>YyfKjvsl+gHV zi_M$1mPEPd5Y)q@SkzzQ@ASb>+}Ax3{oA7BhM8rVV7pn1(*vaQrO(pkNo8liqGY*6 zp!z3-S&`_9^BeUv;#<9@YP{P5z~2Z&rRy4()#E<>I56A)*Xr+Nhy*}2HXZQ6sPNTS zL%>`6l@CWgV@N|%dmWbJ>e znfnLE`RKqM)mly%u! z)^vvGg0f38ParYQI?Bj*or*zzV&lAW`h$HR%M(16bUPFnw)*$mrieg~0m`4_g7~bX zUb~qDNeP(<0Nze%Xw-dI4^`Z-{<+elTVi3D;^0Quft-a8QR>I1}8~dHOD5j&)TCdV_>P`iRjJIX;Y+qjc9t@XU zF68D&xD;gELpoJ!q}#7_B;y)Fuloijx!JCEp3io+2((-oP+I2^{@x*C{FhnsZc_DF z1n-Yyx9w}^tY069aa*zR(TU1m*OX(hPy`v{ewysjU?U^CLKx^U@W&?FUFC{NE|-LH zZG}1=_sdTHqA?ZmkVeFr=qvYX+gk@*Q7KuoQTp8VNdZ><@r)}mcCi3y%)JxY^_o-K z{eJF6y=|(f=)Zq+U>a94vDR+Y%)!57l@kJ7FFN}rNZqG|qx()$E1>wg$)3BDuCn1i z=F@5=Rlb40qEyrB^IID{?E4+T?bIgU(RQf;3)NKntlHIbb4K{0uZ;n7(bRQ+pY#lnd@Wk?Vo$*pOV* z1e<5@NqI=NPMC$ikPM#LB|2(t5iz|!B6C#e@URWcL zsM2WY{R;S&WlIQnHfkJn_F}xE0>7c%VR3&#=2m{*67h?vGS_Frc0vo*By>LAHqwxN zeV=xhWiPvWbp%Nm(ady0w~8&xMn|07Sp+>|P-*vxiKyWLz0K{1hxUT0;oIf;1BCW` zZaLcdT`rSgIsz=%Yt4{A<^f!B9V5(6Gf`INOG8wjEN>oJpK9WxvVmoWDJ=7;0P+_a zg-Y1zlZWc>008D70j;Gika*y~PsEiK8vABt>0{qdcMXk=LqN!%QE?ig*Pm9*fsZM0 zX+`?|RG1`UNyaB7dk2MC90;d+Lp1StpFVFjGGVpLwTOYaY>jCZU7rdBwall&-c&R- zO9W-p7_~flx`xLaHHTSp0vrB_&*pUrXF?Q;ST6obvIi1zRx-J`5kNz8I3By85*n@R}-ogi`Q23Q^u8mKN(K znT5CIXq-kmcYCGK@vd)y{;+d-KlvU6k{mhYyh_b?Csk9DO@i(O9L zJBD7mCW9o)n!Mh3wqJkxNxNf<$3YUHq-{a|2!h)d#yL!6M%GodMu4f z;^u;JK(&>sb0Ch3IR3tlN6+~fRw`7T6aZ-LECv8@+`V=Q9!Slg-!84;UFBFK(VXJz zhg)i$-R6OJBsbDXe2?Y2F8_Dle~U1UR9)#NNy1+u{C?%$eYUvkQ9K#yfp(ug+{rq- z)*`(wAK+vlM4@JqQQq`T4XG-NkB#quPK(Aacu`^0bx)$V{qb9iDd<_F0`RP zq#J+j#Yy>ld~B4N*ThU@b$`eLjT)+yG?##M zblFuY!MG>ZWsJPVEQoRvgh0)>8LFEOv5lZ`B}0ic8sU#(%w|JJDzCWK}n3EsvepMqV!!LXF!uhMBC}=tS zap1av;@(csS<^DI5N1uE*O0UO1FmOZ?m=0SDI%^lq#u1A<(fABHFi8<@%ki>PB|JV z<=Po2S=4{zP~R5)x{$?Ag;Tf4Df5!@Q6esA#TQNI2agp};kL8yK~n-C$^tXq$?`e< z`cx+xuq%b|aM_!QONl73i1<;0Y^{srikKFSsrGotu?i)Ke0$Ri0}sHknQO=Jj?Zf) zE2j28OB88u?4m@aQ^0ksy@!_g%|L}egwBpYRL0%T2x zOydnUvg99k*(R)3AFIL^8%iIicDS~g(w3SVF*E_Sa>6eeVLA`wDnROnii&I`i zFS)nFj)wXZN2e@=h2`JbD3Z!n$xgM&PIy)u^p|^8<>V~(yFE^zsHxxR?pfKOH~>rP z8r9eU)-AG_Id=eV_tU27m=G_VKb|Irh7ljghm7GEMAp&yLw_eR?7)(X*s_k=z9@gE z)jr_W!5Xku`DsH>m)7DT#9kJ8o44eR9L_m7E?y9Tn<{5FfQiPH>)UK-%FZraS72c5 z^6*4D1BPTxT@~1Eg8+Z40&L|zK4n@sve2I=ZA=hYUm3_NU2K3d#lFVI5Ey*a1<+h! zC>Q*(e0{Y~w!1rZ5 z<&rk}MX8bzN71NlgjF$B7TrV!n?w=NRjI#!@-uz1l4)4s$&WMjHRaN2XuQ=|Vj!a8 zo$)K18QAI%l+H!1b6v`jVixETj1D`mJe;l&*@9!2$b4}^oMBG+tWhtro-O4-8#zrD zx-`>%iD=44JveU{xW%ZQ=@m3%D(WqWIR=ZHS|iXANDAQ2K~+^ze~BH zQGo%XGKLq@b^o4D5dV(6P-9at{Pa04FLfm5?+ycePS;#||4uDS{;IFod4V9G=Fv0J z^(6<8HtyzN|AwcTxC~FK}IdViV<{JMdBjR@4dq8usJhmXG4rGAAWJoH zuHEN!&FvJ?-ECR<=nbVtV+K~&nviuqwP%mr-N=GGH%CHmC}-%@AVaWjmqI`iN~7KShS`5YCWh;!eTES?R432Ost;hJx6xwthSNelO4}*(`+}_MrT)9 z+1Tf-9CXr?O$w>ice=T5XkBDo&DKn04q>+D+HuaB3CKmh>5Nkom~OV2j;(1(Ci8|q ziJszT4Azw)$n7P`v5Wxo+JN$Xz1iPjy6a@8ta%8dV0Esu^TH}v|1uNn8poWl~58fmyEL7OsN$75WT2qF49HX7E~KBBeUB@2S<$G zr}e1lOKh}^kI|Z~&*6RdaI+VR^0ts7DMmvHZ$?7fqyS3EJ!)-6Sw8}9Tm z9b+@+lwV^D-{e$7?`c&C4=@x>6p<8#>Q2MviN9c-M8Msf7_|eU@B&M!zmY(6W%A5? zok97kOdx98BpQH$Y7{+_gX0lXzjR5G^Y{>~Dp-?smwn)hz_K$m1eHd|$|zlW>edT; zck8&l+E^C7yN#2$lSpbnC0kF-&NfZ9IX%gnW1IudI7gAi9ImEfu{NFvFzQh9b9y{) z2$%K{o;^qQ(H=5b;7;5{wm7XGnG`$Z>&#Qd8IM{`KaWXqrgiduV3+EtZleLLsY8Co z10a+U!;A3W4aPBtowB*7 zPOhH`BpS4J!hgO`d0nUP{v;)Qyz-hyh}?51a3D-Z2{4DEX7BleoxcvmdxrD-PukJD zid|3sluA=j`3su7{#txY1f5SFSJz=WN7O`1Y=DYe;Gu;pNc!EqbD(AO&Ms|-UpfqP zz3(C#8||ldncrp}SEmUR7?VlC<)yDE{XTv|C~(xh!YF?lHbj6q0{5BqTF$tAOtQ6i z(&@$tw`t#U-Hufw|5C+qUJsopT5e40Y>_@m$n^*EQjkK#L$`Qv>36DG$FCDd%J08x zVYFuM3?3LI_mU32FYnV&*dgv(_qxYLQ1h5b(E7g1wx&L#B;R!g9uDx>G)fUx8%_W)KQU&FG(cJpZ zK!19t?U{l8o%0;YzY#};Zud5CTrnj#Og7418xUpdixqvETda4*`&p{~6l1%XDi`Zg zb7>3`q^Vv463qifK5}17xNWFH*D8)`{A6v+3wIar5~-%_X8OefmySkb1$+4dOWp`1 zEQ)~PWqfO|TIT2CO%TIMkj7dAQkUY?VpgAt641N_)=&p_fF{!)a|7UC^Zbw_o}tgr z)sYLlzI5E#U8^)(S*0N)<1hh`%BtUemBUIRi>m=I;RA#0SN`x z%ooumMygAT;`hV;$A;iG2lEP-?EgY0LYGZ9?!FsdE>!1M?4oq~h%k7(S%o2M(Kl<* zQ+kM|6Lw1(&3zwPIuH3#s@~OV_XrEz-TO|&&E2YO*NUKID~~}kuwX{%C!X?&z0nepiYwaQPN1tsMSj~ zd*r-O4u}zUbQ`oXn`?BT1!DsuB!C9R5Tkqw{QTSR@Bz*dLwK9L^Brj7Z_viV3%ub%!#^xKW%OW zq)m7bUCO}O8C-IWz)#UH8&n_>-ctFgz>zXwA?$q2;X$|j8yYwCMa4b?pXFMm1 z+Roex|7C$OE;(^wB{$TPFw_QD((dk0G%;jkw!p=66t6$^=<#0DbgM#Ix{x1fW%o*Y zhq_grU)CwR`q(_V_Gkq;VY&9nH{9q^H{L>zHa;_6D8(Y-hlF%fv&eX{@Tmo98!^D> zldY+4ICU9?v*7Gso)V@@e;5aimWV=C&1F^~S1`nD!QW%CbLP5HG$1IxVIppyS2JJza#WZ< zOC)5xBL~^`fm?x-tn+c7zre69TI;Jhv6X$ddHaR6Ev9&k`S8tkmA2&i1!SZv_P4!Ge zjgWMK1D#I}O5i{B<9zUGwGqK(-9xRL)~s?DPHS4-{WW$bmR=x>BcpAjO?Wt6TEIN%eFoCg|9-BNJ~{dk=CkXv)TNbq-Fs60TPVU$Y}zb) zPAu?X@|k7}VVOy(W3R=i)_L#d9uY(A{?;#&6`jMxhi?)pi-B{egoXG-i}i``@rqJX z=q#v~YIa;78`x;*MnC*7v4H*`v2giMAGu!tpo=K{S#9Cv=bIZ5`lHa>+b=sVE-}}@ z|JxVWqNJoenPujsx9^`;iPY@~kpOU;;)0LE8KxxF-RO-BQ|8z}0`gkdb%002$b;mA6RF{|iLI>i z#=HI9owXahPVUNMotF9vzT>&#ecmf&1lSi~RndQgWaP%7?SG92ct;)g1R6wOg)71K z-sNdJ>b(wHL&p+FF8Cw#37!2^T=qB3T&Bn{f9c^H`m7Z7SqCS9fx+-W1;fNdkZ@0(ABPNGuZP zEGsJEXYXNUd%#Y`ie}*V-#biB&3Xx6CliBAy5v2f^?aRP4>o%|SrGkT$ByvHPD3ma zCynZ_hmdyRN~QeQ8b9@1&c}gaOv!c4ri z)g4U6=shq6S6p(x`XKon;M^A!IUalPtgCK?9IYmdL0QY@LS!Gi@Ah$}kF-(th?NB- zcnehtf4tQ`KhMA<7nDOhod1ju$=MM_V{6i-Ym2_R?^fP!?y+I9X19H{^I3bM$L@pQ zTwTG_0PUY|Z*xh0*|Q1<7R}G0ptTDZ2wo|_mh1Qmzed<SWS_;~NHkq6Y{BkD1jG*mmacz82u`v+1(9TYH+xvA&LYd=~%BJfMPPQPmmbOg(I zuX*!&E*O=xLbf3LKa?ceMSDqT!9Uc=%B*7JIA;4bK$q_Zx_JeI`j@F|Jv$JGt^Kna zmBpo-quv8lR1G)+`Uz&4LKze>C7YQ&<-{>TUObYq*a5np&wo(*X5)&9Waupa5?Gq~cc}mgX<7w|g-Xlk&6glA zBYM(<8YHGw252p&oN)GdWd3;bgfYD{uM=Z`T$7Q+wmx&E*N&B8*(Dv}2^QvP zwvKa^4H|EBda+JL)Y)Gx$`+Ggq}}1vRdDF#+GiNWs2qG1g}eicg>sfwIrGHp17xIL zSUmZ;7q8xHf(%k|uyjKecBJbQbCE^o(O#mr)NLU})k8MN)8*vxgBR|^ zIW|`CNOzhDL-VBpuh)cPorYLD{rV$SgRs=rv1N_~KRo%F;eM!~f<5^K_z};m3>FA3 zsSr@2AYnlGYK^uGb6>JBKxJy;P>X#9EOQHCqPb(qWDSHxVuP8UefPg&pXt~t1DLW>`0#Kb1eAWQUBUUF(ODx9yl$N>u#BV96-_@N+)25u>b2>j` zm98w*6%*s+eC&&_VcEaIDVi$)o`mCiZ|3oKJ?VL3#y6zkT56%6IWB``7(=sS_$lR2 zR(C%gyCX7#-E?P z)maZ#Q2zcYXN~b;f$U$8v{1>gxc#(?>in;UJyH31`}qkD`pEXkX_azuF>upt`j3YY ziH7#o6r;V{HG`L4oIb$pHn$$+r4Y9jom(X4Y9|;CJvpcOSXqiaoWHF4NJ^)GrF=xZbRmYKj^m4pJ%GG0w)AZ>9{xZRg^^!Hzjk9R&TzHq#DU=l{!I>m4mxN zCmqPFtxaR2`OA4a*Sj8pn#nKV$wrne!`PuVzl zE8FydN^`>s(B=G>b->t3SpKoZgLC+D&t=>#*!3{WZZHJ?(77lsD`?X(v15l)+hSF4 zqZZB0C8M1`nw$%2)euy+w|8Q-7FjGsI#uu@pp!z!xs|OwfnA-KU6;B(OA~_LKsG7# z{)t$vraWgi*+ggX#8G+?)aOuCGhpnu0B$Yoo9X3f2@S^>H~;UyUabC!^5UfNHtzEx z##9rtxN5lij;)@nSkWuhCW`xmwI<<;OJTcjC9ZsT&vy^^MmguF3?%xELl*SGh0aq# z_y3k|bKK_-NYFXKM?b&@S?Jk{TPT} z{jjo5VwCXoQ{^;IAjg3E&uvcv{E(m+GCePJb^d%S!?Kci1{anLjYheq=RXFK!B%Fh zSGPDmeN$^sWDNLP1PyJ~XiOcPI<`;kyH!4DEBNo#cHYLu)(V4A?m;$5!3gW4j4ww~ zIEUB4-@6dGS&i#nL2P4CAO8#Sd2HsV5Q~>)Idqw-B_$JDjYjW~VK~AlK1KXbQ{DKW zK96dn=*Zc^vV$dedO!E*x9p4O9bOz?O(^IB2>z8|F_YDa%85Mr&3F!!TMOI|T80tV zCi5EPwv|~J&bka;!p5(LhXbQx`#VWl(VcYdZd;upj}LIdTM0dDFX2mH#UWbHa()GQTpwDnj=6e%-zBKlLZPweQ zE7{##PG~OmcN+t)G8qf??@7-ZpSOrGaz$cu-SU1s5^LT`F<<||n=GUC%ih!QZs)*U z%nV$eIU#0^L5EE=wNAD&dy1;e{q@9-oaOV-3*j~WHgd&rb*O)hJbb32GITn)DeGS8 z?BsC0@KUx}dC$Sz8gP>}H#nLH>d3z}iyM5S>)LVqy-h}*FQ)tN=$IP4dpYW9GTAF4 zL#~?VA{I_6)_|9FYfUL8Okbz!f(Y8{2OfOo2v-d(QVlbnm8G}orD$7eXg^~j;PC0f za9z_t>ntuhURA7V`x|TY4n6{r$*8S3;?m2BO|Y!2l(Z`^o0hr#?z{OoOJ&4DxN6Q) zZQi%W!5e~6s$n+QK{e{v^gaD~df)z$91`x+vWqHO213{q$qL)BZzEoe3bnC$j@E&r zXJmL;hybC&8X{yZ)Y!h(t1k+Rp3iuG46LuYy)E#4a4&isBgTDv*t#*t%?f&Os!4Rg ztOl+4CM&_aMLQ&g8JgPjQ#Ck<2Uz@dC$-N!t6QlHnN>{^8mgn~%0z{i)!i1Lldto? zrR2PMk;Va6T+Qf`mFm8~X;GXu-CC0t<);OGGj4I~Fza;AI(-?87SQgtLCc@|Q$*;_ z=zkDy1TF0)V4S+)n0V2YisXsMr8W3-2I!V?ng8lcjwb1~aJ}K8q}|7*fFaIs);TKz zLi1g$=&{E0kmVV(d+A2p9QR7%f$2?=7oF}w51`}93zU6UfxiRK^=Cfn1Y>pf{pU@7 z47bQ-!3kA}{45c7aUNoj-fdf+tJS z4$F;6FH30>UQDUo*F8+H*H%BuPTlr)2gP6_2dgi?-rw0ss4*BbP>} z`xoQ89gnmZs|Eh<*Y(FiK{t?uk2!dShQO4?!4O(|(m zk@g(5BOdUNHn)y>niY;P$JMgP_c#MSUyAT;Y4wxol>X0>*4DcWY^%80K8X{-jcw6K zRi0eqcjyPky!^#W%40)0$II=h?(*KgsLX7Z;74t!VKJ*N06={qt3a8wzIr_+|K)Og#j`~2+n{Y+O4 z)<^WSkH@8iZ~5b^tN=k=PQ9Anw(4F4iEr6_>96a0#QxkSLF_Y;y+I|ETkK}kW$Ia| z7en4?pM%OQUCT7ehg#M*3qg31?ym6RI{WLxU6o31?O+HB5H!G)ClA3r3#gdtM-e|0 z*(;T9NW31z=fU0rDz+0|({6tZ#MS#|HuBE(+4Hi^iaV^IkI#NTvTvq8}pAq5$x(((6nCf$ zQz%}mSNN90Od-pJH6n)ZB2RF>z$E`zWgF~Zqn`tAr~#bn`Le9+vkUpT zPIO!p1XCwD_cZ%HMB}s<{#^?Fgx)jw?&RPxfH`kz6nc!FsO7i_bbZygfjgzBBfx*WIuRR>^>#%3Sty|_=3YLRWuMGS$D$iH`e-yAO_ z4$|;HFyEzJ-PDw8GO>~aAcS!-0y~i`0cnnE$=JztqrwrJocEfUPzP7^m)d8GqhIM? zCc|5O+)lEKGj4R*I4ws{Wue`_-Uad1&9t@2w|9_W$G)mq9O??f9Cn%(c3mf_5#=%K zRd&SjFw~^7+ynp=<9y?HSjv%Dgn)|k^-j3K{X6B>>6%PlJ6IuM9X@! z&;%c;MYs);d?s@%VNdJ5rO!hVTob$|P&RYixO5dAdar3?8KYx8WI+h0t6op9CGH{Ka9 zic|^oG8^9>t7cz%4o~L}Sd#BA@~>)`#xcQ;Q8#emF|pHBORYoe9V}y8{pY;P)q5>aI<2kTT!|cL$z4=kgM??QK2?83fed$bVKH#S zUx*ee#vC%t|5Zn&h#NuU9n-bS~%aiC2XHLGtJaC7Jd>W~EqF{-k z(P*RIq@o+z`Pt)&ufzDjc;~X8_jX0Uroz+EmPgYVsp| z^P^WzbCnxfD%rIxa*s38$p;1=4$LrUPyW5V0TZsjiUbQ%w5;xXv-?AsXf4Zfm^rC; z2fLshMc{rWvSG=N=j9Ax#NfDGXP)+odma+pE-9{ZLI624vA#3lO9=3bwc67TY~ugv z(kq}$8Fn>7icbwjZAxZT!f%g^t?Riayv zJ}(T6M~wDDtmnILg^^UOl^VTAOfBHUj(_F_De^Tm!!u{UYVu#Sp zi+n$U+Q`sQkxR3V%YIwzR9em0X?dBHq67o{X$kIW;@@v%%l6`?-bhmXG0rLD86Np* zk084LC7f@gN?O9u{`~Cin9FAo-6y7}pP5V+x0+dYS4>2?q^aAy1EvBex<$ndhEB%y zQ2yF4O>94wU>k8cedPZVPm6__C<#(7s6c1zTq_;vqoLMarr+P>^`>I0o( zj0-kgt%|5j86|*?O@+hl`v?Hnda9J)NeT^ABJe%QQZFf@YK5w|ii@IOYQfr$qS3f~ z*6dc1-%;PplU`$m@~azA3jSOJ*bp01!G9FR1U7u|DbOQ)G?yLByRh5Nv!fr}Zs2O4 zKtFz}Ej)ySw$EBL=g1rC=NQZBm?N6WsvQJTopIfw@e^Q}mIQIX%#zW@@{QXux;@AT z(t!adDmetUt22VtLKEvIj+jTA>_lbV@B`EVlu17cuKTgul8s_uzSY_T=M452Z-qn} znlm0#qc`N*dt#fm_kR`h$FvbuYVdbSuIh3*20a2Ux(lQHSFN>uEujU$Qv(n`buwV+%nBu3S?j4Fi7_p7Y{O#1R$Qn2mhr+*T)Ht-C_<<>El;)~3_zzh#a_Ah$_YY|IE(1J+xC{MJQ9 zQ6g;O?tdLF8zs0g_O0oLhQ)nmnIbDPLM!EoVS|^`@-hxvD#}?|7n{;ialyKa54-bM z?$%ulm=Ub}PTcZmd^N&Fj40t(_oly1MQU+=WVruGvlLt72@BrsVI8HtqCDN*6tMYB z%(Sv^KBBS{{f?EDv&N-9-*V}*8-x4q8j^-?RsWn6fT=tx_&R9@C#B%jKPb_8+J^Ut zQv^qJ)I&W{`oF2oPVL%S()ionNsDw$&UJ;Ak9yUW6 zZdBRQMhMEBT+ZpW1o&acXW8O>QN(iCO^|z^)&xj?mOE)3B;|~!CrT#9@3x}wS-mQ! z^}g!&lD%N+_}?@~k=x!2<05dqe5ZcsTDHFj76#_L0w5{ViPrdCfHlT=PhjDG6$fWR zt^`?Ud!)b_aK}orVr=-y0|Y{8v)r=jb&0*w9%G8=9vsB3gIf@c!32b;PI>>XeA6?M zFE-EczSt1s9>ZQ`fvM&3{(2;FIHr^wu5!k9F^c|sqEGd3 zVgREaIo;|k=MS2Vq+DMsz{X^06f0rx=>%x}Dfl}0-?PFYYWq#CMz4_9!ta_oBDTtW z+ZDGY>+L^mo?IkM4I#=B(q*IjJ7{}RUKRkJt< z6{z&7m|v0HO5&d6Z_y3Gmj2VHkMI_Voq?A4Nr_D9pT8gvfY*vf-vCteH|kjF|3xZWDKZBY3JaE%{Sd0C!VC6~rLvhN zc;7WR*ng-CE07$rCus?0|8(dB#!cOkuLl}G2ZSms{N*oKu*8nx52qJunYRx1rYwc4u zD85qSZY>R26tn8Ih}SpdRkKRgxEivgXMezd=fDAI=90yL7ydzo+64!qE&MiGKI!Bu z*!(M9VQ!!*+Sf*zppSR@nYwW+b4)#r4LVDH!VG zvG1U~)cB^&uciu~@PP@mbOLX75jY{!T$uiaoTwbi6TDgUD$MtBY)mxDWDVC-jkff8 zX!bc-A$}39Y$*WLCl_n$BGo#NibX%Hs7LK|#O1W-$}Ub7!|As3%hiE41=2^s$J0HJ zCzWX>d0EG;cdL!lb8?rtu_Z$x3b#v*)L`anhv`q5YzO75D*|+<;;{3?9Gm(Gm8G{g zZq^^(l$J{3-ZKKv%u0^%NtqT+X+-dP5?Of-EQ`5_L<$YTfeLD554U0fSyYm$* zBl(;CrZU@0=y<d4Lt?mYm8@tUn6AqWBkZWK0clLZ#MS6Aa z$2T6hYP$%(U12h^bXlBqe`0<>(UiLR%XUo_zKd)elivC~Wb=LF-b4=;_gN$g5JbTI z6aZMk#sUC-3-kQD`QwwRVd~cpf(4YHFcb%_R;gk(_pi>k+QK&wwN2eu=}|m^_qADG zHR0oNQ6d+2rswPZVYpL1@pR;JOhg-uBzqrt(wHbFH%Dd-x~aBEkK%)azUv=%7*?H_ zYMvYa^mTpxw`S#u89JgPpP=Xnjl=Roxu&QzojCW937`4N?`rMm0DyZ;c(3$DPXC*U zyBvP4q}9^2H}na1&ysR0-FSgxy*T|$wQfOk5vBAu^PE$%OL0Q`=4{LI+Kdtu)l(@Y zddHV|Tr$suf`iE$?~JfY{MFpB!`RH;1*s{KI{S1dnwkaF(TT8&`gT->m-mO=3#(X~ zzyC?UOg-HVKbHNLI9ANe{)J+SBS3@=Kt9Te$1e9I$mi>q0>Hn6dUph}N^N|5dip`< z^S;=rz|i(VNAc^+>TA$Wp3v?+k^{Eu_)v%v>Vw}0pp4)T_vWI3@ClT#3;6iz>SJC| zq>9yDxAANOJ@;I4WXU*1#819^FmUM|NSV@ARs*-;^bKJXyPql_dW=KSaK)()#(pX# zbYl0bH^g7LXFh$4+NN>HY+YN}tZIV=5US`T=PQK0CWG)}&*|s;a0)62uD zCOp*wjZX8;8yn?nXz(^N_#jt7AQekhULg2U);oXdX|%4w$0|mWldy0;9Z^t!Y)|+ zJjR&(X|W>352rm2f;IX{tO{^Q0~=+GBznZ~l3GwguVMx&OzJR#O{PKXM4Rp0pJUcG*L-X=XyW{GF(k{zMfwxlp36osKaj-^W<{Q&2al5$n zr0}He%vcM~@fT=snx5SWm4Y?OR>?l&3wU10(p`NstyFw~BtSXY8X&Gv)^?OTG?4GDS?#C9`R z;2r@a^z!@q%GglXpkK>~#8q3-Grcn6^U0s=|6kGh@Be6n+kaZL5YhWKDk3^E>|25r zC^$XOH^9fsEB!}Mc%E;_*Mg{!Y@m;SZZ>BE7Jxis+k%Ar2|Mc)qMkU$=RG12mCIVG zVOZ@#Sgeh&P4`mR;4}LT)R?WkFEcOC^Lxi4oIDa;y3D*CaHLn%pH`gQ{KdajI%LL* z*YZ{L-qU#Hr*D_nbVgxw;)3Q8qJ#Gfl~1?C%U50(>V7C5QB=`k#)c>w3+nHzeS&#* ztl@*U8FYEOq&OqqV=LMtQ|)Q%0lyi~p9rkWSIW@11A*u;)! z7XA2nM*ivN6l@;Oi=Cj`=hw8Ye_sD~efHlhp-F%3KLjvl+UK0b1L!LAK4!ak42Dc! za%txc4YSU$Y&_L0syv*KU2&V=tflw%r_qKP);Nf+F79$@yT&lv1n-}``{gH^NVDZ7 zT#R`4wmzNlwpt20u(LNw?!PL0=QJeZ~$rKCVc|fYisdrs!rebwMT?;iSuLkxxmppiU^ z`L-7|WJn|GjSEOqz(Uyx-jC z+@H_)T<5w;)&E@IOO+KEZsgzr^nDhCk3{A^3P5dNa^}>t?LWIXeofJohfvqR`DKT-Yh!+R;d=^$N`4eMh@`NU45${SR)~WwY~2x;cbdRlX1au|d!%qLz+0m4}1D@i_fQPGu|J)nDNq=L1$oH z(N^n7x%w@~!(7#6lN;+d7OP|n0nL~Wd$eXBQ{b7e(DolIA#*bPUIn*|OMXG#L_g&j zd)5(orQmpn2X*IpH(d5j(^1HYac&z3qcX+USfZA4OGq%VJVplt@g)HC7AD5!?E_x>+9^0-n+TsHAzy@LG~A3}!|(18G@%)jBbSbPN*W#<#8oLH!44?ZfUwlv29+64>vE2;d8LP z#@Mkr2&VI@7_I3FB(4I`O*!Ym2NB0uxvYiGwu@koS-NpCk^OZ%US{bq(#>WGA9^-d zr3r%NEDs}MXk2w&9<2VO-#3P)zDW{zYQ6TWWog2+BNqk?s@C+Pof9|?SjC&56EbQ0 zuYui1by%B{oA_|X8$5a%qg#)n9kk?3dq9=)K+7I1wt2!>u2mu+I^}9cFQg)9FW6o` zHd!W=8nSn{w6}+QFIZ2kz zDPrkDmTU*e*|UuABN5X<$0D<3{p zIRQ4W{Fl>S6RROcVTv&kc{Oa&8CTTFFV;y>W(Q%qVY&ijunhG-1GT#pBxl3ll=i+1 zlfMo5a5gf{KKyapS>wmyN0jGXm*5t@|9Hrhx$f$ET>-Nkv8^QRAL^7XJG#af7rc=6 zU6k3|M%En1TjGT}+%nwDdlIr}=jC_B3&+QHP?Q-HtgycQUUvVS{qzH#=A9qG+Kn|S z6(fyr>>G-(#pJU1zw;{a3eoXzIKEr!?~ja$$R+`Qoa1CbG0n;#I`Wl= zNqFfSbiL%VWZ+Wz^ujdj6s_Oc@vnEO*1wuMdoEPB1jgoEdhMLJ4f?)Wa!-oN+3t3< zu&KSCY*~azRctkwm$)sp;DI@Kee@V6cp1Gk8yIYbYo3u#(wNHp&3Sp(2qbh>E4sh= zOn5*p5K zIx|%`zi1%H;F9*HAaf+gaq7`vzRjTP<)HJh7)HF=Mt0BD&XH+xi0(i{z=80H zE=OyMqtjz~5i1zNDw&q)!tRtd`&0@Pfb-L*b=9#`pxbT`cKC6&PC3j1-deo-R>*t( zZ;*t$Wi~FH(Wj;9BWI?h2kpf}__^8; zE_TTVdK>#%m&B)ybo8U9Cz)vhw3vB{SBvonhI+Z>Y~L2BvZyg5C$B=(0#(;_wa$;5 z)`ggvv}IEV%kkcb)++lG-n5IQdRL$GbesOW--+AX{*RRq!E!dgn8r5~{WYh5`5L7T z%G$tXN)My;zUtcBjo9Z%GN=fI)=8sB$6OZG*V}rU2b()5Cem%aYiAY`_dkDE)hFR@ zxAX?&YWUIs0GH47$pHX}1G$5tp~lWd`ikQjpDW!J-L>~02#FMA9?MkhSIwFjJbeU^ z<$iBY0H6+v)K&)oz#)eTNvPB|Kl1;~t?AzW@#n?t+*Vk0cNCu|4kLZ!h zFh%$X{ebqr<0XEVy1y*bWa8t~7%{|=o|9ZA?(!Kf}!BNMirWko9)5;?Y=1=?o$ZY8SR89pbD)V5D><* zGP^HF)3n;@$CO zbg5DSiy<#}E1wMR9rgDA4cB+L;Lwtlo+$hJk(60JP>t=)-H(oEKp(Y*qtvnFe7*U{ zrEx}DM$ft|>D&!JFGGc2%)qOun;6GBRzEQ-BSk)Q*NXaziTukFdMD|U#`UxEV7h#V z7P|?L&FN*B3wpQm4680m?D!cy z6aGHFZ>i=eHFqWHu;aSjz{9GRdgyd{g4en-sp-sV21?G;%hVp!vORpVUN{I3A@$V( zMXaWs5RlKDu|95OsQ*5*_g-hSreX)p`k8U%tbeY5@AhVOdYUCkyHIXC=hy0LzQ;}> zT5nLR|0n!;WmAUl?$(z7>K>hBURbu1;SXm5APC!D!9cHP!*>HkB^>{WopTze3 zhFcCBce{ee;4vWdvBYGDr9(#i`;~dZ5JOOxm>uPM&M2oLlh4n8EBzr@?~MgS-~smK zAnIBdJvtr~>gRd$8Hu{O5l$1s$+ifAI;B?K@>r}Y)uIJJ{4*0kCJ8UbrI(}0Ei&=# za`hd+hRwvB(3Ay`lVWq#Z;q5pNTG{??=i#B>lBXYloqCFO0aCI3w^@GK1Q`Rh~Wt_ z;I+KFfzl^=qEeQkbAs{4{0t*Qx3P0;r_P0ZDY>%Dz7~loeI#mMUhPSx!@)2w_HzGE znk8gRO2@`03pbUA0bve$5tS0Ea&>u8C7r4Db9Fpy7k}2ZlKJ$c;^vAfDAb(g^4?Fc z_D{$jj{jJng;Y}Pq$7jjtcz8bap0uAqci(d*V?(Qe3`*B$=1O-rAf8YnA^7M>M6ki^Achv_yd>l$bSDesXI8YaJe%mbuh#B zj8Dy{eOo{DpmKLqOR)p(LG)bgFzKm|O*4f`CFF1*t+J;@(Eer1rb&xB=D`Wu%H?fT zyZSc;J$0uKo9#WO&L85T-4@ZoRz{y+Ror2ufdLN$YOGoSFmBsVYx4TvkdK~c0E8dF zN&40k@BYl1x%H!%B=rq5TEf$QMN8eLChhNVNd6}wrE`Jv%NOx^+wCRfp`qhk{#5s=3Nle(R#GD5+eyQ^ecj7{vNfYZVg60IsU5S? z4I7T6lgq5KB+BXZ|M|4h{ZuC79bPWP)j91Le)FupmV|@_kGp+wG0ce`4SI7T9ONzs`l&V*3kTPU z|FYcDm`zD|3Hs>&vhrILbC1c!n@Xy zsX2vyT2-P88%37B65M4T4l$k{m+uKqcQwiblxmQjW}RpFm6LZTM@uypKip{0JDs(` zHY?r!Fvxi*jm}Ko;kCD$Vy@3U(9JC=@!q9xKSiF|3UxG?$wg4&^3g4~Q^of=*c9yq z4Io4atntV}xhnW0n%L81i3li;IZQ>^I05}JMF)S>t&^=XKU-bj-w$t#u1E4p)bwCR z_pVG@YE~b2PxGzf#NU?~NIGEJ7ExAG)0Y6ZROQr?U-&(J?T@ofbVon0q)e+pM_{(x z1<7QCr(&*NeEV-KZz$pS<9p+UDVdLKSBt-|e^IIA_D`k}m<%}v?V**eEq5yOq$TT0 zH$l248A5S1S^CrZ{k#>~?^WM6n&X z8;ACpDI#pOlq=j<+gx6%eHI-~A6x-i;0@63D=m7_0fqlF8S#|n|92Ih|D^ zx-2UuzQiQV%d;RZD(+iBFgT?2Ye-^Qm{)m9X1BaW0VK;V=9D=w!Xck`Kr zOTEB#jzTK-gccuUYQsF^wRm)t@vZCmGEl}0*6E9wx(Pmz;PMOg*FNwKUVIia47v+F zn0E(Cd8fQIQ>=*BkSCtpy$f{)&3AVN#z zlCPQ^%N+5AczS$fo#gYs^ed*qV1x5r@tV#$o;lr@ub98L%mqlRZP47#t3#7yTwT+U zb|biC%~7AxeCd<<=xv3*%Y2f>_WSj)_%XW<^E9fID2`;O)dl~No$Q#{BKh2?ofIU$ z;I#cn#6CJ9AlT6lV-$6r3wDB{h|3u zkZhUiaJj^fYCYZd-lF*n-^-ll9&VlMv1*YcA(U?O;ZLpODfghAw@}>4=bf$3UVqvK z9S}uvet9J089SmGwyX9hSHT4}jJf)y?Tr<0Mh{sl9LCiI8-_I)BqbE}t);|XuBapn zjNZn0%8`8RckgD>ML#RKDaX&HjCN~8*`h(epLplpW3H#82J`s->k`Q)YggzIiBc#Q z{B9NYN+j;`e$?AJCnvwGOy?Y2aje$PEnaV2t!NbAi0^#9#p@vp-B7Cf_^OQT?Q$RS zERfzGT`o~cuSXRc#weqso^e`KI@prO-AU3{oRSg#=J}91m+>gs5E7hTAT(>rCDwGl z#Gr$GHP|lqvC>I{SJOPX!m(@rt0J{c$j6`rTTW&o%Ml@iVn-^;CvfTe^i{gweFtXl z)aJXb#~dGW>al{66;e>9SHn!w>NRoJDHaYwIV{Y}8{|hvJb~B6i7=DXK<+W|Ti)`E znfY9mU^QD>}6MttnsGP%obJCDQ_*j$=U^502k1bz`r}ioj!Pf5X%5 z?G8982wh(GcYc|QYLv|M#J?9-6P}w{3i@PXWGJDF%$&w}wC_l3 z3s1V>3;38Q!}kcR3gRXoXPEio)1HfQ-`*9^++yQLTi5=IsTRnrpp47Ldv6TTpDe#T zvwZxI^A$q^Q)1GlT6f=kd#46}wA7YpG-P}@*6Q^Gp}x}qG42?{-!VDw72Z{il#$W6 za{np|dl$Kq)BS9Y&e!|oCC^(>e`AK|Qg1geBzX6LtH$Yl#>eG1jKEE)oa+7lQN3dp z1a4`1ba1ah@_g%)P5-uylk9VEEL$KpCzL(>F|U}h*X@t|Ujf{0b1j=!CoSa*e1~5V zyc7IuaJPh<=$`{ecabj9wuNM78xLybY}rYE3y0y<)%aKT3Y7U)r|wBSFXy`}(!Y79 z_o##Dk|08$+ZswYT@k2Z;gVXbSX~b^lpzP*GD+TUC`Xny_>nVVU6^G%+iApB99On& zf{?d%upb|n7WZw++1S4bzq)F+aR%2?3_$t6P9gg&YFIF-yKD3>4M=>sTkvbm&9?d; z6QUj^KKIcSagJC$AcALlVD+-Bj7H{s;=)WW@MzSe5B>rqxr*9EiUuBPd5qx^ZivPe zJQT(ZtCFqn`+jwL)HG8TdYMF?ic1nLOgm9$s4BbpcDi~a^XBzUa`n`{bZ%y&&W5*D zAqg`{EhH5cUmxE0IA4j#lZK*8EkzE46D7S^uim`F z?JV!uF=%g=%^lPoVM1n2i3$$dj8bjQWAV%OD`+2H!yP~Rtm4MhQL!@?Kj>}GY#Wxt zy)bZYbP$n<-W)|zx@2B{ev*q=@#lpyR1Igt>pE*QGec!;$fu;o!dH`$j>!2>BAdOuPa20E$d?SkC*O$2%O^?Uz!I@OFOoZo~a-*|h{SgsM zL4uChhi4pGvA%T?E!m&nx2G#B#Cz$*8YTvi0U#p`%>?ov*%AZUp{g%5pUM5X9%6=7GEEjTb%?GfOVsKw4JkO9_DqEx72U4sOke|==9$l#8 zQL@$pi+D1t#X^ph)%()%pCr=$-CaF3qL+QO5yvJLI9ESW-^!nf&UpZH(SKhIQ2Jt- z_w+u|Yp%P8&%X(&c^yojb(|Bx8mqZp${U`)hJX-@FO+*AJNE(Lj#Y>2`XmU1HH)tv zqH%~{e$}~pFRvXNVF_AvEg#55JcM3FMrqE`J%AU#@m_%aT6`JA5+mr|^B{aS=$Xa~ zZmZ4T4b_*aSDI5p>~2S`^#HR{PmhJsmv3P%8uCN{;vly#j(~WwP{KDX7m|lQa{*(; zHR@x~XT6_!gMA7S=A5m?c%d0+W+BxLQtHSGa#T4NRPY8KoDFgJ41?;#h&sTlYNCrA z(Z-j=-DTvCU-F;io#*Hu-_+t@e=SU2S;BRdY90RmJnRt(TOfIHxir%EEnY(MW3*Se z9{e@4JYkEOOA$d>_$N~$V*Rj3Rxd0%$t^vqTR}Rln%ia~#w4Gk(oyS}mED7jgz7If z78c-K3|gS?ZebYL3zRZ#z<2wPgD>Fv{J zx;W??CbzR&ulb|7+4GOd;xy(MRk4Hfli>A(go1e`>T4aK%De5I zH+MLFZHF7G(Y*>Ngm)(|s%dY@Z8~Kl!oLM8rrftJQE*Y--i)VESEmNO{J}N|PuG+5*9@7$1!8aUK?%6g+xY=PUmeG%%2#32 z4jkcTwX+JMaJ%ygn`7`Ojt}U5$hUgCe&ROg1!4mg>j!QY@RDLDJ35<+gd36ESI2=@3F=edZgV-BWjk00MXsn5)KY_-az$;H zKQnVWG@sbo-+S^Ts7Ba?;Dy1pT~sX~>=C@^t+tn?MG?cew~?XYXWrDgfckM+AYMGE z>U>8~P{zPZ@3nHc0AACQ?GF@^XoHlr6gNvk2bAngQ}y*Q15 zwr|^9?>9AQ^LjT!;Z)`1#NY$g|NB#pKd6TbAk2hVukG;y%hlUhH??nN)>K#DE5Gk? zFiv{G?Qn3=+gQ=DGIem&@oZd*pJ9o%>)!RayH zWWxGceWY_oTSFoCN}T2(dH1Nlu?0%YI6hS%lt^xZPQZMlEDc7H9Rd)No92XJWKf|Y zb^w4R2?wlmo#$AF85(NWoT3Di{51Z#<1fU5JX>e#qvf{oQtq>o2Z-mK8%Y?FRH@rH z*o;((W*d5j1XWwV6rn2mNYTuZb`V_M)-`Oy6-K9a~;bdbMiJ195rNldWrxvYJ zaFDk2T-AVXgV6HP^kX`bu0zuQjN3oz>MtBO<4)hut4^~# zdnKOtrjginl4SUgRI)Qc(+!2{Gbbgrt0X1@tQp`CZL9zUYiwBmNJ{CO*Lq5T;?gey zgb~*BfBiy4!g2B;y?S<2js<4w&T#7j97~>xWqC0DI{PWP``GmR zlDB`hz-b+qz6j%U?-UV$G!r@h&{A>}<6)9viNeKKVe1P^*EKIPIijbJI8Lw{M7~dH zNDl~Yg-i^@^p!&Oy;{?L-&FmHrRBum+?>_}Z}0LF$XG0vO#-jmU1W!+wiPz_2lFwd zP@O!T22dvk3!bg+g#K8+1=bDB4~jOLar#-hoF<(X&b2Lvz$Ad~JSr$;eg>O_j@zZ2 z%iRvt1-p{ojLT`8lPmP|NQkbg#P>#7k%p*%y8P3LEUB!L^QzWpnx!!v_~4pE`0=F` zQ}3V6IWQ0^d%$1&?PjNPW_I1PaH*~Pd-=O1BYWXI5v?4Hoo{Tc<;_XLd;EK@D{eoy)B=~k1UVShobsH~`v$cAJz{BU=2y){dM=BHAJcB5;Jrd`Cip%2< zI9rn0@TlHF5>~!N(Y-o7&tgl`%Ds%=>fb<=y#U#^P03E zw-Wz%wGaoK+tHfS>Blp8t@?C~{Tl2j1GQ1FJ1s0V0UT_Ef1gC(XQ~my!er#?UEBO9 zUg;&JW18^X2S1lH0$%eB-K82F^l`bj?#Xb;a2vnK_pJ`~xq2-2n;J&yt4BCN^|x7` zof_~c0#Di08d?#uqkFN2?&}@&1ULw`RuA#dU`-c+Lx$(%p}%D2#8=YEHsSc}Qdu5p zIB~)A`PNbW(=~?|lwv-0UqH6I7j(n--<<})gG#@7I(`nyCn{)!^iXU~6s@b+Up}pg zxCc)pIkwP9`7ts$V2uZFtfxKsBbndNez~Rpm4p_tMEc)bsCL@I`BRzb!vh#IU@d?j z-rv%6N&Y*FXyn}3@KM)&k8Nx#WM)SQ+`pn8eOQ~2bUooyVMY!={;^UR39s)M0YS`D z+E0brLI|~B-=^-UztsN;O7^+`d)J`^*m&SyWy z@NMtnCpls>pl3Ztj&0m#>3$fdW0P-){~3D-Q~cj5!Rx=owJ9*O#K%|qe(?k5MulaW zdwV+Pe2tBZ&kY89=OxCbB_w3y{vTtwyL^2Opvu?{{VR%UC%FwbCdZnc28T!udvNL7 z5f-HIu*LeVp4+PpPv$;UQ@Qz3gw_ zSEfeTl*8qe-9Gn%6$t6-KS16AWfY=6WE9+E4|?d$=BAb(eik$!C;Mf6qNsUDVe9@3 zF~mhkov3JUetY&?gX#-k9vtPZI5^PJN>1OLQDlp=5|e*wIBa4L7myuW_W*d>4t>hv?PP+`nb0ZmcZP ztK)Kd5`e~sdn6ilY(jD)Taf4KMC^f4PwB1T{yJ^7oMMrr#F=IqDLvxay}ZUopPwAE zR=MuW=n6M>U-Je{Ey}uL@L?C!7Q^C?xsEZKcI?LNQFbme&5~rB>zi(s(!r38Z8UWT zywFC%R-TEdGwDV%_Gi6irk#WgX4UcdzzH(4#MUH-RbPR_j_z<6qRX{}l07sfef4+i zATvE%l}AR3vzKSpMDje*G;z{K-)DS7D%lBU9A47LW-O-u{lpaeY;iNlr1#NdS3Uv_ znsDtl+g1FjDERV>gw&y za#@O1yG)sPkQ&NZ4ed+iWgJ zAZOWB%5eUF;9=nkt>VfQn}IO=Vj*ZM{+317dF&uoC=1PE{>NyxK9%D3lh}6lq#*zI zIO_NA1wMZo!{_FGHbcC6`3 z-Rc{kv#L!s;9$Ve?|1rhT3C)_JZS4UJHO8Q1V2gWsv{BM{)oUsvL3I*s}xYu_=Fdn zJ$-XK{lP*ExspHZ+P8V4eT4VI)VACK9bHl9E8}uXEEoUadm~aDS2zztNsVUUxPvFB z7aoMclqI$22xjsHw{#7*}S4 zhbWdhv%bX6lXdFo&j??bom9~KG?h^$$+oVHi=MMHRp76utHfq1a%V@d$xcn-9O%K5 z3q$t+0@E5Q-3`E_J6^*~suu<$RvSJv2SxQY)m&OB?RA-Fhl{~@9^diRWzWq@{OXU= z&4~~RJ(q*K3x!Z^kJM?SxmM|)H&;l8dL`(8GL63-0@f)bb#lQ8@5h-SM>?*ONHNLY z9EX!xO8;tX?PcO{&^Ix&o~);RITrWlm63HE}>`N>pTWszG%exAb7y+tAR&uyVu>g+c>axD%;nvgVpQ6^D@pd+Zok zi05nE-IcXSRfw3IhTJD8J^Z-jB&sl~AA(`rTalf*0hy|~goZH2zKU6g+6mp8dRh}UE>^`0rjZU zWLM|zb@X0j+)1z>IxK6q#YYdv-HKzJv~>y{Jz{IHNijkWp6WgfLGa*$?@wMMxXb$w z#*5`DG(^u@P)~22j_vDQKYUJ?sd)Y{wO)R`Am+qpU_YVq!1&wXBhiIzmv;rK#Q)C7 zVhLzPNh!0_x&W>G#PoHV{OdYGO+mJTu<;#KfgQJrp-vxOBR5ZUai@KJN><7R2}B=J8)xwqF4}`WVXrXNjK9ZAe59N<@xqJH*(*ee-jc-o zspU%3^pu2)y%a0w-8Kb5Mxt`Que}4_tnM<__k6LHpE4ip|D}t3`5tLRJz~iElE7T- z`CmiIWSE%aQO#;A#ojK@{Dk@AN*C*hCJHPnoc3ZC*Bm}NE5x_-YrrOyORaP~XnK)3 zP)H5$YSf%M705(B-AEUt3b++@s*Q3yB854%AZfL_Jx9740Iotae^wqtE;o!{+lv_W zFwLyo>}ny?Z}10la?=Nuh0E#eEA$XQbQ<$@e9X2$x!G|_66qi+lJX(?)@4m zA@QH^&$c6{H2L=>1L`b)&vdrAP2+o7bXX)9-wRH43!|2bd_-*u#|mtv665P!8d;o3 z)kge=zKxk|4hTwy_H`Va7aU?apU;lIAsBG5O#oAJ?ci1~PByPtCOux^wx?Gx9tUC~ zs^bqs6hE#TM-aORNxOP&@k>eFiOR$=txEgabb!D^GZ#x&joUNj6cR~(t%(N6`J*}A zNw05Nox;9O>Lx-76>q2KxT8&3ruF6)lg^|njT&8(-js$kl+LZzIEm+)l*ytV_jY!> zLKF5%wIoR&69WLxTHo!kKNKbgcUj$3mR%M{%7hskiX0@yMq2opsdMP7Pf78SJGV;S z;NhIc5Rs2sk3hA*?2G4Clp0AE{Q146W)nh1T~s&Ev-N>l>HWt&c5KWAB_;RwW3+&C ztb(^$oWqERF$QzN@hPhlOf`KB`DXTe>^iSwt9gnqBiT|Oq}Hyh3V71(zHS$>`l+7dinbyQh%iL&bVU-uKZoYi8M!`NUT$5&AzXF#)n^-F=lL<)CeFl*_ z)ZOE@{lK7xgBJX#>_3{a1VwNIin{BkI(S!uk0Z~#GS|$utGRFwLGE=RsuM$M(2OV# z=vMuzS&r*$FSLHPI2up=cJJ@kozkMtkoxieS6-LV>V`OH)runOTj9hypIkb8^`*-6rlCR zn2|q{kdPXDia9>Efa`CY+>TY(R=a<3n6e4qjxys&BS)L+Ab3fdVLv7%ycSr`O0Nv# zL*GGn-fk@>#liOG;$ubSNchp^>-NRO5TS>I9_3C>=}7;Uf0ftg+Iwz^W*8tlhKaTH za@*ac_cDl$I14cQZ9hX5WYSNz%+9IHO~vz{)um6%6SV5nQ^z-P5Z!%pJAgHpofa3L znsc@Cbye=3M%~t85v>KRL(qO{}dd?+FXO ziF*`u3^Q4c@o)^Heaj@q?J#G!;L)E{wP@V&_@C?U5u^R~${JHzlnnWx?)k>8kmci_ zl$XS*N=15Xoka3TdihlXoncdRcGHLVefez9sBCnX;Xb;bNHReD$Nb&UpaZ;=Q9nM5 zbiew-NsKSk+hG-6BxQ0C(+h3xd^H%!tloFyQ4rLKm2gr7%b;JHZhu#|Pb;3hG~4s- z7gy4Iw<71tQ0Qq6*cE{i7lp#A-mM!N#gYB!1@8m3k11MwkME8R&;VB*0WQ$bTrmBz25&;e_mYMNr|Y&G4er zC4ZVI@EBukj~6q|uylzZvqg_FwMRY9eR;GlyO;lbP&I9*ve3PdzIn5-Sn#_lETne1 zHccwu3weAM1M*;Y)v)-os&CxSD)dRuxy66T_@W)l7Yt=YktOU(pU@8LEVwOod#xa# zUg~E3dF*0L2exd&Gcs3gDfVOKb*V^p(57~us_>jV_o%>|O-Xwd2Rvt=8q=oYj{b>9 zPK7RTkJ_`I+m3nVOa^fTDq% z3mi*%7M~gG-HY`bU4#_1?&^0JebidNiTBb8)EZUSC_Mfx*v2w!-07Vdyg zg;=dHR%lVh$7;X^4mNc3O0bE-sMnixj*Bzl1BGtX)De7k}SDHX`SoIzS z`EZI(;1F5hUXX}*_2MRHbf-DlR;aZ5CK8X*I+;1$E=Fz|zGT2_Tw&UEld^&BH{qj)-zqt6pKBbi zGUMi2EX~r|$j&4uZhE_Sxc(huK8)(rpV3{<>yzhe;U4CQBHYAq% zlY?^5UMrSN@g`{5bL2_vS3v+yLnDPizVX5A)B{~d z`N@a4C!dqtI`%8`B&6>G-pfVXflm*u?W(=XJNNUW4JxrBob?DLSa(aJ<;+E04mPgw za=rE2`yDN>A?I_7~d5Ky_za>*aR9`|=3YDuEKVSTCkkC&|4Y}1xO!>);= z)fmA1L#pfGNjM_M4(rTtpQMKg}T!+lUrp%pr%Q3*fJLE0HXDUx!GiYfMawQAW6y;_zSo6aIq&~2+$SFNt5nJ)k_sQq#ECdyG(4sU&j63_eV_$nHm{EMpQCXQ-cK! zsWN(a8)lgb=gJFOjtwRox9Z71b*`zzfc5;ETdP4^I5?Zrw8vc}b^1Kh(?T4_BjVmu ztWZhCjo3l9+?n*54O$lE0_z~cA&U39b{Ax|9s=c$}%sd5P zsY&{`2r$}X`#UN*?H@n$fmPR@e^O+p`K@V&T>;Ec(0IOP*8BjCUUPJByS)@IZ(WpV z*2wB4Ny0dPUdkWdtB6Elwae5fZ=}X2Rrq)Bg@&?6(%f5IO?IPWdW`P@El4eXSmP_- zs&|?xOn!I!gFz|3^aBAK--oonbDU1H#PY;gjwecOhpT|(H8V9nia-mc*l9MJ|7je2 z|F?1Q{x9ACc`CgqNlQvCxAt_+OiYbT%kT*BDJ*vLb+yUzat{gd$c>5xYcl*Ie8K;V z5km3Pi*!c-Pbg=2Q)sraNO{G^hW$1KxPj5izNP7~$-*C16By5QC5Kx3I(0f}Bs>~USLk*WM zKLUP!^3vjs{+ye1v5~bB8~Y<5C%-ym(`k|7#k)PJx7^IEp`-vi%33{*eG&@ly(gA; zTqy}ey(NlKcJJr2?~x&hnx$*XXbXq;VtGJ6G?o1ge*Am=XftPEl_M{SQ)k`zC!+Xtc1Ci7vJgx+8Z#%k z3VtfFvSK^|ZHZ9wptX8b@^H80ber#C(~Gqm7C;_FNbrW#H4SM*e_5!=6H9t$b1Sr( zIga3O!m$vceGGbMYMBJ!i7#Da`k=61{GOT%vg|y<@sNKnY}4q2DA}6hHTn9tlwV2L zQy@0TPQ$RC29lMfkSb&$H?!KMxWV)A~C6?-7SMtT%10@RX5Y znh@!BBa;cDa%A*ZE4U}^(+5Izc!C$@U$c@Pe1Esxo9`>kMj5$P$?)hfrGb+daN6`h z5KnAH0Jsh%0uyu*$Cy#~Xc1?QnA#AB*{5bL(<^in@JODLchoi99<4S1IPQ22_BxE1xfT0G+S;Qyz0)A;k!Od#@@?*9LJ$Khap^Va_6IwwuzB_0LN0h(p%oU%% zQz3KvJohR=aes72U+98DmS3oyswg8|@B5Q@RNt zVoU!eAGptJJ)<|~d9LTi{o zOBu4Va$+X3ysi0oOq>i;;+^b`ZK>L#LlVos&Vl}6^JdR2to|A%RqQ*!k~X0ItwvO& z#pVw7*>SN_?B)jo;pl%od5{5#*%Qy==(c}spn;=GhaXu5S$i#t{@a|RrBuBcHNaLQ zAw;lya?djt7COkCOHUDCH~H`&`47PJ)J$mYg=yrDrG3*->(p4fB%?Y<=XMDA)SGAf zZDA&`Z>i8W6y2Lg>~P`%?J&evq0&-GPO#atU-DaSs2)T%u>j4kCvbQ>c-p;;^(SPF z!6+7k1zo1r$5I&?c5|B3znD!#mQi7Xy%yWO>Tv29BwW0qm&H|!*`X;yrMb|qHG>gs zt`Vb5^p_17q7kV;@a3U#d8AC6tv9@!p`(d{H zF)D-lc8EbPn;@Qv{R!?BAm#%T?;hP;t_2TF^B|qFa#m*qOQTr+831MyC(N#d6$M)K6=?98YtFk{NgkjFf?X&&(WGZD-CAj!C(Wlomk8WY# z0e}#|!&^l_GCv!4LIhQ4JwYa;nN9dVwM;Bhc-sFHAS`^f@8|0;N#Vxe)u2K3IyR8- z!)9N)18FH#06)gUr3|?Kb`|T0{p9Qav*Qg2-yU2L-^+P@k=1^4F;!!Hj+k?ClapC@ z0U`F>He|))(6A5Hm@6hyz>5yC2;5|pfu7MaJ3+u;*jI`Y3bJ1|ySY!Fy2!85p6XKo z00?>TJ-|a}TR?=+aB#w}A`v;bk|9T5xmSbVZG7uz`WhtKnoP0Xw^Mc?$?7EZVmOUu zv6Q4c=o>e?wvJqR9yatwnjI6=sn&#c%2ig(6K&c;`<2?%t2vdo;$KIr-h}ZI$$^EQ z!T~RD?uUUJ*1sm~XAF`6A{5jQqWdAI{Dr}%#KFo^ndY4Z9#Njv*QY3? z`oDs&VoW+KEObjQ(`C9mb=Y|oy^%j=M`iBzSKTht=@ij1y zA2kFvhMr$)<{t%l#%W=&LJg>y6$!Z-o%U&w(@QCzyraq{@3o7wr``;k)wZst?JmJI zb{*InACv~7HTS|(<YW_8V)l2}7Z*jMnrvi|HOup75TadpLG61jA?`^x$$LA(^x zg4Z_ygkUJ#tRbK0F|e+mJk8!Aj^S+1hSda&S>}+qC2C!JVO(u9mWC({@&9tbzy(Sb zSkmG5t7O|Np9y_WxfnMQKY%R=YH*3qe|+;@wYs+>^vp~A9E;+1s;a&`_gID7UyQXM zlSSyVO?^}^CoIjD4Y*>6247@z zP6?p*zz5a*^$>s5PSEu_z4nHI*=F{I40h9|i=c_j1~ z@UG8D2E1-`rR(-MLXGV&+FitRi)a}C!r3&62Mcl z+s^Y@@pi-mlT~5EjK4*Ht=xpT27CLl_wL>1fB1As;<$96*{#n^Z^=1-5*t8i%|jeU z==u=x%2zC4;TKXJiKtjgs2r`I@kg@ZxeVFLpQulTT1BnDnBg06TD0shGTxP6Te9q?qjl8My~qI_IoRd~@bbRV*%}3uJ?$ zwjikAXZWO~sdPNXaa*YJBIjX*;Uj`o>UfHyu`+`g`!uLJqU($<((*MX?$l+n{qQiZoES#w?LrXe{&v|H|YP&PpzV?pWCU#ha=_A zc_diq)iJmCGc-qvVW#g;LtV|tSXsP*@-texN#C3TCx^6@mYfW0<^sXo_YSO077h4; zp!!xSz7UOAMUYxW+8sxYt!eH{pyM0Mc)32~ISk%8z@;OzK2Yc+-1bC8d%AScVyxZS z-o`^sMQ8E7r0_HsQ>wGao`b8LVl$^!DKfbhStL@TPy5AOC{07T$t{8`YtNL`sXn84 zJ1g*Nsvxw4vfI3aURv`9@r#B}+4Ch)1WI3Oq#lTjTN)V}j^4Y$%T2fb9_Enka6bkIW}+@_#DY0x?#7|tZa$Aq+f1=_N)0N!+u}`eRuO$x zz3bWGT+H-S^n@1vV~W6OCH?rNXc-&RjPQLRTkMuk^k%L3H#-hcxe1TvxYzmQ@*o{K z=Sj0X&`$T#G z`Dm-#K!jmi_=oEcT&FTM)%Lo{8E_Bn+0e%69i44Czk|Q&TXrQQD}zqF#-bMYpWneq z?^I%8fu=vN;_%ronFeJoPMoOl8g{06D=Q=r?K?EX7sb<$1p5-e zeo9RjRf3e>hLxEMjVC(-9TNBI;MXi?4rrUP?ujd>) zouHptSh?rhn!1cJ5Hdo={=XiZ4RdUDJA!kTA?GC1tJv{Q>3>bZ*vH>s-tPhLQ_Y#b z<~OzHO#cn<5w0@~b8q_nk_2EMsvkBxVfBfE@al7L2LSMYh&ZdLDBP&s4E8hNme8?qC#ycil4kDElMQm^Kt00(E(XGS|E0C$y6jLttC z&VMd#*~QBcLsC_h&0xf2?^g8+oUHDf4)s4PV}=eFbkc zKaVW?{=y^sF~slbDtpXFz3xz0m`>pUr8csa z32qD%wTrqLX?;=ViLgjS}dZawkpc zzwGTxcf93ZfpFgL9sG5ahq_;t_Vr1HOUNZYPgFsh+FR7@#5hM*-Kw7$ghml$Y9mSK6V4Q)j;nAL_!Qq#iq?khVr*zU9_ppY(F-BjOIY=@YmqLmF4KxUw-^j~s$)$Y29#1OCAmatVardkB7s2;}PB2+8udrp2XSEQM=_W)lvz z(rN;zRy1<~-?TJ3+5xJ7>Y-;Q`0y6ndFA6KE+hz_eXNN0PpPtPOL2o}jvI*S!6c

i%JC}lle>z`Y!^IV#`V!MLi9hQhP|wCyTxD)$TZ`=sn5z)6CiRce_ju{ zNLD%sEZ(L#dJvCr`dmi)y4?Pwvm55Q7q{i~gJ?yEytsK}lT`^|-WP}9)wk~&Elt6S z!QZtE6A^Ux&bbopPh^UpxQ0O`}SumBf76&YGu`ey+$h5?+RgJ zg)Ix5vQR4Ql8QoS!ERd5&l9ftBa^fKI@s>`fIe+Wk+s#2jkqsx-1`H}on*A9{eZ54 z!YbISL`Bl-JuU>p{{XEnb@tmQP^h=h?FkaGz!d9vv_Ae=oHhWJm^ek8>X)77>odI^ zw<&B>B&a7aH$AwaQzD_;Pm%`lmblb41dH6NHt^S3%{E+T+v^IP!=2#D6Ys32TPD!$ zRp@#gY|8IWIG7nScr@(K*r<}K3x2ar;#qRKBPvmy=l7^gfB4jO@-@RkjOETa$}t_L zG%ie?Eh7rO3~pV40Lg{Gw1QJJn}e-iz01OTQy6HNjqQ&k^Yzr`Gs(@J8P_< zH2d?RK%Ib9xQGyUf1*y7v$Y0=8LZ}o(N*R;BRrU2ERBJOs3sy$LB~ z{`_Kep|DgE1B>yJ4uqI^_yPKR(V9wWknF5&JeKYoRoO82d<#tq2rahTQWw@jiOk2< zqQMu$%FH{i?*3Cme7vYrB!W{s)zfA1ad!V0YO>+hliA`TUjjOb+3?jCTguoGrCtdS z(T4owA)W?g z*OGz=`3=JiR<39f;AW5&T7?;N1{LMHxIb%dNO{W>decp}Z09mBLQ6c`G5 znqXQ{>K^L@*RH422ek%0cmpcn(yVh|DB8&h^p9U^b!^3v3G%i3cRSF(kK3~ zBOk=QQV#VdzR{gCkqH%b=`KA5>p@*TO%`0)V8i%2mBgNJRAPC2^-6!uIH@gF0|%ea zrIAZwo{F%lBO7BP+c(=AOjV#3UOi=nE%Ct4vB6UMY4gHPNlR-w8)){s`?m<$Zxb^ne!|AVp74Io(NgN9yGo~ISr;4W*dQsfT))svB$+gK%K zUFthwpzyJa1jl3i!r}d%k*e7V5EgzEHGY58I*~xH5I{dY(P9G2WPj}ddt&_CFaVO6 zd?-JAg0FLVsO6vjm`I_AmiX}?p0({xQ2GTBm&q*bOgZ{*RPVaz0u<%~MYN%dK#N2@ zKYI?bp6M}{&c|}GwVcwO$4YgMu$q;eCQiD6{aOy#^w8k%7&%}EUk15=r7%x2f05Rb z6*Fm?8OOL*#g(_k;|pM4{D!ZuSHz`H*U?ovc)xRH#0WTVC7nI4B`24C~2L z$8%q9WKv~wSfFlVA?3}P${eTabx(y?YBp#JJ9t0C2x{>M8tzwIF0#q(QXKoljt|)% zPuQ#MUUQflX>A`d5=ziv2lWoKJ(JTBe03;`)#Qa2nRKpZ6rll#rgt_zu>&ITCf!Ia z>Pt%rMQZHtY3`ePCy~Wa%fr2wK3mDFIl>6t?Ruwuu~~tfAE-(jw~Kf$)cHAo}?>TYQXRf#TfgJ7?%~yv+52~}4@whL^wh!#jbt}@q7E((DISbZ$XH(Sc ziAp`wDpQn8@iQG&swnhi*N)u1ucd>;yIo|YE>Z8(zP`Fw#F{0um){UVYc zc{w5`A|0&#>HA9)QM+8USMG};q~-CFvxmXJ01U?)P2q~vAB?&L4+ad&q|-yK{6Z@^ z+4l6%##oU8p{z{OE1*6(6Lj~o!!?zY1}ruc_|j`{>Cr%afWu>L3MgiHb0LRUGg zoPQzwZz&&eWtiAmvKe*9Ko8|Y*ae3Ul8H=F9nrUMk`#cW58WaXFej( zKpy1sulhkjogPTw4Vkt^1FS$G)LL4OBA&Fw8PQ>%S z)!bg*?gj5*var(mJjmk+dQqR;ebqJcl2MXM>-JSP`6qBz^Nn_h1D8t**5YZVikEY~ ze(Q(t(ey@@DJFB_429Gd1bX|dc|Vt_nb-u$IY7jNo^vPS6!t3p-8e4d@I1~eb!#{@ zNYI>L(Ez!V7Z-{B@86}*0ss$&G#^gh1A2JK6fP^}17G-$4&_5s#H%|oQGE8z5x&FieozXUl6c$J47_t%~j)s`NLZVQR zBS$BBXtweGk46Mxn{2&G0#u==3OsghbMpulzmx!Ow3mGFgQMGPzB(-H(LjV+0*XdX zNM&0Zb>USA?y1ND`RO{^5?wE*wH{-Q^G^Dz9Pq7Yp+np}VVh4Dl$tt`J6J87nsmj| znqZob9(py8PiGdo%i)k~#yA5mwp1d+m*dfFq2`$_Eb;X@yo(HNd^VUu7A_y%tz`Nx z%|BcpRTn{&ID=I>8IXU_FR++)A6}dO`zTewV%f&|bTCe>61oe&l^9vSKE5u)KUTYLu)Wm_p)YKBg?Fl;k&nvA0@oy5qHZx`=`3hHaF+hivDDHxWf^~)11>mU@ z<=SbOUq0M!b@mz$5>jO|NM8~ZdS{%k@#TL}LcrqxM+xr#bFM+=q@F4}C=8O~=;>9E zoRAQm=j)xG9iLEW=IQE`8}}=&fUNxl8yDbCVo6r@o#5{UPUb8hnc@~HURf!NLDn?& z+Xp7jeepK^R8KG%=(n}rk#_S{i&)|}btZhN*GC*>SXT9W7rA-UDIzX3W6#*w0EaA> zjGk0IAr{gp;eH9@I$?89SoT!4r?V@?nYo4DclG+rX&Fot`or=w9mIf%p zZ|aS@3N^$K8IyJ4B{)-&m7lum6xyH}vk^j~$!Y7&F*z@xsECa*&#s!s^bunv?WD?PI5qC%~3D4%pp5n?F{J z$LdORAL1&fBMUH}=3Zc#Ebgik6-4A*tqCeXGl7((uO4Wzx1oR=i~vd5mLI5aj}Reu8FD+uodx1w+Sd3@*|kd)mmx19(TNb-^Xr~ zPC6e;$Ov?J;kheyhA3_%IK5kUuBe(mByai{V*|p=a-s%JP)=4f2!b0AAQWP!{_BqB zsh`JNlz3eaHe81HtLdWqf4dql7e#kVuNWs5{5m^O)+wN5ALDFY96Sdtp$K=Hr&~Bh zIz)1=4V#`iNT)05(yHYS!!N}Q`i@4?T18G+UU&U21cyl#ZFT7vf`7scCeH1gE1b7^ z+_kkiRQ9_&%E@%EaVU`>+Xc33^i;V+Z9aH0*T})Z9iv-;GTJT=J-ex z!A*0@e8*<``%f)DJPL&oTrCM@Z<{}uWM~e3L{lc{5PFF<{El%N_`MRmRRY4z9?f^P z(PprFhd8_1ZC&lVJxGsu&kt16Lg9x-9+ICZ9EuoyXGEc`f*&Qgd;G<`Eyp2 z%JZVM9h)Y_nkDFZUWgl-N%#Kz)5|eVOTG{wa|aFhevmUE{zWzDHd|jC*E#)0@64)w z)XrUC_0JXxm7T_BnMVV?H@<&-Sa-18+qZggNqVeE`MFJGuZUhji+reqru}~Bwa^DP zGY)a;V?+@j1$%_R!k0EWgDH;4#;pYMvym8$3B~WfUR|)WiCcFn=3WqpW|C03qCIdo zTPV;0sBp~WF}}Yi^R!ZIw&~Kl*r1(0Q8F34NV{m`>`d0C1eICk>F*%CR4%jYeA{}{ zjM;DK#kF^zch7D&IEQt7e3uE*fza0rySOF~t_JK;wS;^V5NC`tsf)RY+2<4z)yw-B z=TT$KM089J27(_HqQy}kg~=xFo(TZrF)top0ETUk8CeE+#oDm2Ue9A|YH0+h5ARJV zmTv-Bp3p1HBY-d(PHM&C>+z}0G4ql1WJg$>AW4U>k=n6Q5x)a2+pQSU;< zKDcZs#X7vvBeAe^P8^%<&wl zVrA>W$F}SpvKvpWZm78B@|OOxw8-XOlEG1<1^{TjXO$PNv2`(1r@57mz%*AgzByIs zfwLPQnlLt)FLD2<1$#;u@V!AQ3mC+3e_T)r^_Aro+9C;S1Vd?>n4LuRoRdRb*swY#T1jys>|rLbw^ z!MAxx;gxvD{decFs}zS0O)IzWm)txEr{ipa$UB2UxpYeb=62cQs`x(x(`@5opR2ej zg)^eFMy6iP;D?yr3PHrr(Y>NZj5%|3IkwO+>2N$YL#Qn$I7EgW-$M&}3P7R{x^aqlA zXKA4zm|84H$4!B9Ru|~gS6D%}f|9UltZW>@o*p!czRG$HfTY!D2sHpEdd4|^I;uyd zcEvB9y@AOqAH{O}-BlQIYJ$?^nuIU@j560w z&5g+`qg*CQ6jmV@L~DRo%G0r(OXf}3mF|K>LEpB+ZfKT<)(6sF+%O+(|8|Aj5A`x= zx+pp404KDr%&SNm20$kc;g|x3B0ULCZx7(R`yH^`8b2pXVpYf>w%D-U#h$B+OViea zs?6$Iwq|7F>t+?Rp@_}xc1g~{uPjBw?oOBwO*q{A4q-TF?FZP&@p0-p0yjMGqR0gR z!*Wrn1AF@#;XAYXeGiVI!Z0$aoU2TFS)4F*?|X?Mw)HwJfa?Qw2}N=F4MKP4ej_ep%q_X>cRVrI&EJlMhN{ZS667g>d|_os;A7{t#lM~Wz3VH> zRY+A~8S9i9HDo=Le}eZAhM@B;%Q$V0Fxf^`1^2~GP_2>ojyqt=0Pa!Pj!E?XQj%!4 zz3B#M{t|IgBVgyQS>YL2Ra%nlj`m0B2Gppc!+5QI(kK0;&n%Od1bw=TK0FmuL6vS< zsA}Qbr*bg1s_x2C7C^^;geN&TaMJXQyH+Jr&oyETdXmo!km6aDL?w2t-n*UBPxVd4#u?bc?v+{6hLdtw z)*8~`@TQ?izM&wD?;7bj%7){S)4I7Z>W=0wGbs!d!Dr6nJ!6_K>?DnG*CMETz?GtR`M-xqY^6nss{J~J+jH7(=PfPc1?5Zh$YOXT=50{^AK*ReJ;t=Yw)l8 zI?$Q=e=AK}bMAgd>a2-6Rz!Ouqv*+P6? zodlMITbASts3+|+XLaPVZF6kZY@Ez(;tQ=z6}DH;LJ4#9<2v81)+&zJO&#nsAGaT= z2so6{6VfLKR1L~Tgu;xL-+SQ+#v4f7f_~pJ(!#%su99V=V~Q*DEn)!hJb%6M3jpAw z7_8mGCml1lM`Q}Pu5KM#YfD+eS)eBgy)vF9!mAx3XU|C@I!&kj*y+y_4|%7C4!dyO zw^)w_c{SC3Ryw(vce(#0@D-LmT@(PAo0KsgG6%z=khG_XWCO`5gZyi>34f8F1KUpD z=I}o{qjYvOcr12#$~**NMPzf|KA5}>#T2JdZg>HB=NlyJDfy`SYS!la?2#`7I4 zx{O?UJ(F_sc3jD8_ieA)`F|eH)6PY;FW5 zPw__vb-r%o@%h6tR+C7tZGsx=*}WTn^GLe^^}W|KR}<@e? zo8=Pg?k+AIjc7e+qWZ61$lQ87IUp{_`LyRY0p3;$0QvvgiFbJYTMz`g#W4wriYZm5 zxOqWPyE}6>vttOK2MZ|n?PWs}qyG{M8Oz9v%@)Z>#wn~Q-Z$b!9~!$*?b|Al2cHr^ z;{Qxg#+O@rR71bD&@z~98f4*mki;Kypg^)^6}O3W6EGXRH49Nu_AtOUc5 zdRIT-xhab>m!mON`T&B(=u(K&=@| zi9iE^T1VB~PxAFU**!6WIkNCchrGJ9MQ(K)cBN&aJJd>|&{`%SSkrE3ON;nYA>*20 zwwUh&Od#UG-A*&3^@AA9-~M)5SB>=gY$5HK;Um*2180bx=7QaDro+s{NR34yzv@}O z*{@%}s;`OW3@puJzIpsR)07Rr4QNy$`Q?GdKT}#`F0eci!?zrCP<}S=a6ed8KUWD< zj+(A`-9yrV)qc2ZrNfR3+aaQOR{E#z+c;;f=~oUM3kz~8KE#QnxOqs*p(ZaF9M2RN zA|$RA*<pI*Nj4l>*!vMh$PDBM(2qzkPO3Dip|w(@Dh zrT82ngP?_8%ar@{$Y}9cDrP!>!JAW-AoTY*F?nXR+_}FmlukG+a$@i^D+T{L`&II2 zA2!=6ep>btd{Ehwv3t~9!66nNycvP8|4k8VnQ<7(ITJDa(x#W9WR+l!msse4JetWk zBDG0pCoNvmjUkymdO=A>qmmcxLE<#(Wf7x0Fte!tRtoef(P9lnq;5v*&ur=E0!c+!eGNxQ8Q{cY&$&Gtfo#_Q8(KK-T9?{%( zCp6W0B34#v8a1xyk;kFXc0V(B{I#jIdWPZDtMd7`@FS>qv{+g^84Cg1E)gQUlHz{3 z_@Vj_x1SBbJTKRrH*Us#ER`q#{deT25fQOWkubz^@S*ppTP2gy^3eM-c^8714>tK- z!BX|}?D-jv-&SE|O=COS=qBYS&Ht&`w@l?~T$<`lC}tm(gqJG*AP1ziJ`4f!(`gjS zQVROEu`%nCQkb{q;j=S%GrY~L2izrt#GDTr(JzT@dw(1{6Z!5njWYY9MSS5n{DK+4 zk!nlhTxNz=t%e5pONBv62e|poH^zE5Cy9e=jBZLPC+PB>Su&=G0AO0ciIfQ#`tr+; zOE}U<*rY)!X-IG|>@D7PiyOeCT)8_RZM?UJM~3J%A0aZOYkN5?B0tRy2Om9t)oE(8 zvk4l4uWh4yQ?05G@)_Y=&1AP%ppP=3=#y4JlPqI`<&YhMS~%nU+woX{(ip2m#KKN= zA-Sn``~j_h+3O`KSOM~RAjv*VnozSB&*~A@LH{?#$HJwAH&Bi58j zN&ewB6&~bdsSQ^p1IJ4ywrBlfZQ5uinH2Re08|l)Xlz&kK`2a5zd95js++PhBykAr>EBpAFFSwg~g)>|R zZTN!)H@SoEzll$uUTLfaX$Wd+;seC}-wX`{(!;jR0`19OQ9LpK~#{G zWG}cEWpUV?GyJ<+5oIGHu6s6jxkW%N3s{k&`5Ul(ok`HH?sBN!Q}b@U&>ALm7O*q? z+UPEv@O9VyodQNu`8o}aOFJMA-HCrH*sxtehb2$UX!JZUOoH-L6^`Xazd@bOi0$cD z1&5{-V)v{rF81mw{D}3GI8*@J{wliR@6( z7fLPO3;R@gx%ZD@7BBfcpcd5u?cKcYGd{z=(700R%q(otLLC$aFC$xMnp&1*p76S+ z*1HZ?CI{mK?ik6xI{?Bf(Ew#?>e=XnS3 zgxf@#yOk{c0+nJT+rxj#J&&7nfV#U5`IeT2Sb$$oI!Uj$Gv}y9f4r{H@YP;F0xf-6 zZO7D|Nu^p^-hAJM6&P642rzY!#D0H6nU98PqzC5aRnK!xpn6*dGxbi$Y6`OMWPd9YRz>wE&J2c@J*^3f^k4smZ7Vc3g zh&*l~)>PO{;LZ14un;vRlt<9LL}Hv$4Q7A-9qj#l>RkHm*Tsz!P>aLR9_5c~ky9b& z^nGt1kM?yOO!GDR3Bjx87YSqZyV#}+E8O##mH4By_B&Ejs``R@81)HInp3so)k&$C znJ+i2n(i9&>Rq&>A>V|_UCqV;>yK{Id2ew7etZwJPpIwc<=hf`Z^AIY*THVa<60MG z(og2Xy@U@0%`G-JQ=dGxC2~{m{VI#aZ*~A8&c`)HKSI9-Jr(!nU%5xG-e4%^66ZEt z9g+}84mL;PbZq;4p`;$i}mdgiPr@?6>N@* zb4aF_05!+}tTg>?ac=SNKJ#x_=N=Wl4k?JwRKDfch&c+Zbo)Uf(&c8{fLVtns2 z!|sa4KVPL)C61j$dXDvHH`hMzY~LHhkuJCR8-mdb5|7ClomY3emuJwJ5_y#Uwh>{+ zn@OBS(DlJJ{~5->2a``3}ZV2FFqBytAirAh4S2ch>G$z1LU~5F#bDe&m6* zH^wdaITZuJYL@5EPzVaVUU}SVB4X%JB3btQXSE&G{tY5Wo(#1DuFYrGm3?hHN0r!1 z+?Ql((mSiZ>pCnOSUPxKBAt)x$5fVl+^AS*vEma>Eh^}Jukzo0*Ezfw3SUGQwpr=msw{5F66 zGz+%i0(*kf@BGmLd!PlYc-#78y@IX>B_x_6DjH6qc%xa?t{)=7S|Mln997^UZ42wz z_Frd5-;UiYC~Y5~r(S#5_&V^VCRtj>*gkF#Z+(R|3hxdD5duMHFDO&Lo|JfchA`eZ zQc9Va?Xo=-Dzc=okf!g<6mH4o2ZOHa%p)(lORduHT6d;@O@&jgODVWe1Y8W_yI6LKZDeD9+_p z6phmS&h_z@S)n6sS#&(aX~DO2AFx1BGu|IuzEjiJEwIqJi60N<8UZ-#C*&m|7iY065A{FM&eFD!9KXfG>jnoBk1R z^ZA6)RhL3q)PKR_){}hQgu9}ytT}x~+)0v^>(3Y>)%pV~d2AfjHf6?LWh zD4M{&)OZxA9K!O&11=CH>5PCEBrl_ztoW&j>OGNm2?-~qv1Kx7PKNlNy3raTjyjuf zx4s2i|2Q7oo~k2lxxWodWte;ugVw2R*T<-UL*eV2rejJDvyQ2_!<6RWw6fy$$?dy) zNXcg0R{wtW`@>PeWK*OG0FVnWc-h?pfmobcLE1!(b7UEyIfPX*CRJQ0BxR_t&&7K} zlwSzOiAVwQf%v^M+N$P=<|l^IsWr>k@zC47M1Am7kG$fb;KW3;YL>!b5~(`Ei?jeG(h zUnsI1R(~#x!~jT^Kn2`UsP^VLFw8L1bmz|3NMJ2X3!wK6w0yoI9L$bPs4s% zJu{&on@s#ALLB$NM!WOKsE?zxwg3;$i2X60hz59Dv^JM%e2v^yLop+)s8usE8w(!x z|D1nqfhk+cBukhspBs* zyS&p67FrtKP(Iae_xKvu_AL+#|9!GSJMB zW}qlBwmi(y?^(gG0;#EOwR_eu=x}xSJ6@+DR%h^^lvIiTw{eo`O4#}XBV0M|K19Uh zT&PM!$695iceNz+^B+Kz8YxRuPY^FFRT@#55tl`C1>v>b%kyT>V>hAHb*NigE2!b% ziyFS)^|4E;GAPl$Nl@*cxrKiCbdoxZK#4NJ^NGvZYevX&@ANc$c>l8**lGMB^X48R zu?0*VK23CI*ey?x zpnzRvCg!m-i}bJ=Qda6Rm{=)R#y?1pJuVZhRrCuSH{$H{ZsV7=8?KF<8@0$wB}|^o zH}Brlbh&;`dryNF01Nw?_-bRguDrAqGcTX)$tWs|^QpIe`~)@nWU4>^2=B}O;rh^L ziFo?r;o{)Bs*aEo_qmDxb6NvqQUxhjQLfHE3#9Kp`+?n;8%w~gB7TX2^hY)21kcrJG`)S?(hW>~T)}?s1&PslCJtU+nQ;lfi~aroq~xU}M|}|s zcKI9XjQ{FRQm%n*!J;O8O9#cK_vkZT+E8g?XRE!`?Aj?|u_Bv2Q=HUoW;y&UHZkh% zXJ-A(9CD&Aqtr+_dgr@3<){4xN!yXXZOaAl7u4?l5pzDYIv1@Ijei5;e*N@&q&}oB z(OKWR)eflRmG154aZ_6R#}ceTwe>y79FHtoF9)osIV0GymTuhUm0o#1ix@1lL^5cy zIuM*Q9ZHi&3%om&OOLUaIN7P0qoZ!RFCgVHbL8a)BV;yqsTa!^#zAON>KG}`wjnq0 z0M8xyde@qXt@TAax>h$~TgcUt=(Wq@+<5o%UXV2rtHEWexvCre- zpQFC{dCQLq^mW7S>$>LAF%r>@=OU^SRYd6Dkttpo>d~#qs_7D5^`7;_? z;Y>cj zz#u=}Qq^7tF*w}FWNv4E6yIj~n(4wzKE#t4^!h&bhTUNWduc{YIO^TW?h6WX%}?K) zi_wDFdz((}hC3^m{@Q$w3Lpe{dxW#46g?_t9fuCR22H5#4n~EahpVS#Sy3g~-Jw}MjbqyhzmkF$}yoVrbe zd9M|^&w?$Eo0e`Q{I$6PszzM9&fchX2lIOMWPN_NtIUR?R?3z#8-~FrPGdg5RT^tV z##&gj+H}0&6o<~A^;vgZN%QI$6hx|yljz|&Cy$8hlf@M$#)CwDAy0eyWg;Kd?e+W9 zjvs!_g7EdjwZ>t1)RF&oHmbsE3}CND#Cn#`j+y=WzB;VR(p2sqde3~a^Fz2}@v}+e zW166ZxVZ7YrtZskmUi5gmVSt5@532=v9)?TVcD6bv_iMa4q5qhyZwvIYllpK(dXNV z2yM!QWeymAUA%Fz#Y+_g<=oNl#~G5JrC&tOSLmnHgoLGsx*t+A#2SNM+N-#}TG1r< zFX1mT)bJ2Kh^eZR?7*jW`gvktjyXA5lj9Pkm*?*b%~SEbElFUg2s&J64OQTct^tw0l)##`SHZ`$vK+4SU1MXcSE# zCSwB;8_-a>;uO2RP=n(yevotpZQj2%ZuA6i0G+JvGXTH~jUXB{Kv&g(7swdrw4l4= z#zCjC^hT3IZNSMSjqM5S`0QVc$8IqSp`In+>RK9bejH+Ye7eb5|7YXLVh=&$Hr_v_ zBSFvMrWQA$x8J7%Pkc<0&TyevZx7MFQpoh^nm)H}Z5H_%Im~pm{m@lRN4f=hQy&$i zvPUh{7?wxik`Bk~CB7YKm8$&+j?^^jCC%yq=(-WOMHvE~Sdb`IR+TdKR(vZfi{ovJV6?U@sGD5p1D34Y?5@Sn+d(&ooys&%=hT8lM~%rg!I3> z3(}^;5?JBM-uWJQ-?~w*q!;~zx@N}_v~cp z%}#fUvhUrD`SrKHH-9_#SNBL$L4!!8 z031mGV87A-#bp@_9)waUL$GQmbKO7SV=@FcpJwJ&rxl>x1Lp-jmZ{@nP9d3gZuNh$ zVJ8;-!3q%2qu|b}O}vtl;PwGAQl@2h5!Aa1MBDl)f&SBMQn*fy6T1VN5w<(H!mskM z)XYcSChOE1aC@{s^5zu=0FccJ>r->ReUd7j##r7U(&z&fr0=hA^^vVN?PG5$y~hT) zvuo?NR5VYJZdaICT^ecov_5@!s|wiM!8o4%lH)ZQ!+WZhEqG&!TZgo#`-%HM*Rhuu zuc^U?P?X17`E~rd#Bh!TxY#CBrW4}Ur~lTeH1`zc@F|ZRyt9;jtn6GI@Wc^7wb{f& z=;FcZuJCRq^?iO0Xn8Zd*ilWqxvdegRTH-HFq!dEj<|PT3UpXI$oW|$fvWua(q3vt zXT|MT0W0TRsb#-3?~03OK948tQc3AlURZHk*k(qNXNFv+);uEN?J$YbtI20oP;%Cg ze0G6@VXNvBC)4Ul;N#@-6#<&NrqK6{ukW(A{i8Wpv$jMV9ta_cYQ%K&P?1YI(7J>b z6n5dfbK)E(3T;uqWmGAUS^{l<;yvVo)lxL&4cPz7)!`PKrSsIWOWE0d;%*ZYU%S>% z@-X-LGYgfoBN?SAO(0E}IEfZcSf3#2uXRe)!93RTK_e6SKuQmA7E!Uq0uZ$8{+o!k z@%hl`Uxt6Wb$%NB&b==iZTDca_QpuNh&wjTrcL6mc$~V#5S|4oznH)BI(HF(wA+iM zx~BwjYvhMv!eTmox4uC2FkM7X1aQX@1N>IY*YeEq3tXB$&x7)@?QAt0;f%>{%_9Nq zgchd@IfQ0E`h;tjb`aPmIk(A%10uS51-*)jiVXh(1x?EO^tL6{U&DCb={V<>T(Exr zUG=HfvaMfuEi+j=Is1p~lC4`O8^Q|#_TpYU^V4SYbC7n;#?QgeHfYnj@P3k?>c@Ti znDcRc)gI^SYec++o)>t2`l}*uVlu~zFxf3yzRX$np4F4@IsUzoRrDnB-aN@a{nqEy=tPZ8e`#r6uH)Ma_nDAFN(_|wsKam(8K2FYJb0K~Oi6ffo zUne=>2k=?-OJ+I$tgcm(`@YBB_7e$Dr9j`giqQ#}zmmx8dGJk@LW91q)@P2nbsLR{ zc$~nri#Ej75z#bANB}e*H|}G9MMqOTtlGMM-X1`eUL2#f1}6xLz8sv%N**V(Q#~J= zt3Qj?8f5XR@Pp-L4rHN5{T8nM=SJJZ=I%!bRUY(-jH55TTU8bavLDlxO)3XsHFr~X zir?Vy`zUYEjxz5qXg-cWLj?dcFTTBm<8Y%jq+@=Uq1WM4UE5B2cVYfBu-okMusv|Z zj|>~IdAqSv?VKqy*oFUNw;9V_%9waLbV}DZBeFMrq|^HWq*py-HEt3NsUbc_2}*br zPSVOgq1-80J*<@!NRu7Ts)*of8)wH`yV349PfaEUgTAVh_kuYr#oV&!3M9i^+!o6b zE)*F*M(S-eL#hx-5KsF<%D(Libmob7?G0=d!AxR-B;| zySfc^x~+qB7f+)0a#U5pixlH3*{z_RguFq8bKl!j&r`nXiP#*Nx2<8v>07KdyP00m zTL1krkFquqvl$mlrgRH8U|L41g@epOjh4Fnpiy@A>BZZgvmM(NZu$~OdV0AWs{Xka zV19{@qVO9JgD%`Fu(^bv0?F@8D9-ZFrFtwpt&=VO{5ANp z+hjG89#mXG1ickwdQ9qZ>v1nrN38azN2#%oa%GU^vRZz$o`Ba+2R$y^<81i=d`r~2 zGy_Q9%{Anx3sY>odKl3g8i;)NUB-=$#q{eb{w+HDJ*|An6x~W49q)ckjIPS~ywhXK zn;}_z_LLN~Urp#HPn!P**s&wGPLaX?xT3pF@4(&N{+g`5e$y3JIV$@4DTFo^udD=f z!YMB=wgr%ZA!{PA+0l-ny;RE!@Yzl`s}Q#W_xd{1L5xkv&G;oRqDk<r}mkANM#o2(*BBFyd7uxPe709g{Q|?yWg^AGwK^b%l^yV>Et^+`q|kR_8UYx zOTkVS=|n$IQ|53+*0MU`_Zp-le(@cN=6b&O-_Iw8N@m<(pOo8;hc*_3Mh9W8!Y>v* zdC?40Q5YDeY&?Y?L2=8^iUF+_IX4x5`D8v99_~!W(Ln8ys|%7{oQCZ-Gy?9F%Ts;0 zT%U-P`lpmd^`^m5O5rMs!TmIzP7(iysJD!Y!i&0x2M~}hl?El1lx~o2P)Zu5hlZhJ zKt&Mgj-jNxyO9#9k>gVU+EQ7_YzY{VjG2a2O-Z%?mlAvzhh9O%I3jDL4KCG_*IH0&p5=(`B#pgxG(Io zVQg*|l4c=()2vG??<0>_;r+8c~c9_gcItLg9M;gi2F=1!}s^gnw!ZxrL|xzKo0<>BN0z}4uD zRFe2)opA1*hVZZR4Kx>5g{6~TR>dsi^_VN8P&TKnxjkCe9^Ezp&0((4ug@DI-38f^=eA?b1Chn7?IumJ=(&QBjPfv12rtxHKQ^sFoYs!`s zZ)rO{k#I)o12BX0KhihS8#^bho4rlVI$>rLNt|B0y~&DPNU#RiL)QqRkVy0Sy>$50x;@9Q406Kw4DvL(1(R3srmud{+vH+>0vx;1mR z;fFEh-(NSsV~IbxCj+qb;Fj48QR1}W7(LRp$9{X=U^rS&%kwtFKkbGH>N;r#52+ro zFf(t$Yrk*7mI3?ZXILXn*t86YeMh9t&{Ng=Gm)2CQY$#HR0(U4`)mW z0N`Cm436ez+xePU)g&io$MpVWAzAeD;1E-due}TFbeb}$a=EId|JN@&ZeiAbL)%ID zHIV;VQn~{B1F@^Cm~!r$7Y}C&Px>~)tgynY<$sYGgb)3BJJc5AG<;1GN8-R`qa=|l zr&V+A&`F|Dsa(0 zR7NgGGvc$-6*mFUtmx}r5A)_Oq`evO>k+fgVvnE|D(tSD6b9-8Tcv6<7LSRJS)&|f z!<_5VbAJNFKdc=3P-m^hdb%D{Kh!hZ z2B0SmVVXghQE;I)|DlZFUX(12{l-Jq$=Zxe<*rsm)*3tNrhOdtb=(m$T778cZe%DV zjB;uQ&aqt?+WBIj)Ba<*vnAcmYf3}uzQnV(psr@-b%wwyh6X$UhcI{KU%)3G4mj@N zn?sX(BleGmqpyvxfIG;|^(&_q4>vE2$I+fN2FME^hD}Iyu3+}}(#O!gX$E@@es?o) zqee-@NZx^L!Tk=6 z$%O1_iklUC6_o1HeFM$|6L0UYuI8eZO_t!o5X@$yy$rV((iYz0vudaE+{qC~B&0ii^zE?3rny2)T+`}yg$ z<{gZ0RL9lT2xZp=R{`%$#seR{pxERl#^|qEhU|LVh?{B+77qumP47>(vTo<;7FwI< zEzNuqTspD{S0v~``6B?Zbw`hLSUiDRN=|Jo8~Nj!=ts~p1jTXcOf0UoR#djuBGt=?W_MjZ5*o*K?up_MG_^iNC- zO1X*XuWqNGMV_V3GTk4T{ij=mP+f3Q7AeoOmKXbr&L9V|#G7deNSFWZfH#9M79cE< zwe8XyvP9pS$0n@1xjNmY;?+$YOM6I+XMB>EXgt@^?hpVqIBzZqv41gaW()+av9gQJ z(&756;sCbXJ=Be^bi{_na1kej21!X84xK+O7*q2pOn6QL&O867Z=e{TGOx@407V(g z2W@}5Fu~~A$4~I(T=dX&)E$c7-TehWW*&MVCv$w2SZNs>Pz+%>GF%&F4r$4bXzaaJ z{uou0ZYkq>wM$Q>Nbh>1Jp4+Q%@4m9snq~05}sB8Q#di&qiuUz-$_&dT$!v}_*s*; z)aZp$0QBi@VJT(({z~Z0z0itsF7KXdeUja?^`(H~uH&ZU^lf0NohZt9&V&d6=(|KR ze4IE!z;SA`Z-M2g1JvFac(*@CymRaX3F`m`Z8AIqV(i%xn?$ayI-o7;N!Rbcv%MnS z{ZQ(KL;8&Cxbs^394mMLSLtcwa1w$kH*u#?*o+Lee7SfxQ5r`Jx>~SY#geulYZqBA+kU@(qA7Ri< z<|PRH+Nnw`)NO=s*ZZt$aziG1VZ{hEZmQ~JLsvNax!p5k(bI*a(UD5znTFdrrZryn zw}jXV^GV{Bc57tK<_YPA|sF-HlmN-9B$6n_#=Xj3vkHf&?5}|=fl}RU^$dT-uYR+C% z+Ap!HMs;n{p@&E7#?kK0R0gS3j%2+<_hgNm$Cr;+_x~~Z3&^oJUS?BG&W&7G+f@{` zhzbusiTWW-94XGa!#(J@83%o9ULFm9VfWe`z_f-ls!smJho9dAH>@P-Uc*VkPz=fN zGI@+kzu5FIYP8<%W>sdB+0T*&bmfBi)7zAOh8D94^xDWi@4Zq0b^8P4d%m?;<^Azp z(x~`Q$aAJm_0<2Qrb{rTLG^+awmF9na^#d-3Xjh5Hfu`M-jM zs5eas*ZDG5vhf$M zuCwGNz3NmG&--+2?IdS~FKpYK*7?i$7d{c7IMagES-7v=Ha3)-=ntMHSG3iz+xXi! zHGKoT8}?T3&Qym0U|Iq`crSRbA~Zt{>9>gvc!VEf0RVjHPi;LuH`ac^x7$)DvUz*k zsH(Ybi$u8B8ZcMh6CRYfPJUmh?!|YlN@BDej1B0+ch&-Prf_2QEMlLs4x7civaxN$ z(6Ife3mwJ=+@ik9i8IFZDA0z?nioB7BU&WVY>S{bh(mSwNNn|e_~ai-dU5%JTQP>) zWfW9DsTb8JW4v2W&iG{`^G3I`HlTl!w`@|EjRyd@T)#~G1am;*>tYU93_!7jk&R1cTuyPVXs&2UkG|m&MLH;b82?t03kPXjvu%h{NV6LhD2|ROz1Cam!3fH zc@d58$F>ztSGDWb+EqWW(Lb>P9&p2iPVA?6i)wfbfN)K=V`r8+8L7-aZ5JK2 zNK2n=^tKc<*eksVUnU4Sa5#MS2dz804cq7zlW|_pnN-ou!|bgm>ApG!d2LSB+IGdT zsY@nz(*}J!L1Nqx5Ha@x(4>SJrQG94FNO+o+;}f^Bj$64Vm^UuSBspwJ_-M@aLrfY z&?iRgmxNNX=@87>Q8aWJj9>g4z+Aa~GA6kh6alX}bTNqtg7n-R)NCXQBloUU)EisG zyMfY~Z#!b7cokDLAT(DGXdP+TpMgST`@($21h=~6nB>(d?O@hf?P5{hHv!zc<@Kym zan2wqMz7elLK3=|XDUgnzcP&xd^q}!44*$=Xr`GUs>&bwJgl_ISdclV#8y?$eM6ZSSB8vWNa3s!@J$MXAo96obYqxNzkpA~y^g8~;dC+2_<2TpA@ z8FyI*3dsVNMa2Q*&EJY8-(O3tmSn^z`8@s{#7_y@!TpEY0|G7vc%bFJU6b9-vCq?6 z6J=_+OB6Jo6%_zvd2kA5!t4cf-^L0^@#HI2VKnOwJqvP%I8J(qH%t^*JgoMDg=@aX zWNUS{+49e5^}GqG;M*kZ7O!D>680(RO%(CkS>5a8cnK5rHoXTG(^7eGurX!keI1~; ziw~ewFhbM56HStQT||%*hgXzsYhDZEl_N4r7!(H&_f4}_% z$EFondwS%3iHnN)Wf=-ei%QC={N&;e4$b)qNh&v%JyrNKtIX}2pih>s)N+{a;g+s7``w3s|9@_MJne%Tn;>muvZ0}0Z!H!4?DyPV!%`lfE9Pst5VB z@y-+MsF@R#()ZgbCKMZRPj)H=XtB+}>-|FbKVUeX3r7msFYlL$O+uoA5kb1YLr)4{ zRCoLC5Qea?r`tKaB3u9FV^Do%H;7S?@%Y8w;@g3ewo{iHT$>OB09HLc*b?g{#&_P7 z&WTd^#aIKC1gEex#jcbNyrZ7S0a*n@s4Ru@N;DdBfte|soopk#@v`zyjVDfmn*yGHu)J& z-Cp5xB`xPfibf4|O(t>Z$~{iomb{Xg*oby_G$p6If);EuSjV&ipeDIo^D87}Vj{Pj z`F+`VW!!*ZHVQ!gzXz-bKppn$B*JeZfN+7F=%;4upd$adyA{(a0U-BFhQ8W?XBztL zC!3KJDbhXLMFdWF8lo>Xu>pXpcp^==5FZg9(dz$t1}7Z-phs3+{FsAr#RVrs1jvYl zJ6Mz?g9-iV0h<8hWwE{?JFH+ClfioYmaceUm6EL|G_(YKr_^#j0owZ2yiN_0^CkP$h%Yyw(3(s-r;mK^`5ilY# zd&;4Ge!FmO99cS<|ycS2>|@Cq@54m z+G9H4(r+JpM~d!f5B5myH7je`@~l2dYgq+%IvMFeT7)};jElNa#_5r|aYZuYE4uLU z-K|e^Q>v(@6>W&Xq;zTZ;As0&_ru6-+S!UL$7IH2Ea&Ca00*;gsg&dXPGgmlo8;Ad z5NPTsf>PQ z4r>p^bn>N8wZXH^yu>CNQ&n_y5;D-|gH&F?IfLE1aJ*QbrXmm0m4HZnbW~vgK{GVY zOlbH0&-Z$<1INR45$3KM34{UkzbWkEk3qyS_eL7%pH zSQ#U};hC_7eY2vp9Jv-R?3c+hG^x?h|Di7JFrk*0M;0a4Ywio#v@>IkuqVWs<20#EIOP;7zVb_oYa? z;V3&8p}kOh)l>ai@^ukg9GfkBK}}LM=?iWwreGqy!Y}U}s(Ym(g#mB3HIv-PI^;;+ zRyMQ?X)k?c@sxDBgB7-R)JN2%R@1Wi=Zw))3qdb#$pU?DbOskkJ|cB%jWNcz7^)v5 zNIZWw2+4HcCe|D48r60k;Q}(to%oGT>GPM=&Ft1!9(Gd>Y`CwP0;UVBe%-yW!Ip;; zT=ZR>+x=YQi?T~3Mi8B_;lKT0yvWakON5g(w1=iTP2C%ZxqBn3yl>)3Rxd5`v4Tyv z^in7AnO8Kk$>qn^-w*hWMQ-+dxQlmn&41)ix-orLjv-Aiic?C%`pBEJuz*!Ac4Jvt z>R}VWKe|$FDOJfNu4pPpoD$^7yGPWZ>>}GMX$MuE>VcKMDwVxzFfF4>XZiBv$zit_ zvCPtv=-=C3em5?wM-2IVU$rJc!Yku+1plI#;BQh`i4FY?YOcNP*_ zqv>%N-*%i$R8$0dB`D4od1X*AMyY5;$C>6fye{;cg|D1JW8HLAO*PqR0g^9U|8_;B z>6iWn)y^3h8VZrlHSV85#6ansR-?6=rLugQ4``wj%N!l6O4g%A{=m2OP2j*6N76n= z?VVyet{wj}6y5D@eV3xn-au@D*84nZ(!|qWp}XQeUZ4<}9x90j(vQ_3vgW$sbT^k$ zWQRr1;>`8;tg7F|$a=xx?@+&KS!p?ZH+9~VU+)Q@Ct@+3JmFFYY%LNPvtm7K>mc#A zVf-Yizh7~^=7;zx({qOxn$l)ENfYY7%JN`^>5J-Z>ufonM25`Ih7@E$q*Plro5<$< zMFf7xa_rIp;x`%gmOd-bjvdsmt$2@j9%d~nw)e~A%-8x=yu2nm(oO7jWEoPb7DJA# z9%|HwI?_`fU(b3B>A%7PL!Rjk&?@wo8I1~avSVw3{l!QGI8PKiXk2S6D(EU~@ASQ1 z933`C8qM=QtjL;my1z#Y-f1BQVYCb{>H>KkN>{BOwKULDf+5TK?uMIO?}E@xnR{!LeVdUqvOGCX{1;H1%V{dfjiWbt-;{K&o1!%WhAS)F&lwICDp>YZb<6af zDD;e<^MN01e*a$4+^4ZPBNO=ky9SFGy7_9RSNmiQrE+pn+ zI{i`p2LMrLp$wbHG6P8#gbIxZm?U2j161BxN^pp0mz6#r1RV;R7>Y>u7&KNuQ*I2N zx1*sMo$eU=mKEgbKh1}{$1AI;dT4MGK5}9KINM2&8D|e}M@?4T@v=ZQ11B222jG$=!rI7u62y0G5b7fGH=Z;jvy z-CnyMw{|A5xAQ$glSyYL>0&QjL{htZvW|(m**H7XDLR~(tT2efNJpJR-9X4jCm0Rh z41|7@_Po26^$SH!ke%3Wx^!AyT0DKrQ-y5sk`mU)d0RL-^$DcH>Bv z5X%PfKI1P`k2$q1?{?+5{a)>2_uaU1KknpE`pc~^6x$+^!WGRkWOp%*6R_Xa{Fzlt zi&xmyyd*zOyZBhkfBfgTNh9%P+Q!lY)_RsXqBd(ZE6)`Qz0h}3z6V7O-mWnXy1oI~ zJ6#NjQI%QiIaW{4#CW0<w(Qad;0wdcB&AnP0 zIcuHr_G0GbY}M5{2Q@-v@6J}7uv2C-qWJQ@u!Hg5Rw}(&m>=y(V4Ru(gT#{x({ran z?)FPzIj5~t@p;g$qq`+Rv_<2@&11HUZYqNr%S%Pc^RBI#9Mzimo2qlD*o==JsBvj! z(gc`n8|t_p#5~k(w&37-m;M**m~5N94t@bUq>O5TPq$cGt~s%f-pQpHvi=z;W6Jac zpoDXO|F+J#A&7gfaRq+XOg%ZwEQ{$#XnM#K&VkQCy4tHdE!@E!QfJk=l2$xtej3} z#kRUXn2ki;z0ubIND{j~2RQaMc$X0~^nE>~<;5$j;L`T3wU@OFLS3I8wBLLe_1tl| zd+=r2RC4#}2EL%*<(CUy?p^KeiE?qhz7EQDA@xu3p})Edq{KbBJh)Of`ESxc-$6Uuo?idA8>{%~N*s#x=E zVTSKo^ua&9Aq@lcXN_6v5+um>7T^u4Bl=`R{je_PiGZCrRWVsiuieh}P ziexr=T!8Q|$P&}rO!gmtC+Z6bubi;SV>&6H7Nz6<)MFPJ(tc_%V$QOKd)8be7Ry;V ztVXe7JR_5XM|*lWoU+SUc)kFFwwT>Dm2gS_NMq`~oi)ce)8@?tfM{NSH}QQMcOF8P5xi@@E;QZ3+emSm!QC$ zpNa7)8FAs+punJPD`yvPZ?BXe-+tsef`Y-N(Jmh(irg!rFBVPyKnG%Pk3Wv>8Y64E zOE*-3*ZIRk>B*%d6Kk>pH6XJoPwrVir=Fv_+@}k69D9%Ft1Sz{Sury!4+wVFnRMcB zGw)-a9F|pKLMQDXLl7J8^NZzFkN=INqRz3X%}!X?IwO@+hMg85M)#s6epk5c{q-q! zr`M&7vxU0Hk2xWr5y zGDa&@q0p+!x*=tleUhUJpXI<8d&*!NJWuU1X zAWrS|+^br$UH_BEw2=XPQbcE_>(xzuw069Evi@e3+sQ$;%e_c+yPiU@3}XwHc+fe1 zl&g2dxe$fbhi59fs?@y)>uvHsK~Ei+kC(*Nm=#F+d18pvzf!2;Fsw#G&f<^gntc9^ z6xG-2m1E)NGPvjsgyEGRd>X(b5RU%WNQ(cq#N4ptG<)>)^ipanjb!%}^@#k>RW?T7 znfMhZ!-JuzVgb>jg1QWB9v6o{ZbFX(-6O6QiO54+Nx~=H9jHX*CfW2z7 zn;~HDRu}kN(%j;@dgYDs#eC-U=g&to!dvU?g^S|bCmeGw8?w1S19FM8o3UQL71+e4 z#U^0cB5M`0A%iqZ4@-)dexyx5q{U4a=JhjYSWH%mKJ?rH^B3mzPRLZ}^~{a1AYlhR zv*@ae5R6|DGD5xw*aWytef8Xj@Jqfw{@*9_D+7<2D@3xn)uXu2r(nqw12Yb z?{}iB9wHYDNy3H3m}%0#BhM6&NGF8gHT~#k{$3GW%ygb|7bZNkJ5TvdLJ_6$dEsl4mcvEgopTB(QK>rTADd4Q9 zrf@95%lvB3&$eSB78c5wu{^TI-{KWN&De zU?q6LXG{TgG5epl5=@*MUEk>tKjCNu>*alH%=;Yum*cQdgHezgGGNtlcs&BySzUZg zPbWj~+#kC8Y}dBru1ULwK8~LuJB3@jNKtUYS!mR^Jkzgxtr6Jv56plIyM#NCXovP2 z_Qc|Mgc1eBmBA^h%K4b26U)6KCtBz9pbaID-!=&(>*_R5JV3^UcMp3cqtd(HP^o6$Xwl?;s z5?#taH)PKMzQ6g{_zKDR$%PIG0SGfQVZiIU>Y?UDP4knVqb*=-sxvt7jR){Wl0qe) z;#qKJ56_>4m4PuTnY`Zc^ZnnFr~DT^Yf@_uR#q`%pouv#v9`ba%x&Z7-LX<%(ES!v zA^WTrfg#%NzsE4Fcl+8=`0KleP(FS6pDhzrWk#H;V~8kLHbq`HTItfLv)paE7T@5p zjn+`b6i;5=erGnQ%vb56NHKiJ6fQLO@z}nj_S&eN$bVb4_ba}N+GrA-RY(Sf9N6oe zT8`ZRa#CD8Y}*x1_ZDD`VqEkomuN>8wO&>6Kj`U#r4qQmev9jBT0l?FbO9mNy;r~` zDN${3St-FxFcn<~b0_D+v^3lIQR@I2JEUha?z(puk6_g^ z_<_xO@!{AKtalXJ?LK>{J{zwN8GD3%Ys{Wy#*Cl)m|$b0D_$fVXQ5PL7iRK3x zH7kU6Rt0T+XD-!t*dI`gw7M=Dls_f&7Fs;&@cXP0Waw6p7+3;3OrHG%>Y^vo(JgAn z6+m@v=44v~(>;_?1@kv=Z#}uzpYa|!CQ01uo)2U^SrNw4i3jv8r&anK2_^EeM!rn zuqx|h?k#Ulx~rwm3y6pA{9B3&0zW+7G0)AZV9vH?o4dMda?KC6{I7`6g^is_T$&OwohdsW z+)eLm)>tAIE-(5UMDv8OKqiWsA|$f~=`oFe2>Wvo=zF%>709%*l4pYlp*ftylojI1AH>Y+%06>59Yf>ZvTLu4fRY}p))V74AxLseJ9!m9A_dy34?`A` zF=Y_s=fw^CjceU-eR8USimD2XzH~Hk-YG_1HbW z_5iqGv&v}*b1CuzBKLL)Q;s5b`cFDPRXKtMT@Y^Bx__t70wj0uOJrj85B>ad7>)hl zzUdnoW@~P9tnm54q}VfYUS+MuY@JT$vn%NM`ldSw+)H(~u>y00Fbb74=Xkx%TK4AQJYF8}=(Jz3Sep^f%$l}4{%k`+siiG-ka&{8Oos4d8F9`MD4Bc6 z!PA~`VOldcEix$dagnyVbjeC_s`=vWJdUWzQ7kNSjJo#f7UsfwJ%D}BEj-(23-k8s zRVaQ=`Ghh6L!V7Up=p&#fO7=(GBh+KczG`Uv7wPsDh?H2;}cSu4OQP~&GOt?c7isY z+AmfYd!M#My6V=7m>jee3K*dd)}MN2HpKgeh~n4LS>}z=4T&p7{+lH2HX45cg_#B% zcF84QBtc{|4WFNDD)JI`DMB9ZZ%*K^DAGJZ2k|fMfjDR);#mOs>pG%m>wx^D3%_q6 zURsFE^}8kbBPyri+4?L< zL%Rt{lXDZHi08X!Zls6w#3q_XXXPZ}@ru@iAc=4aTW4k7V&U)R@=2CEEQ|tGw|uK& z&c{m&{H$HfQ4hCH;kK~zfpH}3ml(4wYCR00kIET7Dzs&ti#UIWW2~HXGA9$?>V9M64!+!T6^TJi< zRRj(R-aU~egv;kC(rdZOrMztQi`wdWoSQU5&Lea4d6nqY;RDR6s_E~kIln{Y#$P)F zpmN;#JCVe*H4IalNOel=e}8{AgTBjMb3Mx4o|zhJCBuiyDQ`E-r41Kre{*S|m0Q=9l^I<)QRAG= zZkhP&jyP-ex#}M9+=h}U^Lj)wr$G3hy%@&{78szOnV5%ON365!Og&?waT@WChc;Ek&N7ES za;xL@Jq3I~fA<1XEpEDyW_Lj!5j>H*CU=&sem&zNSx;QKDI;e}fDRCmG_1?XU!2e13P&0w8szebr$+(s$6Z}IcpHb=u@%wYxai2-V z)c*O)_HDn7wot*`PWGi9U@!e(X_?(F|b|9r)LTL3=H72n|P$5WM7#J(h{^3C0 zU>@w9_7j0&gU=v}@EBVabLMk4gBCg@Oq_1=^qmucPr~)V_}(8Po=yqpu2!5KU4Ek% z9e~J8Vh{sok@RUSy0v59++@^b!6r1FvKxDW9iF9%$zl_CL;tp=3l-@jGi_|3t;2T< z;I1)f_UXTcMpO55T8o%($Ltfzw2i54voEjEBZz;(+ES+-i?4qj?0xhd&Vaj>MG#I6 zVTaF@{hG*{{jqs#K24^ZoKdfT)~;B%Cs45W*`SR~2JCYYf5I10vY7`*o8Bk+&q8Vs zG6qMP_!8Gu=O%4|AV#2u5W&4b7IgKpcJ9MTWs{6t(9ctstM;?v@*dmpf+Zz#V3srA zD)kaPb4j+BI7v9OH|cYgdGpL=X|>w@+9?-qSiwM*fgvFvX+Vb zgM*^~%^r5q6lixjT1H+;^qP7m@GX zYc!4nkD$#v+S+zC9G^8)A=hdm#lr&2Wz;LVm*z8?>Hw&j_ab(_Nw|CTpeX>G2>ome zee;yeO72$Ct=-%(Rb4J=VJ|k1Q8fc}1B9*TFv^^u<9jvSMNk^qg;%w%^!NH({txC< zmNxc_i%Bw%JN7XJoi?d>+ucmxz4L^1f>)WEyDU9z%Q^X?=zYKhtUN87t&&|7a@Ql( z>X?u&VV-MQ%U%$>6zTT=ztDmDzn~)Uzv{!|{DvvI(8?$HOH6foBBa37&(k|KB_prA z%0DbHsvse)8p; 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 +2WMtk?QUh* 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

H!aI|Eq5< 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%0DqFsNq3-2Bk zTSO)XVQ2iapI>7=BuHR>C}a1!r1K;o8l~FHntkxaCfS0{_8d zTDR>=4%;Q+v$rjmD50-ij$%d+swAL}1D=YMQMTNaaG4V}+G}r$hM%~H@|@!Mewa#g zBo!X^5Na=^f1hxd9ybMkHKF~-TDztJyA~eidGmm~o~*HNjkHo83W&(RVATD1PO3A1jq@gQfF3*N9l(gcm0 z-;p5b%1bW3Gl8LZLocei-^*S$SdP-1;#yxnrHej69`L1n6l_HYPf$mWIASPuTR}{! z5xBrKHAbk2O6F3-94BWGxfN7CrNu8d-4XfMNehx~N1>6QtxUbd(A zdZRzGb&*5E>cyHhyX(4j8|SusS`5#D5F}T#Hz~mHLX9gA%kP9lvRfcz=kJFuTae+$ zj&=R7ZlKV&-cs zdtvp*qVTBk1!Nmz^Yt!lJ9ScrK;mqF9pw)Ss%ZgHcTDAkDkj~#TZG3 z09?~;`^4%9I!8W%s5?BMW>MHYi_KCcQPqZy9_ogj2TGPpO=f6;Cf++tY^XnxvH#@} zTB*l^y;kM^Qg3ol@WX)LqZCM#Q%f9FFBe$W#ou$1?1Y-+4 z$SX%&A3QWIsBr}mjq4)})nkH3_95>dzgelb$Vzy14+aSV8kNde0;~lGxV>`M(g_^+ z7^vrTQ>5GJraQ)oWt<@A)ioL3b-lpb?*XH0oDzD*W> zD?OPks(hu>0lyzL>;a>dIJ{0RG>r{LnR^6uZM+MIv2h@{w#9${!O|`N{+2BPxK3>kQgP41S-b<&NR4-Wp8OY8;>>l!3>&D+c?opOO? zV(wq&p>M1BH=5Ux3GJPMgud%X+&w~`_Tnd;ef6dsE>n3`Veyp!3>WgVW&9L zmmr2gcju>hObrKFA`d*th?pWEALKG(n2QMA>z6vRQYmyg!X2W{dM#$WI z=*KZM^>59h2~>J%)5r?XQ+q`4eW-qW@U7`z+wZAt`)EJ`gpbEhr?LS! zZ3tORDMf=Kwk@1Ys}>=Fz#Z7fEwa#?Zhk3{QUwSe3;&_Q#}5`xpkn{Zu0@2uTGK5eS{QKG9#YKT)@(>Rg#$8)|(TP z8QNm_$b_~#z{#Fhz`QI^<_cGc*q7P1ijZ$*hsmkN)h;ClX!Nf+F?SWAOI^rPV=H?9 zl+n}BBQZ4YSpYe@yMA@mHHCfu7$`qaW6EW1Nn~MNI-0woB>eVCO?;O?E7WzO;%+^M z?1)!6+S+*WRx{ucnt61yQTZGMd?jw<+}{);27jxS%NyK0FE@)Iqea@qwN>j$Aeh4_NtmdE=0R$t#f7!KM|a%0ffg-PcP( zgu{uU-)SjJZf75z!--jVFvRYoO880t=!W>hyM$;P)&=ZdZr|oy9FsE+3Z}eQkIqe* z3J8x{gpSFA66w`%qhuVrJN`!O?sF@1@n%H28yZC;EWpcXkTY}v`)xub!&5WM3;`-@ zr(D%y^7jGmfj>1uJhtx*hwpa@&7?i~{#H2nGJa`)=+%LO+-UJhKZ z+8B8twJ6!KWr;w_+RDDS{EB!Ff_07{In)_tf@QDI+qtdyF&za#IQHIl@wyf6PrG!V z$iBZ$t8qoQeV1JgVw6n}Rq$QS{n->aVLh1fBY;@lrE%No{hZopS~g<7F4rnW%{ptJ*dCFk_I6%HJg4D&CF?4K<3YrieE#H|kp2Qa9Yc zn44aN3iO943{J9`~?9UO`j|-{MqvZguHTHhw2fY R`Jf!sSUvyWe + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/default.properties b/android/default.properties new file mode 100644 index 00000000..4513a1e4 --- /dev/null +++ b/android/default.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "build.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-3 diff --git a/android/jni/Android.mk b/android/jni/Android.mk new file mode 100644 index 00000000..7886ca39 --- /dev/null +++ b/android/jni/Android.mk @@ -0,0 +1,92 @@ +TARGET_PLATFORM := android-3 + +ROOT_PATH := $(call my-dir) + +######################################################################################################## + +include $(CLEAR_VARS) + +LOCAL_MODULE := openal +LOCAL_ARM_MODE := arm +LOCAL_PATH := $(ROOT_PATH) +LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/../../include $(LOCAL_PATH)/../../OpenAL32/Include +LOCAL_SRC_FILES := ../../OpenAL32/alAuxEffectSlot.c \ + ../../OpenAL32/alBuffer.c \ + ../../OpenAL32/alDatabuffer.c \ + ../../OpenAL32/alEffect.c \ + ../../OpenAL32/alError.c \ + ../../OpenAL32/alExtension.c \ + ../../OpenAL32/alFilter.c \ + ../../OpenAL32/alListener.c \ + ../../OpenAL32/alSource.c \ + ../../OpenAL32/alState.c \ + ../../OpenAL32/alThunk.c \ + ../../Alc/ALc.c \ + ../../Alc/alcConfig.c \ + ../../Alc/alcEcho.c \ + ../../Alc/alcModulator.c \ + ../../Alc/alcReverb.c \ + ../../Alc/alcRing.c \ + ../../Alc/alcThread.c \ + ../../Alc/ALu.c \ + ../../Alc/android.c \ + ../../Alc/bs2b.c \ + ../../Alc/null.c \ + ../../Alc/wave.c \ + +LOCAL_CFLAGS := -DAL_BUILD_LIBRARY -DAL_ALEXT_PROTOTYPES +LOCAL_LDLIBS := -llog -Wl,-s + +include $(BUILD_SHARED_LIBRARY) + +######################################################################################################## + +include $(CLEAR_VARS) + +LOCAL_MODULE := tremolo +LOCAL_ARM_MODE := arm +LOCAL_PATH := $(ROOT_PATH)/tremolo +LOCAL_SRC_FILES := bitwise.c \ + bitwiseARM.s \ + codebook.c \ + dpen.s \ + dsp.c \ + floor0.c \ + floor1.c \ + floor1ARM.s \ + floor1LARM.s \ + floor_lookup.c \ + framing.c \ + info.c \ + mapping0.c \ + mdct.c \ + mdctARM.s \ + mdctLARM.s \ + misc.c \ + res012.c \ + speed.s \ + vorbisfile.c \ + speed.s \ + +LOCAL_CFLAGS := -D_ARM_ASSEM_ + +include $(BUILD_STATIC_LIBRARY) + +######################################################################################################## + +include $(CLEAR_VARS) + +LOCAL_MODULE := example +LOCAL_ARM_MODE := arm +LOCAL_PATH := $(ROOT_PATH) +LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../include $(LOCAL_PATH)/tremolo +LOCAL_SRC_FILES := example.c +LOCAL_LDLIBS := -llog -Wl,-s + +LOCAL_STATIC_LIBRARIES := libtremolo +LOCAL_SHARED_LIBRARIES := libopenal + +include $(BUILD_SHARED_LIBRARY) + +######################################################################################################## + diff --git a/android/jni/Application.mk b/android/jni/Application.mk new file mode 100644 index 00000000..82d2a1fa --- /dev/null +++ b/android/jni/Application.mk @@ -0,0 +1,3 @@ +APP_OPTIM := release +APP_ABI := armeabi armeabi-v7a + diff --git a/android/jni/config.h b/android/jni/config.h new file mode 100644 index 00000000..ab3190f9 --- /dev/null +++ b/android/jni/config.h @@ -0,0 +1,97 @@ +#ifndef CONFIG_H +#define CONFIG_H + +/* Define to the library version */ +#define ALSOFT_VERSION "1.12.854" + +/* Define if we have the Android backend */ +#define HAVE_ANDROID 1 + +/* Define if we have the ALSA backend */ +/* #cmakedefine HAVE_ALSA */ + +/* Define if we have the OSS backend */ +/* #cmakedefine HAVE_OSS */ + +/* Define if we have the Solaris backend */ +/* #cmakedefine HAVE_SOLARIS */ + +/* Define if we have the DSound backend */ +/* #cmakedefine HAVE_DSOUND 1 */ + +/* Define if we have the Windows Multimedia backend */ +/* #cmakedefine HAVE_WINMM 1 */ + +/* Define if we have the PortAudio backend */ +/* #cmakedefine HAVE_PORTAUDIO */ + +/* Define if we have the PulseAudio backend */ +/* #cmakedefine HAVE_PULSEAUDIO */ + +/* Define if we have dlfcn.h */ +#define HAVE_DLFCN_H 1 + +/* Define if we have the stat function */ +#define HAVE_STAT 1 + +/* Define if we have the powf function */ +#define HAVE_POWF 1 + +/* Define if we have the sqrtf function */ +#define HAVE_SQRTF 1 + +/* Define if we have the acosf function */ +#define HAVE_ACOSF 1 + +/* Define if we have the atanf function */ +#define HAVE_ATANF 1 + +/* Define if we have the fabsf function */ +#define HAVE_FABSF 1 + +/* Define if we have the strtof function */ +#define HAVE_STRTOF 1 + +/* Define if we have stdint.h */ +#define HAVE_STDINT_H 1 + +/* Define if we have the __int64 type */ +/* #cmakedefine HAVE___INT64 */ + +/* Define to the size of a long int type */ +#define SIZEOF_LONG 4 + +/* Define to the size of a long long int type */ +#define SIZEOF_LONG_LONG 8 + +/* Define to the size of an unsigned int type */ +#define SIZEOF_UINT 4 + +/* Define to the size of a void pointer type */ +#define SIZEOF_VOIDP 4 + +/* Define if we have GCC's destructor attribute */ +#define HAVE_GCC_DESTRUCTOR 1 + +/* Define if we have GCC's format attribute */ +#define HAVE_GCC_FORMAT 1 + +/* Define if we have pthread_np.h */ +/* #cmakedefine HAVE_PTHREAD_NP_H */ + +/* Define if we have float.h */ +/* #cmakedefine HAVE_FLOAT_H */ + +/* Define if we have fenv.h */ +#define HAVE_FENV_H 1 + +/* Define if we have fesetround() */ +/* #cmakedefine HAVE_FESETROUND */ + +/* Define if we have _controlfp() */ +/* #cmakedefine HAVE__CONTROLFP */ + +/* Define if we have pthread_setschedparam() */ +#define HAVE_PTHREAD_SETSCHEDPARAM 1 + +#endif diff --git a/android/jni/example.c b/android/jni/example.c new file mode 100644 index 00000000..278b67c4 --- /dev/null +++ b/android/jni/example.c @@ -0,0 +1,283 @@ +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#define LOG(...) __android_log_print(ANDROID_LOG_INFO, "OpenAL", __VA_ARGS__) + +#define AL_CHECK(...) \ + do { \ + if ((err = alGetError()) != AL_NO_ERROR) { \ + LOG("OpenAL error: %x at %s(%i)", err, __FILE__, __LINE__); \ + goto exitpoint; \ + } \ + } while (0) + +#define BUFFER_SIZE (8 * 1024) +#define BUFFER_COUNT 4 + +// simple non-seekable memory stream +typedef struct +{ + unsigned char* buffer; + size_t size; + size_t offset; +} MemoryStream; + +static size_t read_func(void *ptr, size_t size, size_t nmemb, void *datasource) +{ + MemoryStream* stream = (MemoryStream*)datasource; + + // size always is 1 + assert(size == 1); + + size_t length = nmemb; + if (length > stream->size - stream->offset) + { + length = stream->size - stream->offset; + } + + if (length > 0) + { + memcpy(ptr, stream->buffer + stream->offset, length); + stream->offset += length; + } + return length; +} + +static int seek_func(void *datasource, ogg_int64_t offset, int whence) +{ + return -1; +} + +static int close_func(void *datasource) +{ + return 0; +} + +static ov_callbacks cb = { + read_func, + seek_func, + close_func, + NULL, +}; + +// make buffer global, so we are not wasting stack space +char temp[BUFFER_SIZE]; + +// will decode ogg file as much as can into temp buffer +static size_t decode(OggVorbis_File* vf) +{ + char* buffer = temp; + size_t left = sizeof(temp); + + while (left != 0) + { + long decoded = ov_read(vf, buffer, left, NULL); + if (decoded > 0) + { + buffer += decoded; + left -= decoded; + } + else if (decoded == 0) + { + break; + } + else + { + LOG("Ogg decoding error, will try to resume decoding"); + } + } + + return sizeof(temp) - left; +} + +JNIEXPORT void JNICALL Java_net_strangesoft_kcat_OpenAL_run(JNIEnv* env, jclass klass, jarray data) +{ + int i; + + ALCdevice* device = NULL; + ALCcontext* context = NULL; + + ALint state; + ALenum err; + ALuint source = 0; + ALuint buffers[BUFFER_COUNT] = { 0 }; + + MemoryStream* stream = NULL; + + OggVorbis_File vf = { 0 }; + + // 5 miliseconds + struct timespec sleepTime; + sleepTime.tv_sec = 0; + sleepTime.tv_nsec = 5 * 1000 * 1000; + + stream = (MemoryStream*)malloc(sizeof(MemoryStream)); + if (!stream) + { + LOG("Failed to allocate memory for MemoryStream"); + goto exitpoint; + } + + stream->offset = 0; + stream->size = (*env)->GetArrayLength(env, data); + stream->buffer = (*env)->GetByteArrayElements(env, data, NULL); + + if (ov_open_callbacks(stream, &vf, NULL, 0, cb) != 0) + { + LOG("Failed to open ogg file"); + goto exitpoint; + } + + int channels = ov_info(&vf, 0)->channels; + if (channels != 1 && channels != 2) + { + LOG("Unsupported ogg file - %i channels. Only mono or stereo supported", channels); + goto exitpoint; + } + + LOG("Opening device"); + device = alcOpenDevice(NULL); + if (!device) + { + LOG("Failed to open OpenAL device"); + goto exitpoint; + } + + LOG("Creating context"); + context = alcCreateContext(device, NULL); + if (!context) + { + LOG("Failed to create OpenAL context"); + goto exitpoint; + } + alcMakeContextCurrent(context); + + LOG("Creating source"); + alGenSources(1, &source); + AL_CHECK(); + + LOG("Creating %i buffers", BUFFER_COUNT); + alGenBuffers(BUFFER_COUNT, buffers); + AL_CHECK(); + + ALenum format = (channels == 1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16); + ALsizei freq = ov_info(&vf, 0)->rate; + + LOG("Filling initial buffers"); + for (i=0; ioffset < stream->size) + { + ALint processed; + + alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed); + AL_CHECK(); + + // unqueue and refill processed buffers + while (processed-- > 0) + { + ALuint buf; + + alSourceUnqueueBuffers(source, 1, &buf); + AL_CHECK(); + + size_t decoded = decode(&vf); + + if (decoded) + { + alBufferData(buf, format, temp, decoded, freq); + AL_CHECK(); + + alSourceQueueBuffers(source, 1, &buf); + AL_CHECK(); + } + } + + alGetSourcei(source, AL_SOURCE_STATE, &state); + AL_CHECK(); + + // if source has been stopped playing, then resume it + if (state != AL_PLAYING) + { + alSourcePlay(source); + } + + // sleeping a bit to free the CPU from polling OpenAL source + nanosleep(&sleepTime, NULL); + } + + // when everything is read from stream, wait for source to finish + do + { + nanosleep(&sleepTime, NULL); + + alGetSourcei(source, AL_SOURCE_STATE, &state); + AL_CHECK(); + } + while (state == AL_PLAYING); + + LOG("Playback finished"); + +exitpoint: + // release the resources + + if (buffers[0]) + { + alDeleteBuffers(BUFFER_COUNT, buffers); + } + + if (source) + { + alDeleteSources(1, &source); + } + + if (context) + { + alcMakeContextCurrent(NULL); + alcDestroyContext(context); + } + + if (device) + { + alcCloseDevice(device); + } + + if (vf.datasource) + { + ov_clear(&vf); + } + + if (stream) + { + // JNI_ABORT means that we do not want to copy native data back to Java world + (*env)->ReleaseByteArrayElements(env, data, stream->buffer, JNI_ABORT); + free(stream); + } +} diff --git a/android/jni/tremolo/CHANGELOG b/android/jni/tremolo/CHANGELOG new file mode 100644 index 00000000..26da17ae --- /dev/null +++ b/android/jni/tremolo/CHANGELOG @@ -0,0 +1,47 @@ +Tremolo changelog: + +*** 20100110: 0.8 *** + +First "post Google" version. Shift fixes in mdctARM.s and +mdctLARM.s. Many thanks to Gloria Wang for finding the example +file that showed this up. Thanks to everyone else at Google for +making the BSD rerelease possible! + +Also, some (mainly error handling) fixes in codebook.c imported +from the trunk version of Tremor. + +*** 20071129: 0.7 *** + +Bugs in mdct.c, mdctARM.s, mdctLARM.s that caused 'chirping' +and 'popping' fixed. Many thanks to Dan Silsby for spotting +the problem, narrowing it down to the code concerned and +testing potential fixes. + + +*** 20070807: 0.6 *** + +Initial optimisation port from low memory branch of Tremor, +v1.0.2 + +-------------------------------------------------------------------- +Original Tremor changelog follows: + +*** 20020517: 1.0.2 *** + + Playback bugfix to floor1; mode mistakenly used for sizing instead + of blockflag + +*** 20020515: 1.0.1 *** + + Added complete API documentation to source tarball. No code + changes. + +*** 20020412: 1.0.1 *** + + Fixed a clipping bug that affected ARM processors; negative + overflows were being properly clipped, but then clobbered to + positive by the positive overflow chec (asm_arm.h:CLIP_TO_15) + +*** 20020403: 1.0.0 *** + + Initial version \ No newline at end of file diff --git a/android/jni/tremolo/COPYING b/android/jni/tremolo/COPYING new file mode 100644 index 00000000..4a470cf4 --- /dev/null +++ b/android/jni/tremolo/COPYING @@ -0,0 +1,372 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +--------------------------------------------------------------------- +Original COPYING file from Tremor distribution + +Copyright (c) 2002, Xiph.org Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/android/jni/tremolo/Makefile b/android/jni/tremolo/Makefile new file mode 100644 index 00000000..19316f72 --- /dev/null +++ b/android/jni/tremolo/Makefile @@ -0,0 +1,105 @@ +# Tremolo Makefile for Windows CE port +# Uses the VLC toolchain +# $URL$ +# $Id$ + +wince_gcc_root = /usr/local/wince/cross-tools +srcdir = . +VPATH = $(srcdir) + +CC = arm-wince-pe-gcc +CXX = arm-wince-pe-g++ +LD = arm-wince-pe-g++ +AR = arm-wince-pe-ar cru +RANLIB = arm-wince-pe-ranlib +STRIP = arm-wince-pe-strip +WINDRES= arm-wince-pe-windres +MKDIR = mkdir -p +RM = rm -f +RM_REC = rm -rf +ECHO = echo -n +CAT = cat +AS = arm-wince-pe-as + +DEFINES := + +CFLAGS := -O2 -march=armv4 -mtune=xscale -I$(srcdir) -I$(wince_gcc_root)/include -D__cdecl= -D_WIN32_WCE=300 -D_ARM_ASSEM_ -static + +CXXFLAGS := $(CFLAGS) + +LDFLAGS := -Llibs/lib -L$(wince_gcc_root)/lib +LIBS := --entry WinMainCRTStartup + +OBJS := +MODULE_DIRS += . + +LIBOBJS := bitwise.o bitwiseARM.o codebook.o dpen.o dsp.o floor0.o \ + floor1.o floor1ARM.o floor_lookup.o framing.o info.o mapping0.o \ + mdct.o mdctARM.o misc.o res012.o vorbisfile.o speed.o +EXEOBJS := testtremor.o + +LIBOBJS_C := bitwise.oc codebook.oc dsp.oc floor0.oc floor1.oc \ + floor_lookup.oc framing.oc info.oc mapping0.oc mdct.oc misc.oc \ + res012.oc vorbisfile.oc speed.o +EXEOBJS_C := testtremor.oc + +LIBOBJS_L := bitwise.ol bitwiseARM.o codebook.ol dpen.o dsp.ol floor0.ol \ + floor1.ol floor1LARM.o floor_lookup.ol framing.ol info.ol mapping0.ol \ + mdct.ol mdctLARM.o misc.ol res012.ol vorbisfile.ol speed.o +EXEOBJS_L := testtremor.ol + +LIBOBJS_LC := bitwise.olc codebook.olc dsp.olc floor0.olc floor1.olc \ + floor_lookup.olc framing.olc info.olc mapping0.olc mdct.olc misc.olc \ + res012.olc vorbisfile.olc speed.o +EXEOBJS_LC := testtremor.olc + +# Rules +.SUFFIXES: .oc .ol .olc + +.c.oc: + $(CC) $(CFLAGS) -c $(<) -o $*.oc -DONLY_C + +.c.ol: + $(CC) $(CFLAGS) -c $(<) -o $*.ol -D_LOW_ACCURACY_ + +.c.olc: + $(CC) $(CFLAGS) -c $(<) -o $*.olc -D_LOW_ACCURACY_ -DONLY_C + +all: libTremolo006.lib bittest.exe testtremor.exe testtremorC.exe testtremorL.exe testtremorLC.exe annotate.exe + cp libTremolo006.lib /cygdrive/c/cvs/scummvm/trunk/backends/platform/wince/libs/lib/ + cp ivorbisfile.h /cygdrive/c/cvs/scummvm/trunk/backends/platform/wince/libs/include/tremolo006/tremor/ + cp config_types.h /cygdrive/c/cvs/scummvm/trunk/backends/platform/wince/libs/include/tremolo006/ + cp ivorbiscodec.h /cygdrive/c/cvs/scummvm/trunk/backends/platform/wince/libs/include/tremolo006/ + cp ogg.h /cygdrive/c/cvs/scummvm/trunk/backends/platform/wince/libs/include/tremolo006/ + cp os_types.h /cygdrive/c/cvs/scummvm/trunk/backends/platform/wince/libs/include/tremolo006/ + +libTremolo006.lib: $(LIBOBJS) + arm-wince-pe-ar cru $@ $^ + arm-wince-pe-ranlib $@ + +bitwiseTEST.o: bitwise.c + $(CC) $(CFLAGS) -c -o bitwiseTEST.o bitwise.c -D_V_BIT_TEST + +bittest.exe: bitwiseTEST.o bitwiseARM.o dpen.o + $(LD) $^ $(LDFLAGS) $(LIBS) -o $@ -Wl,-Map,bittest.exe.map -Wl,--stack,65536 + +testtremor.exe: testtremor.o profile.o $(LIBOBJS) + $(LD) $^ $(LDFLAGS) $(LIBS) -o $@ -Wl,-Map,testtremor.exe.map -Wl,--stack,65536 -debug + +testtremorC.exe: testtremor.oc profile.o $(LIBOBJS_C) + $(LD) $^ $(LDFLAGS) $(LIBS) -o $@ -Wl,-Map,testtremorC.exe.map -Wl,--stack,65536 + +testtremorL.exe: testtremor.ol profile.o $(LIBOBJS_L) + $(LD) $^ $(LDFLAGS) $(LIBS) -o $@ -Wl,-Map,testtremorL.exe.map -Wl,--stack,65536 + +testtremorLC.exe: testtremor.olc profile.o $(LIBOBJS_LC) + $(LD) $^ $(LDFLAGS) $(LIBS) -o $@ -Wl,-Map,testtremorLC.exe.map -Wl,--stack,65536 + +annotate.exe: annotate.c + gcc $^ -o $@ + +clean: + rm `find . -name \*.o` + rm `find . -name \*.ol` + rm `find . -name \*.oc` + rm `find . -name \*.olc` diff --git a/android/jni/tremolo/Profile.txt b/android/jni/tremolo/Profile.txt new file mode 100644 index 00000000..8a205cd9 --- /dev/null +++ b/android/jni/tremolo/Profile.txt @@ -0,0 +1,496 @@ +Profile by Address +00000000 ( 42.09%: 2139) Address 0 +00011008 ( 0.00%: 0) WinMainCRTStartup +00011078 ( 0.00%: 0) _cinit +000110d8 ( 0.00%: 0) exit +000111b8 ( 0.00%: 0) _exit +000111c4 ( 0.00%: 0) _cexit +000111d4 ( 0.00%: 0) _c_exit +000111e4 ( 0.00%: 0) Output +000112b0 ( 0.00%: 0) main2 +000115d4 ( 0.00%: 0) WinMain +00011610 ( 0.00%: 0) speedtest +000117d4 ( 0.00%: 0) Profile_dump +00011984 ( 0.65%: 33) Profile_init +00011a60 ( 0.00%: 0) oggpack_eop +00011a74 ( 0.00%: 0) oggpack_bytes +00011aa4 ( 1.10%: 56) oggpack_bits +00011ae0 ( 2.48%: 126) oggpack_look +00011c04 ( 0.02%: 1) oggpack_adv +00011c8c ( 0.00%: 0) oggpack_readinit +00011cc4 ( 0.04%: 2) oggpack_read +00011e58 ( 0.00%: 0) _ilog +00012728 ( 0.02%: 1) _book_maptype1_quantvals +000127a8 ( 0.00%: 0) vorbis_book_clear +000127e8 ( 0.33%: 17) vorbis_book_unpack +00013008 ( 0.00%: 0) vorbis_book_decode +00013020 ( 0.00%: 0) vorbis_book_decodevs_add +000130c8 ( 0.00%: 0) vorbis_book_decodev_add +00013160 ( 0.00%: 0) vorbis_book_decodev_set +00013238 ( 2.77%: 141) decode_packed_entry_number_REALSTART +00013264 ( 9.41%: 478) decode_packed_entry_number +0001341c ( 5.51%: 280) decode_map +000135bc ( 5.31%: 270) vorbis_book_decodevv_add +0001364c ( 3.31%: 168) _checksum +000136ac ( 0.00%: 0) vorbis_dsp_restart +00013714 ( 0.00%: 0) vorbis_dsp_create +000137c8 ( 0.02%: 1) vorbis_dsp_destroy +00013918 ( 0.06%: 3) vorbis_dsp_pcmout +00013a44 ( 0.00%: 0) vorbis_dsp_read +00013a84 ( 0.00%: 0) vorbis_packet_blocksize +00013b04 ( 0.04%: 2) vorbis_dsp_synthesis +00013f04 ( 0.00%: 0) floor0_free_info +00013f10 ( 0.00%: 0) floor0_info_unpack +00014020 ( 0.00%: 0) floor0_memosize +0001402c ( 0.00%: 0) floor0_inverse1 +00014188 ( 0.00%: 0) vorbis_lsp_to_curve +000147ec ( 0.00%: 0) floor0_inverse2 +00014880 ( 0.00%: 0) floor1_free_info +00014938 ( 0.12%: 6) floor1_info_unpack +00014fc8 ( 0.12%: 6) render_point +00015014 ( 0.00%: 0) floor1_memosize +0001501c ( 0.85%: 43) floor1_inverse1 +00015308 ( 1.20%: 61) floor1_inverse2 +000154c4 ( 0.91%: 46) render_lineARM +00015698 ( 1.40%: 71) ogg_buffer_dup +00015b70 ( 0.04%: 2) ogg_page_version +00015bb0 ( 0.00%: 0) ogg_page_continued +00015bf0 ( 0.00%: 0) ogg_page_bos +00015c30 ( 0.04%: 2) ogg_page_eos +00015c70 ( 0.08%: 4) ogg_page_granulepos +00015d38 ( 0.06%: 3) ogg_page_serialno +00015d78 ( 0.00%: 0) ogg_page_pageno +00015db8 ( 0.00%: 0) ogg_page_packets +00015e1c ( 0.00%: 0) ogg_sync_create +00015e70 ( 0.00%: 0) ogg_sync_reset +00015ea0 ( 0.02%: 1) ogg_sync_destroy +00015ef8 ( 0.22%: 11) ogg_sync_bufferin +00015fb4 ( 0.16%: 8) ogg_sync_wrote +00016010 ( 0.02%: 1) ogg_page_release +00016050 ( 0.33%: 17) ogg_sync_pageseek +00016304 ( 0.00%: 0) ogg_sync_pageout +0001634c ( 0.00%: 0) ogg_stream_create +00016370 ( 0.04%: 2) ogg_stream_destroy +00016410 ( 0.08%: 4) ogg_stream_pagein +000164f8 ( 0.00%: 0) ogg_stream_reset +0001656c ( 0.00%: 0) ogg_stream_reset_serialno +00016588 ( 0.12%: 6) ogg_packet_release +00016a8c ( 0.00%: 0) ogg_stream_packetout +00016a94 ( 0.00%: 0) ogg_stream_packetpeek +00016a9c ( 0.00%: 0) ogg_page_dup +00016b0c ( 0.00%: 0) vorbis_comment_init +00016b80 ( 0.00%: 0) vorbis_comment_query +00016c54 ( 0.00%: 0) vorbis_comment_query_count +00016d04 ( 0.00%: 0) vorbis_comment_clear +00016d90 ( 0.00%: 0) vorbis_info_blocksize +00016da4 ( 0.00%: 0) vorbis_info_init +00016dec ( 0.00%: 0) vorbis_info_clear +00016f9c ( 0.00%: 0) vorbis_dsp_headerin +000175b8 ( 0.00%: 0) mapping_clear_info +00017634 ( 0.00%: 0) mapping_info_unpack +00017888 ( 0.77%: 39) mapping_inverse +00017d28 ( 0.00%: 0) mdct_unroll_lap +00017fa4 ( 0.00%: 0) mdct_backward +00018200 ( 0.10%: 5) mdct_unroll_prelap +000182a0 ( 0.08%: 4) mdct_unroll_postlap +00018364 ( 2.74%: 139) mdct_unroll_part2 +000183bc ( 1.79%: 91) mdct_unroll_part3 +00018414 ( 0.67%: 34) mdct_shift_right +00018470 ( 12.20%: 620) mdct_backwardARM +00018dc0 ( 0.00%: 0) _VDBG_dump +00018e24 ( 0.00%: 0) _VDBG_malloc +00018f70 ( 0.00%: 0) _VDBG_free +00018f98 ( 0.00%: 0) res_clear_info +00018fe8 ( 0.00%: 0) res_unpack +000191fc ( 1.77%: 90) res_inverse +0001a6f8 ( 0.00%: 0) ov_clear +0001a89c ( 0.00%: 0) ov_test_callbacks +0001a8dc ( 0.00%: 0) ov_test +0001a928 ( 0.00%: 0) ov_streams +0001a930 ( 0.00%: 0) ov_seekable +0001a938 ( 0.00%: 0) ov_time_total +0001a9fc ( 0.00%: 0) ov_bitrate +0001ab84 ( 0.00%: 0) ov_bitrate_instant +0001ac00 ( 0.00%: 0) ov_serialnumber +0001ac78 ( 0.00%: 0) ov_raw_total +0001ad28 ( 0.00%: 0) ov_pcm_total +0001adcc ( 0.00%: 0) ov_raw_seek +0001b6bc ( 0.00%: 0) ov_test_open +0001b6d4 ( 0.00%: 0) ov_open_callbacks +0001b72c ( 0.00%: 0) ov_open +0001b778 ( 0.00%: 0) ov_pcm_seek_page +0001c020 ( 0.00%: 0) ov_pcm_seek +0001c444 ( 0.00%: 0) ov_time_seek +0001c5c4 ( 0.00%: 0) ov_time_seek_page +0001c744 ( 0.00%: 0) ov_raw_tell +0001c768 ( 0.00%: 0) ov_pcm_tell +0001c78c ( 0.00%: 0) ov_time_tell +0001c8a8 ( 0.00%: 0) ov_info +0001c8ec ( 0.02%: 1) ov_comment +0001c930 ( 0.02%: 1) ov_read +0001ca10 ( 0.00%: 0) stmiaTest +0001ca74 ( 0.00%: 0) strTest +0001caf4 ( 0.00%: 0) smullTest +0001cb38 ( 0.00%: 0) __udivdi3 +0001d0a8 ( 0.00%: 0) __aeabi_drsub +0001d0b0 ( 0.00%: 0) __aeabi_dsub +0001d0b0 ( 0.00%: 0) __subdf3 +0001d0b4 ( 0.00%: 0) __adddf3 +0001d0b4 ( 0.00%: 0) __aeabi_dadd +0001d394 ( 0.00%: 0) __aeabi_ui2d +0001d394 ( 0.00%: 0) __floatunsidf +0001d3b8 ( 0.00%: 0) __floatsidf +0001d3b8 ( 0.00%: 0) __aeabi_i2d +0001d3e0 ( 0.00%: 0) __extendsfdf2 +0001d3e0 ( 0.00%: 0) __aeabi_f2d +0001d420 ( 0.00%: 0) __aeabi_ul2d +0001d420 ( 0.00%: 0) __floatundidf +0001d434 ( 0.00%: 0) __floatdidf +0001d434 ( 0.00%: 0) __aeabi_l2d +0001d494 ( 0.00%: 0) __aeabi_dmul +0001d494 ( 0.00%: 0) __muldf3 +0001d7bc ( 0.00%: 0) __aeabi_ddiv +0001d7bc ( 0.00%: 0) __divdf3 +0001d9c0 ( 0.06%: 3) __modsi3 +0001daa4 ( 0.28%: 14) __divsi3 +0001dbcc ( 0.00%: 0) __aeabi_idivmod +0001dbe4 ( 0.14%: 7) __udivsi3 +0001dcdc ( 0.00%: 0) __aeabi_uidivmod +0001dcf4 ( 0.00%: 0) __divdi3 +0001e2b0 ( 0.00%: 0) __umodsi3 +0001e37c ( 0.00%: 0) __aeabi_ldiv0 +0001e37c ( 0.00%: 0) __div0 +0001e37c ( 0.00%: 0) __aeabi_idiv0 +0001e380 ( 0.00%: 0) _XcptFilter +0001e38c ( 0.00%: 0) __C_specific_handler +0001e398 ( 0.00%: 0) LocalFree +0001e3a4 ( 0.00%: 0) vsprintf +0001e3b0 ( 0.00%: 0) OutputDebugStringW +0001e3bc ( 0.39%: 20) fopen +0001e3c8 ( 0.00%: 0) fwrite +0001e3d4 ( 0.00%: 0) fread +0001e3e0 ( 0.00%: 0) GetThreadTimes +0001e3ec ( 0.00%: 0) Sleep +0001e3f8 ( 0.04%: 2) fputc +0001e404 ( 0.00%: 0) fclose +0001e410 ( 0.00%: 0) memset +0001e41c ( 0.00%: 0) GetThreadContext +0001e428 ( 0.00%: 0) malloc +0001e434 ( 0.00%: 0) CreateThread +0001e440 ( 0.00%: 0) SetThreadPriority +0001e44c ( 0.00%: 0) free +0001e458 ( 0.00%: 0) calloc +0001e464 ( 0.00%: 0) realloc +0001e470 ( 0.00%: 0) memchr +0001e47c ( 0.00%: 0) toupper +0001e488 ( 0.00%: 0) strlen +0001e494 ( 0.00%: 0) strcpy +0001e4a0 ( 0.00%: 0) memcmp +0001e4ac ( 0.00%: 0) _getstdfilex +0001e4b8 ( 0.00%: 0) fprintf +0001e4c4 ( 0.00%: 0) fseek +0001e4d0 ( 0.00%: 0) memcpy +0001e4dc ( 0.00%: 0) ftell +0001f018 ( 0.00%: 0) crc_lookup +0001f418 ( 0.00%: 0) start_time +00028764 ( 0.00%: 0) FLOOR_fromdB_LOOKUP +00028b88 ( 0.00%: 0) sincos_lookup0 +00029b90 ( 0.00%: 0) sincos_lookup1 +0002ada4 ( 0.00%: 0) __clz_tab +0002d014 ( 0.00%: 0) global_bytes +0002d030 ( 0.00%: 0) __onexitbegin +0002d034 ( 0.00%: 0) __onexitend +0002d038 ( 0.00%: 0) _exitflag +0002d03c ( 0.00%: 0) pcmout +0002e03c ( 0.00%: 0) ref +0002f03c ( 0.00%: 0) text +0003003c ( 0.00%: 0) speedblock +00039000 ( 0.00%: 0) __IMPORT_DESCRIPTOR_COREDLL +00039014 ( 0.00%: 0) __NULL_IMPORT_DESCRIPTOR +000390b8 ( 0.00%: 0) __imp__XcptFilter +000390bc ( 0.00%: 0) __imp___C_specific_handler +000390c0 ( 0.00%: 0) __imp_LocalFree +000390c4 ( 0.00%: 0) __imp_vsprintf +000390c8 ( 0.00%: 0) __imp_OutputDebugStringW +000390cc ( 0.00%: 0) __imp_fopen +000390d0 ( 0.00%: 0) __imp_fwrite +000390d4 ( 0.00%: 0) __imp_fread +000390d8 ( 0.00%: 0) __imp_GetThreadTimes +000390dc ( 0.00%: 0) __imp_Sleep +000390e0 ( 0.00%: 0) __imp_fputc +000390e4 ( 0.00%: 0) __imp_fclose +000390e8 ( 0.00%: 0) __imp_memset +000390ec ( 0.00%: 0) __imp_GetThreadContext +000390f0 ( 0.00%: 0) __imp_malloc +000390f4 ( 0.00%: 0) __imp_CreateThread +000390f8 ( 0.00%: 0) __imp_SetThreadPriority +000390fc ( 0.00%: 0) __imp_free +00039100 ( 0.00%: 0) __imp_calloc +00039104 ( 0.00%: 0) __imp_realloc +00039108 ( 0.00%: 0) __imp_memchr +0003910c ( 0.00%: 0) __imp_toupper +00039110 ( 0.00%: 0) __imp_strlen +00039114 ( 0.00%: 0) __imp_strcpy +00039118 ( 0.00%: 0) __imp_memcmp +0003911c ( 0.00%: 0) __imp__getstdfilex +00039120 ( 0.00%: 0) __imp_fprintf +00039124 ( 0.00%: 0) __imp_fseek +00039128 ( 0.00%: 0) __imp_memcpy +0003912c ( 0.00%: 0) __imp_ftell +0003a000 ( 0.00%: 0) __xc_a +0003a004 ( 0.00%: 0) __xc_z +0003a008 ( 0.00%: 0) __xi_a +0003a00c ( 0.00%: 0) __xi_z +0003a010 ( 0.00%: 0) __xp_a +0003a014 ( 0.00%: 0) __xp_z +0003a018 ( 0.00%: 0) __xt_a +0003a01c ( 0.00%: 0) __xt_z + + +Profile by Time +00000000 ( 42.09%: 2139) Address 0 +00018470 ( 12.20%: 620) mdct_backwardARM +00013264 ( 9.41%: 478) decode_packed_entry_number +0001341c ( 5.51%: 280) decode_map +000135bc ( 5.31%: 270) vorbis_book_decodevv_add +0001364c ( 3.31%: 168) _checksum +00013238 ( 2.77%: 141) decode_packed_entry_number_REALSTART +00018364 ( 2.74%: 139) mdct_unroll_part2 +00011ae0 ( 2.48%: 126) oggpack_look +000183bc ( 1.79%: 91) mdct_unroll_part3 +000191fc ( 1.77%: 90) res_inverse +00015698 ( 1.40%: 71) ogg_buffer_dup +00015308 ( 1.20%: 61) floor1_inverse2 +00011aa4 ( 1.10%: 56) oggpack_bits +000154c4 ( 0.91%: 46) render_lineARM +0001501c ( 0.85%: 43) floor1_inverse1 +00017888 ( 0.77%: 39) mapping_inverse +00018414 ( 0.67%: 34) mdct_shift_right +00011984 ( 0.65%: 33) Profile_init +0001e3bc ( 0.39%: 20) fopen +000127e8 ( 0.33%: 17) vorbis_book_unpack +00016050 ( 0.33%: 17) ogg_sync_pageseek +0001daa4 ( 0.28%: 14) __divsi3 +00015ef8 ( 0.22%: 11) ogg_sync_bufferin +00015fb4 ( 0.16%: 8) ogg_sync_wrote +0001dbe4 ( 0.14%: 7) __udivsi3 +00014fc8 ( 0.12%: 6) render_point +00014938 ( 0.12%: 6) floor1_info_unpack +00016588 ( 0.12%: 6) ogg_packet_release +00018200 ( 0.10%: 5) mdct_unroll_prelap +000182a0 ( 0.08%: 4) mdct_unroll_postlap +00015c70 ( 0.08%: 4) ogg_page_granulepos +00016410 ( 0.08%: 4) ogg_stream_pagein +00015d38 ( 0.06%: 3) ogg_page_serialno +0001d9c0 ( 0.06%: 3) __modsi3 +00013918 ( 0.06%: 3) vorbis_dsp_pcmout +00015c30 ( 0.04%: 2) ogg_page_eos +00011cc4 ( 0.04%: 2) oggpack_read +00015b70 ( 0.04%: 2) ogg_page_version +00013b04 ( 0.04%: 2) vorbis_dsp_synthesis +0001e3f8 ( 0.04%: 2) fputc +00016370 ( 0.04%: 2) ogg_stream_destroy +00016010 ( 0.02%: 1) ogg_page_release +00015ea0 ( 0.02%: 1) ogg_sync_destroy +00011c04 ( 0.02%: 1) oggpack_adv +0001c8ec ( 0.02%: 1) ov_comment +0001c930 ( 0.02%: 1) ov_read +000137c8 ( 0.02%: 1) vorbis_dsp_destroy +00012728 ( 0.02%: 1) _book_maptype1_quantvals +00015bb0 ( 0.00%: 0) ogg_page_continued +00015bf0 ( 0.00%: 0) ogg_page_bos +0003a018 ( 0.00%: 0) __xt_a +00015d78 ( 0.00%: 0) ogg_page_pageno +00015db8 ( 0.00%: 0) ogg_page_packets +00015e1c ( 0.00%: 0) ogg_sync_create +00015e70 ( 0.00%: 0) ogg_sync_reset +00011c8c ( 0.00%: 0) oggpack_readinit +00011a74 ( 0.00%: 0) oggpack_bytes +00016304 ( 0.00%: 0) ogg_sync_pageout +0001634c ( 0.00%: 0) ogg_stream_create +0003a01c ( 0.00%: 0) __xt_z +000164f8 ( 0.00%: 0) ogg_stream_reset +0001656c ( 0.00%: 0) ogg_stream_reset_serialno +00011a60 ( 0.00%: 0) oggpack_eop +00016a8c ( 0.00%: 0) ogg_stream_packetout +00016a94 ( 0.00%: 0) ogg_stream_packetpeek +00016a9c ( 0.00%: 0) ogg_page_dup +00016b0c ( 0.00%: 0) vorbis_comment_init +00016b80 ( 0.00%: 0) vorbis_comment_query +00016c54 ( 0.00%: 0) vorbis_comment_query_count +00016d04 ( 0.00%: 0) vorbis_comment_clear +00016d90 ( 0.00%: 0) vorbis_info_blocksize +00016da4 ( 0.00%: 0) vorbis_info_init +00016dec ( 0.00%: 0) vorbis_info_clear +00016f9c ( 0.00%: 0) vorbis_dsp_headerin +000175b8 ( 0.00%: 0) mapping_clear_info +00017634 ( 0.00%: 0) mapping_info_unpack +000117d4 ( 0.00%: 0) Profile_dump +00017d28 ( 0.00%: 0) mdct_unroll_lap +00017fa4 ( 0.00%: 0) mdct_backward +00011610 ( 0.00%: 0) speedtest +000115d4 ( 0.00%: 0) WinMain +000112b0 ( 0.00%: 0) main2 +000111e4 ( 0.00%: 0) Output +000111d4 ( 0.00%: 0) _c_exit +000111c4 ( 0.00%: 0) _cexit +00018dc0 ( 0.00%: 0) _VDBG_dump +00018e24 ( 0.00%: 0) _VDBG_malloc +00018f70 ( 0.00%: 0) _VDBG_free +00018f98 ( 0.00%: 0) res_clear_info +00018fe8 ( 0.00%: 0) res_unpack +000111b8 ( 0.00%: 0) _exit +0001a6f8 ( 0.00%: 0) ov_clear +0001a89c ( 0.00%: 0) ov_test_callbacks +0001a8dc ( 0.00%: 0) ov_test +0001a928 ( 0.00%: 0) ov_streams +0001a930 ( 0.00%: 0) ov_seekable +0001a938 ( 0.00%: 0) ov_time_total +0001a9fc ( 0.00%: 0) ov_bitrate +0001ab84 ( 0.00%: 0) ov_bitrate_instant +0001ac00 ( 0.00%: 0) ov_serialnumber +0001ac78 ( 0.00%: 0) ov_raw_total +0001ad28 ( 0.00%: 0) ov_pcm_total +0001adcc ( 0.00%: 0) ov_raw_seek +0001b6bc ( 0.00%: 0) ov_test_open +0001b6d4 ( 0.00%: 0) ov_open_callbacks +0001b72c ( 0.00%: 0) ov_open +0001b778 ( 0.00%: 0) ov_pcm_seek_page +0001c020 ( 0.00%: 0) ov_pcm_seek +0001c444 ( 0.00%: 0) ov_time_seek +0001c5c4 ( 0.00%: 0) ov_time_seek_page +0001c744 ( 0.00%: 0) ov_raw_tell +0001c768 ( 0.00%: 0) ov_pcm_tell +0001c78c ( 0.00%: 0) ov_time_tell +0001c8a8 ( 0.00%: 0) ov_info +0001ca10 ( 0.00%: 0) stmiaTest +0001ca74 ( 0.00%: 0) strTest +0001caf4 ( 0.00%: 0) smullTest +0001cb38 ( 0.00%: 0) __udivdi3 +0001d0a8 ( 0.00%: 0) __aeabi_drsub +0001d0b0 ( 0.00%: 0) __aeabi_dsub +0001d0b0 ( 0.00%: 0) __subdf3 +0001d0b4 ( 0.00%: 0) __adddf3 +0001d0b4 ( 0.00%: 0) __aeabi_dadd +0001d394 ( 0.00%: 0) __aeabi_ui2d +0001d394 ( 0.00%: 0) __floatunsidf +0001d3b8 ( 0.00%: 0) __floatsidf +0001d3b8 ( 0.00%: 0) __aeabi_i2d +0001d3e0 ( 0.00%: 0) __extendsfdf2 +0001d3e0 ( 0.00%: 0) __aeabi_f2d +0001d420 ( 0.00%: 0) __aeabi_ul2d +0001d420 ( 0.00%: 0) __floatundidf +0001d434 ( 0.00%: 0) __floatdidf +0001d434 ( 0.00%: 0) __aeabi_l2d +0001d494 ( 0.00%: 0) __aeabi_dmul +0001d494 ( 0.00%: 0) __muldf3 +0001d7bc ( 0.00%: 0) __aeabi_ddiv +0001d7bc ( 0.00%: 0) __divdf3 +000110d8 ( 0.00%: 0) exit +0001dbcc ( 0.00%: 0) __aeabi_idivmod +00011078 ( 0.00%: 0) _cinit +0001dcdc ( 0.00%: 0) __aeabi_uidivmod +0001dcf4 ( 0.00%: 0) __divdi3 +0001e2b0 ( 0.00%: 0) __umodsi3 +0001e37c ( 0.00%: 0) __aeabi_ldiv0 +0001e37c ( 0.00%: 0) __div0 +0001e37c ( 0.00%: 0) __aeabi_idiv0 +0001e380 ( 0.00%: 0) _XcptFilter +0001e38c ( 0.00%: 0) __C_specific_handler +0001e398 ( 0.00%: 0) LocalFree +0001e3a4 ( 0.00%: 0) vsprintf +0001e3b0 ( 0.00%: 0) OutputDebugStringW +00011008 ( 0.00%: 0) WinMainCRTStartup +0001e3c8 ( 0.00%: 0) fwrite +0001e3d4 ( 0.00%: 0) fread +0001e3e0 ( 0.00%: 0) GetThreadTimes +0001e3ec ( 0.00%: 0) Sleep +0001e404 ( 0.00%: 0) fclose +0001e410 ( 0.00%: 0) memset +0001e41c ( 0.00%: 0) GetThreadContext +0001e428 ( 0.00%: 0) malloc +0001e434 ( 0.00%: 0) CreateThread +0001e440 ( 0.00%: 0) SetThreadPriority +0001e44c ( 0.00%: 0) free +0001e458 ( 0.00%: 0) calloc +0001e464 ( 0.00%: 0) realloc +0001e470 ( 0.00%: 0) memchr +0001e47c ( 0.00%: 0) toupper +0001e488 ( 0.00%: 0) strlen +0001e494 ( 0.00%: 0) strcpy +0001e4a0 ( 0.00%: 0) memcmp +0001e4ac ( 0.00%: 0) _getstdfilex +0001e4b8 ( 0.00%: 0) fprintf +0001e4c4 ( 0.00%: 0) fseek +0001e4d0 ( 0.00%: 0) memcpy +0001e4dc ( 0.00%: 0) ftell +0001f018 ( 0.00%: 0) crc_lookup +0001f418 ( 0.00%: 0) start_time +00028764 ( 0.00%: 0) FLOOR_fromdB_LOOKUP +00028b88 ( 0.00%: 0) sincos_lookup0 +00029b90 ( 0.00%: 0) sincos_lookup1 +0002ada4 ( 0.00%: 0) __clz_tab +0002d014 ( 0.00%: 0) global_bytes +0002d030 ( 0.00%: 0) __onexitbegin +0002d034 ( 0.00%: 0) __onexitend +0002d038 ( 0.00%: 0) _exitflag +0002d03c ( 0.00%: 0) pcmout +0002e03c ( 0.00%: 0) ref +0002f03c ( 0.00%: 0) text +0003003c ( 0.00%: 0) speedblock +00039000 ( 0.00%: 0) __IMPORT_DESCRIPTOR_COREDLL +00039014 ( 0.00%: 0) __NULL_IMPORT_DESCRIPTOR +000390b8 ( 0.00%: 0) __imp__XcptFilter +000390bc ( 0.00%: 0) __imp___C_specific_handler +000390c0 ( 0.00%: 0) __imp_LocalFree +000390c4 ( 0.00%: 0) __imp_vsprintf +000390c8 ( 0.00%: 0) __imp_OutputDebugStringW +000390cc ( 0.00%: 0) __imp_fopen +000390d0 ( 0.00%: 0) __imp_fwrite +000390d4 ( 0.00%: 0) __imp_fread +000390d8 ( 0.00%: 0) __imp_GetThreadTimes +000390dc ( 0.00%: 0) __imp_Sleep +000390e0 ( 0.00%: 0) __imp_fputc +000390e4 ( 0.00%: 0) __imp_fclose +000390e8 ( 0.00%: 0) __imp_memset +000390ec ( 0.00%: 0) __imp_GetThreadContext +000390f0 ( 0.00%: 0) __imp_malloc +000390f4 ( 0.00%: 0) __imp_CreateThread +000390f8 ( 0.00%: 0) __imp_SetThreadPriority +000390fc ( 0.00%: 0) __imp_free +00039100 ( 0.00%: 0) __imp_calloc +00039104 ( 0.00%: 0) __imp_realloc +00039108 ( 0.00%: 0) __imp_memchr +0003910c ( 0.00%: 0) __imp_toupper +00039110 ( 0.00%: 0) __imp_strlen +00039114 ( 0.00%: 0) __imp_strcpy +00039118 ( 0.00%: 0) __imp_memcmp +0003911c ( 0.00%: 0) __imp__getstdfilex +00039120 ( 0.00%: 0) __imp_fprintf +00039124 ( 0.00%: 0) __imp_fseek +00039128 ( 0.00%: 0) __imp_memcpy +0003912c ( 0.00%: 0) __imp_ftell +0003a000 ( 0.00%: 0) __xc_a +0003a004 ( 0.00%: 0) __xc_z +0003a008 ( 0.00%: 0) __xi_a +0003a00c ( 0.00%: 0) __xi_z +0003a010 ( 0.00%: 0) __xp_a +0003a014 ( 0.00%: 0) __xp_z +00013160 ( 0.00%: 0) vorbis_book_decodev_set +000136ac ( 0.00%: 0) vorbis_dsp_restart +000130c8 ( 0.00%: 0) vorbis_book_decodev_add +00013714 ( 0.00%: 0) vorbis_dsp_create +00013a44 ( 0.00%: 0) vorbis_dsp_read +00013a84 ( 0.00%: 0) vorbis_packet_blocksize +00013f04 ( 0.00%: 0) floor0_free_info +00013f10 ( 0.00%: 0) floor0_info_unpack +00014020 ( 0.00%: 0) floor0_memosize +0001402c ( 0.00%: 0) floor0_inverse1 +00014188 ( 0.00%: 0) vorbis_lsp_to_curve +000147ec ( 0.00%: 0) floor0_inverse2 +00014880 ( 0.00%: 0) floor1_free_info +00013020 ( 0.00%: 0) vorbis_book_decodevs_add +00013008 ( 0.00%: 0) vorbis_book_decode +00015014 ( 0.00%: 0) floor1_memosize +000127a8 ( 0.00%: 0) vorbis_book_clear +00011e58 ( 0.00%: 0) _ilog diff --git a/android/jni/tremolo/README b/android/jni/tremolo/README new file mode 100644 index 00000000..280a80f5 --- /dev/null +++ b/android/jni/tremolo/README @@ -0,0 +1,64 @@ +This README covers the Tremolo library, version 0.08. + +Tremolo is a modified version of the Ogg Vorbis 'Tremor' integer +playback codec, branching from 1.0.2 of the low memory branch of +that source from svn. + +Previous versions of Tremolo have been released under the GNU GPL +but thanks to a grant from Google, this version is back to being +released under the same license as vanilla Tremor. + +Robin Watts + +tremolo@wss.co.uk + +---------------------------------------------------------------------- + + + +This README covers the Ogg Vorbis 'Tremor' integer playback codec +source as of date 2002 09 02, version 1.0.0. + + ****** + +The C source in this package will build on any ANSI C compiler and +function completely and properly on any platform. The included build +system assumes GNU build system and make tools (m4, automake, +autoconf, libtool and gmake). GCC is not required, although GCC is +the most tested compiler. To build using GNU tools, type in the +source directory: + +./autogen.sh +make + +Currently, the source implements playback in pure C on all platforms +except ARM, where a [currently] small amount of assembly (see +asm_arm.h) is used to implement 64 bit math operations and fast LSP +computation. If building on ARM without the benefit of GNU build +system tools, be sure that '_ARM_ASSEM_' is #defined by the build +system if this assembly is desired, else the resulting library will +use whatever 64 bit math builtins the compiler implements. + +No math library is required by this source. No floating point +operations are used at any point in either setup or decode. This +decoder library will properly decode any past, current or future +Vorbis I file or stream. + + ******** + +The build system produces a static and [when supported by the OS] +dynamic library named 'libvorbisidec'. This library exposes an API +nearly identical to the BSD reference library's 'libvorbisfile', +including all the features familiar to users of vorbisfile. This API +is similar enough that the proper header file to include is named +'ivorbisfile.h' [included in the source build directory]. Lower level +libvorbis-style headers and structures are in 'ivorbiscodec.h' +[included in the source build directory]. A simple example program, +ivorbisfile_example.c, can be built with 'make example'. + + ******** + +Detailed Tremor API Documentation begins at doc/index.html + +Monty +xiph.org diff --git a/android/jni/tremolo/TODO b/android/jni/tremolo/TODO new file mode 100644 index 00000000..0e542a37 --- /dev/null +++ b/android/jni/tremolo/TODO @@ -0,0 +1,2 @@ +Add explicit 64 bit integer support rather than relying on compiler +Roll in optional use of bounded heap memory manager diff --git a/android/jni/tremolo/annotate.c b/android/jni/tremolo/annotate.c new file mode 100644 index 00000000..d2748ab2 --- /dev/null +++ b/android/jni/tremolo/annotate.c @@ -0,0 +1,300 @@ +#include +#include + +typedef struct +{ + char *name; + int offset; + int count; + float percent; +} +Profile_Entry; + +static const char *profile_filename; +static const char *map_filename; +static int granularity; +static int *profile; +static int profile_len; +static Profile_Entry *functionTable; +static int numFunctions; +static int maxFunctions; + +static void read_args(int argc, const char *argv[]) +{ + if (argc < 3) + { + fprintf(stderr, "annotate \n"); + fclose(stderr); + exit(EXIT_FAILURE); + } + profile_filename = argv[1]; + map_filename = argv[2]; +} + +static void read_profile() +{ + FILE *in = fopen(profile_filename, "rb"); + + if (in == NULL) + { + fprintf(stderr, "Failed to open profile file '%s'\n", + profile_filename); + fclose(stderr); + exit(EXIT_FAILURE); + } + + fseek(in, 0, SEEK_END); + profile_len = (int)ftell(in)-8; + fseek(in, 0, SEEK_SET); + + if ((fgetc(in) != 'P') || + (fgetc(in) != 'R') || + (fgetc(in) != '0') || + (fgetc(in) != 'F')) + { + fclose(in); + fprintf(stderr, "'%s' is not a profile file\n", + profile_filename); + fclose(stderr); + exit(EXIT_FAILURE); + } + + fread(&granularity, 4, 1, in); + profile = malloc(profile_len); + if (profile == NULL) + { + fclose(in); + fprintf(stderr, "Out of memory reading profile\n"); + fclose(stderr); + exit(EXIT_FAILURE); + } + + fread(profile, 4, profile_len>>2, in); + fclose(in); +} + +static void addFn(const char *text, int offset) +{ + if (numFunctions == maxFunctions) + { + int newSize = maxFunctions*2; + + if (newSize == 0) + newSize = 128; + + functionTable = realloc(functionTable, + newSize*sizeof(Profile_Entry)); + if (functionTable == NULL) + { + fprintf(stderr, "Out of memory reading mapfile\n"); + fflush(stderr); + exit(EXIT_FAILURE); + } + maxFunctions = newSize; + } + + functionTable[numFunctions].name = malloc(strlen(text)+1); + strcpy(functionTable[numFunctions].name, text); + functionTable[numFunctions].offset = offset; + functionTable[numFunctions].count = 0; + functionTable[numFunctions].percent = 0.0; + //fprintf(stdout, "%s %x\n", functionTable[numFunctions].name, + // functionTable[numFunctions].offset); + numFunctions++; +} + +static void read_map() +{ + FILE *in = fopen(map_filename, "rb"); + char text[2048]; + + if (in == NULL) + { + fprintf(stderr, "Failed to open map file '%s'\n", + map_filename); + fclose(stderr); + exit(EXIT_FAILURE); + } + + functionTable = NULL; + numFunctions = 0; + maxFunctions = 0; + + addFn("Address 0", 0); + + while (!feof(in)) + { + int offset; + char c; + char *t; + + /* Skip over any whitespace */ + do + { + c = fgetc(in); + } + while (((c == 32) || (c == 9)) && (!feof(in))); + ungetc(c, in); + + /* Try to read an offset */ + if (fscanf(in, "0x%x", &offset) != 1) + { + goto over; + } + /* Skip over any whitespace */ + do + { + c = fgetc(in); + } + while ((c == 32) && (!feof(in))); + ungetc(c, in); + + /* Names never start with . or (*/ + if ((c != '_') && + ((c < 'a') || (c > 'z')) && + ((c < 'A') || (c > 'Z'))) + goto over; + + /* Read the name */ + t = text; + do + { + c = fgetc(in); + *t++ = c; + } + while (c > 32); + t[-1] = 0; + + /* Now there should be nothing left on this line */ + if ((c != 10) && (c != 13)) + goto over; + + /* And put the return back */ + ungetc(c, in); + + if (t != text) + { + addFn(text, offset); + } + + over: + /* Skip to the end of the line */ + do + { + c = fgetc(in); + } + while ((c >= 32) && (!feof(in))); + + /* Skip over any newlines */ + while (((c == 10) || (c == 13)) && (!feof(in))) + { + c = fgetc(in); + } + + /* And put the first non whitespace/non return char back */ + ungetc(c, in); + } + + fclose(in); +} + +static void show_profile() +{ + int i; + + for (i=0; i < numFunctions; i++) + { + fprintf(stdout, "%08x (%6.2f%%: %6d) %s\n", + functionTable[i].offset, + functionTable[i].percent, + functionTable[i].count, + functionTable[i].name); + } +} + +int byAddress(const void *_e1, const void *_e2) +{ + const Profile_Entry *e1 = (const Profile_Entry *)_e1; + const Profile_Entry *e2 = (const Profile_Entry *)_e2; + + return e1->offset - e2->offset; +} + +int byTime(const void *_e1, const void *_e2) +{ + const Profile_Entry *e1 = (const Profile_Entry *)_e1; + const Profile_Entry *e2 = (const Profile_Entry *)_e2; + + return e2->count - e1->count; +} + +static void process_profile() +{ + int next; + int fn; + int idx; + int max; + int total; + + /* Sort into address order */ + qsort(functionTable, + numFunctions, + sizeof(Profile_Entry), + byAddress); + + /* Run through the profile adding it to the appropriate function */ + fn = -1; /* Which function are we looking at */ + next = -1; /* At what address should we move to the next function */ + idx = 0; /* Where are we in the profile */ + max = profile_len>>2; + total = 0; + for (idx = 0; idx < max; idx++) + { + while ((idx<<(granularity+2)) >= next) + { + /* Move to the next function */ + fn++; + //fprintf(stdout, "Will be on fn %s until we pass %x\n", + // functionTable[fn].name, functionTable[fn+1].offset); + next = 0x7FFFFFFF; + if (fn+1 < numFunctions) + { + next = functionTable[fn+1].offset; + } + } + //fprintf(stdout, "fn=%d count=%d idx=%d next=%x\n", + // fn, functionTable[fn].count, idx, next); + functionTable[fn].count += profile[idx]; + total += profile[idx]; + } + + for (fn = 0; fn < numFunctions; fn++) + { + functionTable[fn].percent = 100.0*functionTable[fn].count/total; + } + + fprintf(stdout, "Profile by Address\n"); + show_profile(); + + /* Sort into time order */ + qsort(functionTable, + numFunctions, + sizeof(Profile_Entry), + byTime); + + fprintf(stdout, "\n\n"); + fprintf(stdout, "Profile by Time\n"); + show_profile(); +} + +int main(int argc, const char *argv[]) +{ + read_args(argc, argv); + + read_profile(); + read_map(); + + process_profile(); + + return EXIT_SUCCESS; +} diff --git a/android/jni/tremolo/asm_arm.h b/android/jni/tremolo/asm_arm.h new file mode 100644 index 00000000..4a61effe --- /dev/null +++ b/android/jni/tremolo/asm_arm.h @@ -0,0 +1,245 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: arm7 and later wide math functions + + ********************************************************************/ + +#ifdef _ARM_ASSEM_ + +#if !defined(_V_WIDE_MATH) && !defined(_LOW_ACCURACY_) +#define _V_WIDE_MATH + +static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) { + int lo,hi; + asm volatile("smull\t%0, %1, %2, %3" + : "=&r"(lo),"=&r"(hi) + : "%r"(x),"r"(y) + : "cc"); + return(hi); +} + +static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) { + return MULT32(x,y)<<1; +} + +static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) { + int lo,hi; + asm volatile("smull %0, %1, %2, %3\n\t" + "movs %0, %0, lsr #15\n\t" + "adc %1, %0, %1, lsl #17\n\t" + : "=&r"(lo),"=&r"(hi) + : "%r"(x),"r"(y) + : "cc"); + return(hi); +} + +#define MB() asm volatile ("" : : : "memory") + +static inline void XPROD32(ogg_int32_t a, ogg_int32_t b, + ogg_int32_t t, ogg_int32_t v, + ogg_int32_t *x, ogg_int32_t *y) +{ + int x1, y1, l; + asm( "smull %0, %1, %4, %6\n\t" + "smlal %0, %1, %5, %7\n\t" + "rsb %3, %4, #0\n\t" + "smull %0, %2, %5, %6\n\t" + "smlal %0, %2, %3, %7" + : "=&r" (l), "=&r" (x1), "=&r" (y1), "=r" (a) + : "3" (a), "r" (b), "r" (t), "r" (v) + : "cc" ); + *x = x1; + MB(); + *y = y1; +} + +/* x = (a*t + b*v)>>31, y = (b*t - a*v)>>31 */ +static inline void XPROD31(ogg_int32_t a, ogg_int32_t b, + ogg_int32_t t, ogg_int32_t v, + ogg_int32_t *x, ogg_int32_t *y) +{ + int x1, y1, l; + asm( "smull %0, %1, %4, %6\n\t" + "smlal %0, %1, %5, %7\n\t" + "rsb %3, %4, #0\n\t" + "smull %0, %2, %5, %6\n\t" + "smlal %0, %2, %3, %7" + : "=&r" (l), "=&r" (x1), "=&r" (y1), "=r" (a) + : "3" (a), "r" (b), "r" (t), "r" (v) + : "cc" ); + *x = x1 << 1; + MB(); + *y = y1 << 1; +} + +/* x = (a*t - b*v)>>31, y = (b*t + a*v)>>31 */ +static inline void XNPROD31(ogg_int32_t a, ogg_int32_t b, + ogg_int32_t t, ogg_int32_t v, + ogg_int32_t *x, ogg_int32_t *y) +{ + int x1, y1, l; + asm( "rsb %2, %4, #0\n\t" + "smull %0, %1, %3, %5\n\t" + "smlal %0, %1, %2, %6\n\t" + "smull %0, %2, %4, %5\n\t" + "smlal %0, %2, %3, %6" + : "=&r" (l), "=&r" (x1), "=&r" (y1) + : "r" (a), "r" (b), "r" (t), "r" (v) + : "cc" ); + *x = x1 << 1; + MB(); + *y = y1 << 1; +} + +#endif + +#ifndef _V_CLIP_MATH +#define _V_CLIP_MATH + +static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) { + int tmp; + asm volatile("subs %1, %0, #32768\n\t" + "movpl %0, #0x7f00\n\t" + "orrpl %0, %0, #0xff\n" + "adds %1, %0, #32768\n\t" + "movmi %0, #0x8000" + : "+r"(x),"=r"(tmp) + : + : "cc"); + return(x); +} + +#endif + +#ifndef _V_LSP_MATH_ASM +#define _V_LSP_MATH_ASM + +static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip, + ogg_int32_t *qexpp, + ogg_int32_t *ilsp,ogg_int32_t wi, + ogg_int32_t m){ + + ogg_uint32_t qi=*qip,pi=*pip; + ogg_int32_t qexp=*qexpp; + + asm("mov r0,%3;" + "mov r1,%5,asr#1;" + "add r0,r0,r1,lsl#3;" + "1:" + + "ldmdb r0!,{r1,r3};" + "subs r1,r1,%4;" //ilsp[j]-wi + "rsbmi r1,r1,#0;" //labs(ilsp[j]-wi) + "umull %0,r2,r1,%0;" //qi*=labs(ilsp[j]-wi) + + "subs r1,r3,%4;" //ilsp[j+1]-wi + "rsbmi r1,r1,#0;" //labs(ilsp[j+1]-wi) + "umull %1,r3,r1,%1;" //pi*=labs(ilsp[j+1]-wi) + + "cmn r2,r3;" // shift down 16? + "beq 0f;" + "add %2,%2,#16;" + "mov %0,%0,lsr #16;" + "orr %0,%0,r2,lsl #16;" + "mov %1,%1,lsr #16;" + "orr %1,%1,r3,lsl #16;" + "0:" + "cmp r0,%3;\n" + "bhi 1b;\n" + + // odd filter assymetry + "ands r0,%5,#1;\n" + "beq 2f;\n" + "add r0,%3,%5,lsl#2;\n" + + "ldr r1,[r0,#-4];\n" + "mov r0,#0x4000;\n" + + "subs r1,r1,%4;\n" //ilsp[j]-wi + "rsbmi r1,r1,#0;\n" //labs(ilsp[j]-wi) + "umull %0,r2,r1,%0;\n" //qi*=labs(ilsp[j]-wi) + "umull %1,r3,r0,%1;\n" //pi*=labs(ilsp[j+1]-wi) + + "cmn r2,r3;\n" // shift down 16? + "beq 2f;\n" + "add %2,%2,#16;\n" + "mov %0,%0,lsr #16;\n" + "orr %0,%0,r2,lsl #16;\n" + "mov %1,%1,lsr #16;\n" + "orr %1,%1,r3,lsl #16;\n" + + //qi=(pi>>shift)*labs(ilsp[j]-wi); + //pi=(qi>>shift)*labs(ilsp[j+1]-wi); + //qexp+=shift; + + //} + + /* normalize to max 16 sig figs */ + "2:" + "mov r2,#0;" + "orr r1,%0,%1;" + "tst r1,#0xff000000;" + "addne r2,r2,#8;" + "movne r1,r1,lsr #8;" + "tst r1,#0x00f00000;" + "addne r2,r2,#4;" + "movne r1,r1,lsr #4;" + "tst r1,#0x000c0000;" + "addne r2,r2,#2;" + "movne r1,r1,lsr #2;" + "tst r1,#0x00020000;" + "addne r2,r2,#1;" + "movne r1,r1,lsr #1;" + "tst r1,#0x00010000;" + "addne r2,r2,#1;" + "mov %0,%0,lsr r2;" + "mov %1,%1,lsr r2;" + "add %2,%2,r2;" + + : "+r"(qi),"+r"(pi),"+r"(qexp) + : "r"(ilsp),"r"(wi),"r"(m) + : "r0","r1","r2","r3","cc"); + + *qip=qi; + *pip=pi; + *qexpp=qexp; +} + +static inline void lsp_norm_asm(ogg_uint32_t *qip,ogg_int32_t *qexpp){ + + ogg_uint32_t qi=*qip; + ogg_int32_t qexp=*qexpp; + + asm("tst %0,#0x0000ff00;" + "moveq %0,%0,lsl #8;" + "subeq %1,%1,#8;" + "tst %0,#0x0000f000;" + "moveq %0,%0,lsl #4;" + "subeq %1,%1,#4;" + "tst %0,#0x0000c000;" + "moveq %0,%0,lsl #2;" + "subeq %1,%1,#2;" + "tst %0,#0x00008000;" + "moveq %0,%0,lsl #1;" + "subeq %1,%1,#1;" + : "+r"(qi),"+r"(qexp) + : + : "cc"); + *qip=qi; + *qexpp=qexp; +} + +#endif +#endif + diff --git a/android/jni/tremolo/bibble.txt b/android/jni/tremolo/bibble.txt new file mode 100644 index 00000000..e443d057 --- /dev/null +++ b/android/jni/tremolo/bibble.txt @@ -0,0 +1,486 @@ +Profile by Address +00000000 ( 40.06%: 2115) Address 0 +00011008 ( 0.00%: 0) WinMainCRTStartup +00011078 ( 0.00%: 0) _cinit +000110d8 ( 0.00%: 0) exit +000111b8 ( 0.00%: 0) _exit +000111c4 ( 0.00%: 0) _cexit +000111d4 ( 0.00%: 0) _c_exit +000111e4 ( 0.00%: 0) Output +000112b0 ( 0.00%: 0) main2 +000115c8 ( 0.00%: 0) WinMain +00011604 ( 0.00%: 0) speedtest +000117c8 ( 0.00%: 0) Profile_dump +00011978 ( 0.42%: 22) Profile_init +00011a54 ( 0.00%: 0) oggpack_eop +00011a68 ( 0.00%: 0) oggpack_bytes +00011a98 ( 1.84%: 97) oggpack_bits +00011ad4 ( 1.55%: 82) oggpack_look +00011bf8 ( 0.97%: 51) oggpack_adv +00011c80 ( 0.00%: 0) oggpack_readinit +00011cb8 ( 0.02%: 1) oggpack_read +00011e4c ( 0.02%: 1) _ilog +0001271c ( 0.02%: 1) _book_maptype1_quantvals +0001279c ( 0.00%: 0) vorbis_book_clear +000127d0 ( 1.08%: 57) vorbis_book_unpack +00012fd8 ( 0.00%: 0) vorbis_book_decode +00012ff0 ( 7.61%: 402) decode_map +00013230 ( 0.00%: 0) vorbis_book_decodevs_add +000132f8 ( 0.00%: 0) vorbis_book_decodev_add +000133b0 ( 0.32%: 17) vorbis_book_decodev_set +000134a4 ( 4.30%: 227) vorbis_book_decodevv_add +00013578 ( 0.00%: 0) vorbis_dsp_restart +000135e0 ( 0.00%: 0) vorbis_dsp_create +00013694 ( 0.04%: 2) vorbis_dsp_destroy +000137e4 ( 0.04%: 2) vorbis_dsp_pcmout +00013910 ( 0.00%: 0) vorbis_dsp_read +00013950 ( 0.00%: 0) vorbis_packet_blocksize +000139d0 ( 0.02%: 1) vorbis_dsp_synthesis +00013dd0 ( 0.00%: 0) floor0_free_info +00013ddc ( 0.00%: 0) floor0_info_unpack +00013eec ( 0.00%: 0) floor0_memosize +00013ef8 ( 0.00%: 0) floor0_inverse1 +00014054 ( 0.00%: 0) vorbis_lsp_to_curve +000146b8 ( 0.00%: 0) floor0_inverse2 +0001474c ( 0.04%: 2) floor1_free_info +00014804 ( 0.04%: 2) floor1_info_unpack +00014e94 ( 0.00%: 0) floor1_memosize +00014e9c ( 0.49%: 26) floor1_inverse1 +000151b8 ( 4.89%: 258) floor1_inverse2 +00015588 ( 1.19%: 63) ogg_buffer_dup +00015a60 ( 0.08%: 4) ogg_page_version +00015aa0 ( 0.02%: 1) ogg_page_continued +00015ae0 ( 0.02%: 1) ogg_page_bos +00015b20 ( 0.00%: 0) ogg_page_eos +00015b60 ( 0.11%: 6) ogg_page_granulepos +00015c28 ( 0.15%: 8) ogg_page_serialno +00015c68 ( 0.00%: 0) ogg_page_pageno +00015ca8 ( 0.00%: 0) ogg_page_packets +00015d0c ( 0.00%: 0) ogg_sync_create +00015d60 ( 0.00%: 0) ogg_sync_reset +00015d90 ( 0.11%: 6) ogg_sync_destroy +00015de8 ( 0.13%: 7) ogg_sync_bufferin +00015ea4 ( 0.08%: 4) ogg_sync_wrote +00015f00 ( 0.11%: 6) ogg_page_release +00015f40 ( 2.90%: 153) ogg_sync_pageseek +00016260 ( 0.00%: 0) ogg_sync_pageout +000162a8 ( 0.00%: 0) ogg_stream_create +000162cc ( 0.08%: 4) ogg_stream_destroy +0001636c ( 0.21%: 11) ogg_stream_pagein +00016454 ( 0.06%: 3) ogg_stream_reset +000164c8 ( 0.00%: 0) ogg_stream_reset_serialno +000164e4 ( 0.40%: 21) ogg_packet_release +000169e8 ( 0.00%: 0) ogg_stream_packetout +000169f0 ( 0.00%: 0) ogg_stream_packetpeek +000169f8 ( 0.00%: 0) ogg_page_dup +00016a68 ( 0.00%: 0) vorbis_comment_init +00016adc ( 0.00%: 0) vorbis_comment_query +00016bb0 ( 0.00%: 0) vorbis_comment_query_count +00016c60 ( 0.00%: 0) vorbis_comment_clear +00016cec ( 0.00%: 0) vorbis_info_blocksize +00016d00 ( 0.00%: 0) vorbis_info_init +00016d48 ( 0.00%: 0) vorbis_info_clear +00016ef8 ( 0.00%: 0) vorbis_dsp_headerin +00017514 ( 0.00%: 0) mapping_clear_info +00017590 ( 0.02%: 1) mapping_info_unpack +000177e4 ( 1.59%: 84) mapping_inverse +00017c84 ( 0.04%: 2) mdct_unroll_lap +00017f00 ( 0.02%: 1) mdct_backward +00018244 ( 0.00%: 0) _VDBG_dump +000182a8 ( 0.00%: 0) _VDBG_malloc +000183f4 ( 0.00%: 0) _VDBG_free +0001841c ( 0.00%: 0) res_clear_info +0001846c ( 0.00%: 0) res_unpack +00018680 ( 1.86%: 98) res_inverse +00019b7c ( 0.00%: 0) ov_clear +00019d20 ( 0.00%: 0) ov_test_callbacks +00019d60 ( 0.00%: 0) ov_test +00019dac ( 0.00%: 0) ov_streams +00019db4 ( 0.00%: 0) ov_seekable +00019dbc ( 0.00%: 0) ov_time_total +00019e80 ( 0.00%: 0) ov_bitrate +0001a008 ( 0.00%: 0) ov_bitrate_instant +0001a084 ( 0.00%: 0) ov_serialnumber +0001a0fc ( 0.00%: 0) ov_raw_total +0001a1ac ( 0.00%: 0) ov_pcm_total +0001a250 ( 0.00%: 0) ov_raw_seek +0001ab40 ( 0.00%: 0) ov_test_open +0001ab58 ( 0.00%: 0) ov_open_callbacks +0001abb0 ( 0.00%: 0) ov_open +0001abfc ( 0.00%: 0) ov_pcm_seek_page +0001b4a4 ( 0.00%: 0) ov_pcm_seek +0001b8c8 ( 0.00%: 0) ov_time_seek +0001ba48 ( 0.00%: 0) ov_time_seek_page +0001bbc8 ( 0.00%: 0) ov_raw_tell +0001bbec ( 0.00%: 0) ov_pcm_tell +0001bc10 ( 0.00%: 0) ov_time_tell +0001bd2c ( 0.00%: 0) ov_info +0001bd70 ( 0.00%: 0) ov_comment +0001bdb4 ( 0.09%: 5) ov_read +0001be94 ( 0.00%: 0) mdct_unroll_prelap +0001bf34 ( 0.06%: 3) mdct_unroll_postlap +0001bff8 ( 3.43%: 181) mdct_unroll_part2 +0001c050 ( 1.21%: 64) mdct_unroll_part3 +0001c0a8 ( 0.85%: 45) mdct_shift_right +0001c104 ( 14.45%: 763) mdct_backwardARM +0001c998 ( 6.04%: 319) decode_packed_entry_number +0001cb58 ( 0.00%: 0) stmiaTest +0001cbbc ( 0.00%: 0) strTest +0001cc3c ( 0.00%: 0) smullTest +0001cc80 ( 0.00%: 0) __udivdi3 +0001d1f0 ( 0.00%: 0) __aeabi_drsub +0001d1f8 ( 0.00%: 0) __aeabi_dsub +0001d1f8 ( 0.00%: 0) __subdf3 +0001d1fc ( 0.00%: 0) __adddf3 +0001d1fc ( 0.00%: 0) __aeabi_dadd +0001d4dc ( 0.00%: 0) __aeabi_ui2d +0001d4dc ( 0.00%: 0) __floatunsidf +0001d500 ( 0.00%: 0) __floatsidf +0001d500 ( 0.00%: 0) __aeabi_i2d +0001d528 ( 0.00%: 0) __extendsfdf2 +0001d528 ( 0.00%: 0) __aeabi_f2d +0001d568 ( 0.00%: 0) __aeabi_ul2d +0001d568 ( 0.00%: 0) __floatundidf +0001d57c ( 0.00%: 0) __floatdidf +0001d57c ( 0.00%: 0) __aeabi_l2d +0001d5dc ( 0.00%: 0) __aeabi_dmul +0001d5dc ( 0.00%: 0) __muldf3 +0001d904 ( 0.00%: 0) __aeabi_ddiv +0001d904 ( 0.00%: 0) __divdf3 +0001db08 ( 0.00%: 0) __modsi3 +0001dbec ( 0.30%: 16) __divsi3 +0001dd14 ( 0.00%: 0) __aeabi_idivmod +0001dd2c ( 0.04%: 2) __udivsi3 +0001de24 ( 0.00%: 0) __aeabi_uidivmod +0001de3c ( 0.00%: 0) __divdi3 +0001e3f8 ( 0.00%: 0) __umodsi3 +0001e4c4 ( 0.00%: 0) __aeabi_ldiv0 +0001e4c4 ( 0.00%: 0) __div0 +0001e4c4 ( 0.00%: 0) __aeabi_idiv0 +0001e4c8 ( 0.00%: 0) _XcptFilter +0001e4d4 ( 0.00%: 0) __C_specific_handler +0001e4e0 ( 0.00%: 0) LocalFree +0001e4ec ( 0.00%: 0) vsprintf +0001e4f8 ( 0.57%: 30) OutputDebugStringW +0001e504 ( 0.00%: 0) fopen +0001e510 ( 0.00%: 0) fwrite +0001e51c ( 0.00%: 0) fread +0001e528 ( 0.00%: 0) GetThreadTimes +0001e534 ( 0.00%: 0) Sleep +0001e540 ( 0.04%: 2) fputc +0001e54c ( 0.00%: 0) fclose +0001e558 ( 0.00%: 0) memset +0001e564 ( 0.00%: 0) GetThreadContext +0001e570 ( 0.00%: 0) malloc +0001e57c ( 0.00%: 0) CreateThread +0001e588 ( 0.00%: 0) SetThreadPriority +0001e594 ( 0.00%: 0) free +0001e5a0 ( 0.00%: 0) calloc +0001e5ac ( 0.00%: 0) realloc +0001e5b8 ( 0.00%: 0) memchr +0001e5c4 ( 0.00%: 0) toupper +0001e5d0 ( 0.00%: 0) strlen +0001e5dc ( 0.00%: 0) strcpy +0001e5e8 ( 0.00%: 0) memcmp +0001e5f4 ( 0.00%: 0) _getstdfilex +0001e600 ( 0.00%: 0) fprintf +0001e60c ( 0.00%: 0) fseek +0001e618 ( 0.00%: 0) memcpy +0001e624 ( 0.00%: 0) ftell +0001f418 ( 0.00%: 0) start_time +00028764 ( 0.00%: 0) FLOOR_fromdB_LOOKUP +00028b88 ( 0.00%: 0) sincos_lookup0 +00029b90 ( 0.00%: 0) sincos_lookup1 +0002ada4 ( 0.00%: 0) __clz_tab +0002d014 ( 0.00%: 0) global_bytes +0002d030 ( 0.00%: 0) __onexitbegin +0002d034 ( 0.00%: 0) __onexitend +0002d038 ( 0.00%: 0) _exitflag +0002d03c ( 0.00%: 0) pcmout +0002e03c ( 0.00%: 0) ref +0002f03c ( 0.00%: 0) text +0003003c ( 0.00%: 0) speedblock +00039000 ( 0.00%: 0) __IMPORT_DESCRIPTOR_COREDLL +00039014 ( 0.00%: 0) __NULL_IMPORT_DESCRIPTOR +000390b8 ( 0.00%: 0) __imp__XcptFilter +000390bc ( 0.00%: 0) __imp___C_specific_handler +000390c0 ( 0.00%: 0) __imp_LocalFree +000390c4 ( 0.00%: 0) __imp_vsprintf +000390c8 ( 0.00%: 0) __imp_OutputDebugStringW +000390cc ( 0.00%: 0) __imp_fopen +000390d0 ( 0.00%: 0) __imp_fwrite +000390d4 ( 0.00%: 0) __imp_fread +000390d8 ( 0.00%: 0) __imp_GetThreadTimes +000390dc ( 0.00%: 0) __imp_Sleep +000390e0 ( 0.00%: 0) __imp_fputc +000390e4 ( 0.00%: 0) __imp_fclose +000390e8 ( 0.00%: 0) __imp_memset +000390ec ( 0.00%: 0) __imp_GetThreadContext +000390f0 ( 0.00%: 0) __imp_malloc +000390f4 ( 0.00%: 0) __imp_CreateThread +000390f8 ( 0.00%: 0) __imp_SetThreadPriority +000390fc ( 0.00%: 0) __imp_free +00039100 ( 0.00%: 0) __imp_calloc +00039104 ( 0.00%: 0) __imp_realloc +00039108 ( 0.00%: 0) __imp_memchr +0003910c ( 0.00%: 0) __imp_toupper +00039110 ( 0.00%: 0) __imp_strlen +00039114 ( 0.00%: 0) __imp_strcpy +00039118 ( 0.00%: 0) __imp_memcmp +0003911c ( 0.00%: 0) __imp__getstdfilex +00039120 ( 0.00%: 0) __imp_fprintf +00039124 ( 0.00%: 0) __imp_fseek +00039128 ( 0.00%: 0) __imp_memcpy +0003912c ( 0.00%: 0) __imp_ftell +0003a000 ( 0.00%: 0) __xc_a +0003a004 ( 0.00%: 0) __xc_z +0003a008 ( 0.00%: 0) __xi_a +0003a00c ( 0.00%: 0) __xi_z +0003a010 ( 0.00%: 0) __xp_a +0003a014 ( 0.00%: 0) __xp_z +0003a018 ( 0.00%: 0) __xt_a +0003a01c ( 0.00%: 0) __xt_z + + +Profile by Time +00000000 ( 40.06%: 2115) Address 0 +0001c104 ( 14.45%: 763) mdct_backwardARM +00012ff0 ( 7.61%: 402) decode_map +0001c998 ( 6.04%: 319) decode_packed_entry_number +000151b8 ( 4.89%: 258) floor1_inverse2 +000134a4 ( 4.30%: 227) vorbis_book_decodevv_add +0001bff8 ( 3.43%: 181) mdct_unroll_part2 +00015f40 ( 2.90%: 153) ogg_sync_pageseek +00018680 ( 1.86%: 98) res_inverse +00011a98 ( 1.84%: 97) oggpack_bits +000177e4 ( 1.59%: 84) mapping_inverse +00011ad4 ( 1.55%: 82) oggpack_look +0001c050 ( 1.21%: 64) mdct_unroll_part3 +00015588 ( 1.19%: 63) ogg_buffer_dup +000127d0 ( 1.08%: 57) vorbis_book_unpack +00011bf8 ( 0.97%: 51) oggpack_adv +0001c0a8 ( 0.85%: 45) mdct_shift_right +0001e4f8 ( 0.57%: 30) OutputDebugStringW +00014e9c ( 0.49%: 26) floor1_inverse1 +00011978 ( 0.42%: 22) Profile_init +000164e4 ( 0.40%: 21) ogg_packet_release +000133b0 ( 0.32%: 17) vorbis_book_decodev_set +0001dbec ( 0.30%: 16) __divsi3 +0001636c ( 0.21%: 11) ogg_stream_pagein +00015c28 ( 0.15%: 8) ogg_page_serialno +00015de8 ( 0.13%: 7) ogg_sync_bufferin +00015d90 ( 0.11%: 6) ogg_sync_destroy +00015f00 ( 0.11%: 6) ogg_page_release +00015b60 ( 0.11%: 6) ogg_page_granulepos +0001bdb4 ( 0.09%: 5) ov_read +000162cc ( 0.08%: 4) ogg_stream_destroy +00015ea4 ( 0.08%: 4) ogg_sync_wrote +00015a60 ( 0.08%: 4) ogg_page_version +0001bf34 ( 0.06%: 3) mdct_unroll_postlap +00016454 ( 0.06%: 3) ogg_stream_reset +0001e540 ( 0.04%: 2) fputc +00014804 ( 0.04%: 2) floor1_info_unpack +0001474c ( 0.04%: 2) floor1_free_info +0001dd2c ( 0.04%: 2) __udivsi3 +00017c84 ( 0.04%: 2) mdct_unroll_lap +00013694 ( 0.04%: 2) vorbis_dsp_destroy +000137e4 ( 0.04%: 2) vorbis_dsp_pcmout +00011cb8 ( 0.02%: 1) oggpack_read +00017f00 ( 0.02%: 1) mdct_backward +000139d0 ( 0.02%: 1) vorbis_dsp_synthesis +00011e4c ( 0.02%: 1) _ilog +0001271c ( 0.02%: 1) _book_maptype1_quantvals +00017590 ( 0.02%: 1) mapping_info_unpack +00015ae0 ( 0.02%: 1) ogg_page_bos +00015aa0 ( 0.02%: 1) ogg_page_continued +00018244 ( 0.00%: 0) _VDBG_dump +000182a8 ( 0.00%: 0) _VDBG_malloc +000183f4 ( 0.00%: 0) _VDBG_free +0001841c ( 0.00%: 0) res_clear_info +0001846c ( 0.00%: 0) res_unpack +00019b7c ( 0.00%: 0) ov_clear +00019d20 ( 0.00%: 0) ov_test_callbacks +00019d60 ( 0.00%: 0) ov_test +00019dac ( 0.00%: 0) ov_streams +00019db4 ( 0.00%: 0) ov_seekable +00019dbc ( 0.00%: 0) ov_time_total +00019e80 ( 0.00%: 0) ov_bitrate +0001a008 ( 0.00%: 0) ov_bitrate_instant +0001a084 ( 0.00%: 0) ov_serialnumber +0001a0fc ( 0.00%: 0) ov_raw_total +0001a1ac ( 0.00%: 0) ov_pcm_total +0001a250 ( 0.00%: 0) ov_raw_seek +0001ab40 ( 0.00%: 0) ov_test_open +0001ab58 ( 0.00%: 0) ov_open_callbacks +0001abb0 ( 0.00%: 0) ov_open +0001abfc ( 0.00%: 0) ov_pcm_seek_page +0001b4a4 ( 0.00%: 0) ov_pcm_seek +0001b8c8 ( 0.00%: 0) ov_time_seek +0001ba48 ( 0.00%: 0) ov_time_seek_page +0001bbc8 ( 0.00%: 0) ov_raw_tell +0001bbec ( 0.00%: 0) ov_pcm_tell +0001bc10 ( 0.00%: 0) ov_time_tell +0001bd2c ( 0.00%: 0) ov_info +0001bd70 ( 0.00%: 0) ov_comment +0001be94 ( 0.00%: 0) mdct_unroll_prelap +0001cb58 ( 0.00%: 0) stmiaTest +0001cbbc ( 0.00%: 0) strTest +0001cc3c ( 0.00%: 0) smullTest +0001cc80 ( 0.00%: 0) __udivdi3 +0001d1f0 ( 0.00%: 0) __aeabi_drsub +0001d1f8 ( 0.00%: 0) __aeabi_dsub +0001d1f8 ( 0.00%: 0) __subdf3 +0001d1fc ( 0.00%: 0) __adddf3 +0001d1fc ( 0.00%: 0) __aeabi_dadd +0001d4dc ( 0.00%: 0) __aeabi_ui2d +0001d4dc ( 0.00%: 0) __floatunsidf +0001d500 ( 0.00%: 0) __floatsidf +0001d500 ( 0.00%: 0) __aeabi_i2d +0001d528 ( 0.00%: 0) __extendsfdf2 +0001d528 ( 0.00%: 0) __aeabi_f2d +0001d568 ( 0.00%: 0) __aeabi_ul2d +0001d568 ( 0.00%: 0) __floatundidf +0001d57c ( 0.00%: 0) __floatdidf +0001d57c ( 0.00%: 0) __aeabi_l2d +0001d5dc ( 0.00%: 0) __aeabi_dmul +0001d5dc ( 0.00%: 0) __muldf3 +0001d904 ( 0.00%: 0) __aeabi_ddiv +0001d904 ( 0.00%: 0) __divdf3 +0001db08 ( 0.00%: 0) __modsi3 +0001dd14 ( 0.00%: 0) __aeabi_idivmod +0001de24 ( 0.00%: 0) __aeabi_uidivmod +0001de3c ( 0.00%: 0) __divdi3 +0001e3f8 ( 0.00%: 0) __umodsi3 +0001e4c4 ( 0.00%: 0) __aeabi_ldiv0 +0001e4c4 ( 0.00%: 0) __div0 +0001e4c4 ( 0.00%: 0) __aeabi_idiv0 +0001e4c8 ( 0.00%: 0) _XcptFilter +0001e4d4 ( 0.00%: 0) __C_specific_handler +0001e4e0 ( 0.00%: 0) LocalFree +0001e4ec ( 0.00%: 0) vsprintf +0001e504 ( 0.00%: 0) fopen +0001e510 ( 0.00%: 0) fwrite +0001e51c ( 0.00%: 0) fread +0001e528 ( 0.00%: 0) GetThreadTimes +0001e534 ( 0.00%: 0) Sleep +0001e54c ( 0.00%: 0) fclose +0001e558 ( 0.00%: 0) memset +0001e564 ( 0.00%: 0) GetThreadContext +0001e570 ( 0.00%: 0) malloc +0001e57c ( 0.00%: 0) CreateThread +0001e588 ( 0.00%: 0) SetThreadPriority +0001e594 ( 0.00%: 0) free +0001e5a0 ( 0.00%: 0) calloc +0001e5ac ( 0.00%: 0) realloc +0001e5b8 ( 0.00%: 0) memchr +0001e5c4 ( 0.00%: 0) toupper +0001e5d0 ( 0.00%: 0) strlen +0001e5dc ( 0.00%: 0) strcpy +0001e5e8 ( 0.00%: 0) memcmp +0001e5f4 ( 0.00%: 0) _getstdfilex +0001e600 ( 0.00%: 0) fprintf +0001e60c ( 0.00%: 0) fseek +0001e618 ( 0.00%: 0) memcpy +0001e624 ( 0.00%: 0) ftell +0001f418 ( 0.00%: 0) start_time +00028764 ( 0.00%: 0) FLOOR_fromdB_LOOKUP +00028b88 ( 0.00%: 0) sincos_lookup0 +00029b90 ( 0.00%: 0) sincos_lookup1 +0002ada4 ( 0.00%: 0) __clz_tab +0002d014 ( 0.00%: 0) global_bytes +0002d030 ( 0.00%: 0) __onexitbegin +0002d034 ( 0.00%: 0) __onexitend +0002d038 ( 0.00%: 0) _exitflag +0002d03c ( 0.00%: 0) pcmout +0002e03c ( 0.00%: 0) ref +0002f03c ( 0.00%: 0) text +0003003c ( 0.00%: 0) speedblock +00039000 ( 0.00%: 0) __IMPORT_DESCRIPTOR_COREDLL +00039014 ( 0.00%: 0) __NULL_IMPORT_DESCRIPTOR +000390b8 ( 0.00%: 0) __imp__XcptFilter +000390bc ( 0.00%: 0) __imp___C_specific_handler +000390c0 ( 0.00%: 0) __imp_LocalFree +000390c4 ( 0.00%: 0) __imp_vsprintf +000390c8 ( 0.00%: 0) __imp_OutputDebugStringW +000390cc ( 0.00%: 0) __imp_fopen +000390d0 ( 0.00%: 0) __imp_fwrite +000390d4 ( 0.00%: 0) __imp_fread +000390d8 ( 0.00%: 0) __imp_GetThreadTimes +000390dc ( 0.00%: 0) __imp_Sleep +000390e0 ( 0.00%: 0) __imp_fputc +000390e4 ( 0.00%: 0) __imp_fclose +000390e8 ( 0.00%: 0) __imp_memset +000390ec ( 0.00%: 0) __imp_GetThreadContext +000390f0 ( 0.00%: 0) __imp_malloc +000390f4 ( 0.00%: 0) __imp_CreateThread +000390f8 ( 0.00%: 0) __imp_SetThreadPriority +000390fc ( 0.00%: 0) __imp_free +00039100 ( 0.00%: 0) __imp_calloc +00039104 ( 0.00%: 0) __imp_realloc +00039108 ( 0.00%: 0) __imp_memchr +0003910c ( 0.00%: 0) __imp_toupper +00039110 ( 0.00%: 0) __imp_strlen +00039114 ( 0.00%: 0) __imp_strcpy +00039118 ( 0.00%: 0) __imp_memcmp +0003911c ( 0.00%: 0) __imp__getstdfilex +00039120 ( 0.00%: 0) __imp_fprintf +00039124 ( 0.00%: 0) __imp_fseek +00039128 ( 0.00%: 0) __imp_memcpy +0003912c ( 0.00%: 0) __imp_ftell +0003a000 ( 0.00%: 0) __xc_a +0003a004 ( 0.00%: 0) __xc_z +0003a008 ( 0.00%: 0) __xi_a +0003a00c ( 0.00%: 0) __xi_z +0003a010 ( 0.00%: 0) __xp_a +0003a014 ( 0.00%: 0) __xp_z +0003a018 ( 0.00%: 0) __xt_a +0003a01c ( 0.00%: 0) __xt_z +00011008 ( 0.00%: 0) WinMainCRTStartup +00011078 ( 0.00%: 0) _cinit +000110d8 ( 0.00%: 0) exit +000111b8 ( 0.00%: 0) _exit +000111c4 ( 0.00%: 0) _cexit +000111d4 ( 0.00%: 0) _c_exit +000111e4 ( 0.00%: 0) Output +000112b0 ( 0.00%: 0) main2 +000115c8 ( 0.00%: 0) WinMain +00011604 ( 0.00%: 0) speedtest +000117c8 ( 0.00%: 0) Profile_dump +00011a54 ( 0.00%: 0) oggpack_eop +00011a68 ( 0.00%: 0) oggpack_bytes +00011c80 ( 0.00%: 0) oggpack_readinit +0001279c ( 0.00%: 0) vorbis_book_clear +00012fd8 ( 0.00%: 0) vorbis_book_decode +00013230 ( 0.00%: 0) vorbis_book_decodevs_add +000132f8 ( 0.00%: 0) vorbis_book_decodev_add +00013578 ( 0.00%: 0) vorbis_dsp_restart +000135e0 ( 0.00%: 0) vorbis_dsp_create +00013910 ( 0.00%: 0) vorbis_dsp_read +00013950 ( 0.00%: 0) vorbis_packet_blocksize +00013dd0 ( 0.00%: 0) floor0_free_info +00013ddc ( 0.00%: 0) floor0_info_unpack +00013eec ( 0.00%: 0) floor0_memosize +00013ef8 ( 0.00%: 0) floor0_inverse1 +00014054 ( 0.00%: 0) vorbis_lsp_to_curve +000146b8 ( 0.00%: 0) floor0_inverse2 +00014e94 ( 0.00%: 0) floor1_memosize +00015b20 ( 0.00%: 0) ogg_page_eos +00015c68 ( 0.00%: 0) ogg_page_pageno +00015ca8 ( 0.00%: 0) ogg_page_packets +00015d0c ( 0.00%: 0) ogg_sync_create +00015d60 ( 0.00%: 0) ogg_sync_reset +00016260 ( 0.00%: 0) ogg_sync_pageout +000162a8 ( 0.00%: 0) ogg_stream_create +000164c8 ( 0.00%: 0) ogg_stream_reset_serialno +000169e8 ( 0.00%: 0) ogg_stream_packetout +000169f0 ( 0.00%: 0) ogg_stream_packetpeek +000169f8 ( 0.00%: 0) ogg_page_dup +00016a68 ( 0.00%: 0) vorbis_comment_init +00016adc ( 0.00%: 0) vorbis_comment_query +00016bb0 ( 0.00%: 0) vorbis_comment_query_count +00016c60 ( 0.00%: 0) vorbis_comment_clear +00016cec ( 0.00%: 0) vorbis_info_blocksize +00016d00 ( 0.00%: 0) vorbis_info_init +00016d48 ( 0.00%: 0) vorbis_info_clear +00016ef8 ( 0.00%: 0) vorbis_dsp_headerin +00017514 ( 0.00%: 0) mapping_clear_info diff --git a/android/jni/tremolo/bitwise.c b/android/jni/tremolo/bitwise.c new file mode 100644 index 00000000..58e23f00 --- /dev/null +++ b/android/jni/tremolo/bitwise.c @@ -0,0 +1,843 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: packing variable sized words into an octet stream + + ********************************************************************/ + +/* We're 'LSb' endian; if we write a word but read individual bits, + then we'll read the lsb first */ + +#include +#include +#include "misc.h" +#include "ogg.h" + +#include + + +#if !defined(ARM_LITTLE_ENDIAN) || defined(_V_BIT_TEST) +static unsigned long mask[]= +{0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f, + 0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff, + 0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff, + 0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff, + 0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff, + 0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff, + 0x3fffffff,0x7fffffff,0xffffffff }; +#endif + +#ifdef ARM_LITTLE_ENDIAN + +#ifdef DEBUGGING_BITWISE +extern void oggpack_readinitARM(oggpack_buffer *b,ogg_reference *r); + +void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ + oggpack_readinitARM(b,r); + //fprintf(stderr, "Init: buffer=(%d,%x,%d,%d) %08x%08x\n", + // b->bitsLeftInSegment, b->ptr, b->bitsLeftInWord, b->count, + // b->ptr[1], b->ptr[0]); + //fflush(stderr); +} + +extern long oggpack_lookARM(oggpack_buffer *b,int bits); + +long oggpack_look(oggpack_buffer *b,int bits){ + long l; + + //fprintf(stderr, "PreLook: buffer=(%x,%x,%x) %08x%08x (%d bits)\n", + // b->bitsLeftInSegment, b->ptr, b->bitsLeftInWord, + // b->ptr[1], b->ptr[0], bits); + //fflush(stderr); + l = oggpack_lookARM(b,bits); + //fprintf(stderr, "Look: buffer=(%d,%x,%d,%d) %08x%08x (%d bits) (result=%x)\n", + // b->bitsLeftInSegment, b->ptr, b->bitsLeftInWord, b->count, + // b->ptr[1], b->ptr[0], bits, l); + //fflush(stderr); + + return l; +} + +extern void oggpack_advARM(oggpack_buffer *b,int bits); + +void oggpack_adv(oggpack_buffer *b,int bits){ + //fprintf(stderr, "Adv before: buffer=(%x,%x,%x) %08x%08x (%d bits)\n", + // b->bitsLeftInSegment, b->ptr, b->bitsLeftInWord, + // b->ptr[1], b->ptr[0],bits); + //fflush(stderr); + oggpack_advARM(b,bits); + //fprintf(stderr, "Adv: buffer=(%d,%x,%d,%d) %08x%08x\n", + // b->bitsLeftInSegment, b->ptr, b->bitsLeftInWord, b->count, + // b->ptr[1], b->ptr[0]); + //fflush(stderr); +} + +extern long oggpack_readARM(oggpack_buffer *b,int bits); + +/* bits <= 32 */ +long oggpack_read(oggpack_buffer *b,int bits){ + long l; + + //fprintf(stderr, "PreRead: buffer=(%d,%x,%d,%d) %08x%08x (%d bits)\n", + // b->bitsLeftInSegment, b->ptr, b->bitsLeftInWord, b->count, + // b->ptr[1], b->ptr[0], bits); + //fflush(stderr); + l = oggpack_readARM(b,bits); + //fprintf(stderr, "Read: buffer=(%d,%x,%d,%d) %08x%08x (%d bits) (result=%x)\n", + // b->bitsLeftInSegment, b->ptr, b->bitsLeftInWord, b->count, + // b->ptr[1], b->ptr[0], bits, l); + //fflush(stderr); + + return l; +} +#endif + +int oggpack_eop(oggpack_buffer *b){ + int ret; + if(b->bitsLeftInSegment<0)ret= -1; + else ret = 0; + //fprintf(stderr, "EOP %d\n", ret); + //fflush(stderr); + return ret; +} + +long oggpack_bytes(oggpack_buffer *b){ + long ret; + if(b->bitsLeftInSegment<0) ret = b->count+b->head->length; + else ret = b->count + b->head->length - (b->bitsLeftInSegment)/8; + //fprintf(stderr, "count=%d length=%d bitsLeftInSegment=%d\n", + // b->count, b->head->length, b->bitsLeftInSegment); + //fflush(stderr); + return ret; +} + +long oggpack_bits(oggpack_buffer *b){ + long ret; + if(b->bitsLeftInSegment<0) ret=(b->count+b->head->length)*8; + else ret = b->count*8 + b->head->length*8 - b->bitsLeftInSegment; + //fprintf(stderr, "count=%d length=%d bitsLeftInSegment=%d\n", + // b->count, b->head->length, b->bitsLeftInSegment); + //fflush(stderr); + return ret; +} + +#else + +/* spans forward, skipping as many bytes as headend is negative; if + headend is zero, simply finds next byte. If we're up to the end + of the buffer, leaves headend at zero. If we've read past the end, + halt the decode process. */ + +static void _span(oggpack_buffer *b){ + while(b->headend-(b->headbit>>3)<1){ + b->headend-=b->headbit>>3; + b->headbit&=0x7; + + if(b->head->next){ + b->count+=b->head->length; + b->head=b->head->next; + + if(b->headend+b->head->length>0) + b->headptr=b->head->buffer->data+b->head->begin-b->headend; + + b->headend+=b->head->length; + }else{ + /* we've either met the end of decode, or gone past it. halt + only if we're past */ + if(b->headend*8headbit) + /* read has fallen off the end */ + b->headend=-1; + break; + } + } +} + +void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ + memset(b,0,sizeof(*b)); + + b->tail=b->head=r; + b->count=0; + b->headptr=b->head->buffer->data+b->head->begin; + b->headend=b->head->length; + _span(b); + + //fprintf(stderr, + // "Init: buffer=(%d,%x,%d,%d) %02x%02x%02x%02x%02x%02x%02x%02x\n", + // b->headbit, b->headptr, b->headend, b->count, + // b->headptr[7], b->headptr[6], b->headptr[5], b->headptr[4], + // b->headptr[3], b->headptr[2], b->headptr[1], b->headptr[0]); + //fflush(stderr); +} + +#define _lookspan() while(!end){\ + head=head->next;\ + if(!head) return -1;\ + ptr=head->buffer->data + head->begin;\ + end=head->length;\ + } + +/* Read in bits without advancing the bitptr; bits <= 32 */ +long oggpack_look(oggpack_buffer *b,int bits){ + unsigned long m=mask[bits]; + unsigned long ret; + int BITS = bits; + + bits+=b->headbit; + + if(bits >= b->headend<<3){ + int end=b->headend; + unsigned char *ptr=b->headptr; + ogg_reference *head=b->head; + + if(end<0)return -1; + + if(bits){ + _lookspan(); + ret=*ptr++>>b->headbit; + if(bits>8){ + --end; + _lookspan(); + ret|=*ptr++<<(8-b->headbit); + if(bits>16){ + --end; + _lookspan(); + ret|=*ptr++<<(16-b->headbit); + if(bits>24){ + --end; + _lookspan(); + ret|=*ptr++<<(24-b->headbit); + if(bits>32 && b->headbit){ + --end; + _lookspan(); + ret|=*ptr<<(32-b->headbit); + } + } + } + } + } + + }else{ + + /* make this a switch jump-table */ + ret=b->headptr[0]>>b->headbit; + if(bits>8){ + ret|=b->headptr[1]<<(8-b->headbit); + if(bits>16){ + ret|=b->headptr[2]<<(16-b->headbit); + if(bits>24){ + ret|=b->headptr[3]<<(24-b->headbit); + if(bits>32 && b->headbit) + ret|=b->headptr[4]<<(32-b->headbit); + } + } + } + } + + ret&=m; + //fprintf(stderr, + // "Look: buffer=(%d,%x,%d,%d) %02x%02x%02x%02x%02x%02x%02x%02x (%d bits) return=%x\n", + // b->headbit, b->headptr, b->headend, b->count, + // b->headptr[7], b->headptr[6], b->headptr[5], b->headptr[4], + // b->headptr[3], b->headptr[2], b->headptr[1], b->headptr[0], + // BITS, ret); + //fflush(stderr); + return ret; +} + +/* limited to 32 at a time */ +void oggpack_adv(oggpack_buffer *b,int bits){ + int BITS=bits; + bits+=b->headbit; + b->headbit=bits&7; + b->headend-=(bits>>3); + b->headptr+=(bits>>3); + if(b->headend<1)_span(b); + //fprintf(stderr, "Adv: buffer=(%d,%x,%d,%d) %02x%02x%02x%02x%02x%02x%02x%02x (%d bits)\n", + // b->headbit, b->headptr, b->headend,b->count, + // b->headptr[7], b->headptr[6], b->headptr[5], b->headptr[4], + // b->headptr[3], b->headptr[2], b->headptr[1], b->headptr[0], + // BITS); + //fflush(stderr); +} + +int oggpack_eop(oggpack_buffer *b){ + int ret; + if(b->headend<0)ret= -1; + else ret = 0; + //fprintf(stderr, "EOP %d\n", ret); + //fflush(stderr); + return ret; +} + +long oggpack_bytes(oggpack_buffer *b){ + long ret; + if(b->headend<0) ret = b->count+b->head->length; + ret = b->count + b->head->length-b->headend + (b->headbit+7)/8; + //fprintf(stderr, "Bytes: buffer=(%d,%x,%d,%d) %02x%02x%02x%02x%02x%02x%02x%02x (%d bytes)\n", + // b->headbit, b->headptr, b->headend, b->count, + // b->headptr[7], b->headptr[6], b->headptr[5], b->headptr[4], + // b->headptr[3], b->headptr[2], b->headptr[1], b->headptr[0], + // ret); + //fflush(stderr); + return ret; +} + +long oggpack_bits(oggpack_buffer *b){ + long ret; + if(b->headend<0) ret = (b->count+b->head->length)*8; + else ret = (b->count + b->head->length-b->headend)*8 + b->headbit; + //fprintf(stderr, "Bits: buffer=(%x,%x,%x) %02x%02x%02x%02x%02x%02x%02x%02x (%d bits)\n", + // b->headbit, b->headptr, b->headend, + // b->headptr[7], b->headptr[6], b->headptr[5], b->headptr[4], + // b->headptr[3], b->headptr[2], b->headptr[1], b->headptr[0], + // ret); + //fflush(stderr); + return ret; +} + +/* bits <= 32 */ +long oggpack_read(oggpack_buffer *b,int bits){ + long ret=oggpack_look(b,bits); + oggpack_adv(b,bits); + return(ret); +} + +#endif + +/* Self test of the bitwise routines; everything else is based on + them, so they damned well better be solid. */ + +#ifdef _V_BIT_TEST +#include +#include +#include +#include "framing.c" + +static int ilog(unsigned long v){ + int ret=0; + while(v){ + ret++; + v>>=1; + } + return(ret); +} + +oggpack_buffer r; +oggpack_buffer o; +ogg_buffer_state *bs; +ogg_reference *or; +#define TESTWORDS 256 + +void report(char *in){ + fprintf(stderr,"%s",in); + exit(1); +} + +int getbyte(ogg_reference *or,int position){ + while(or && position>=or->length){ + position-=or->length; + or=or->next; + if(or==NULL){ + fprintf(stderr,"\n\tERROR: getbyte ran off end of buffer.\n"); + exit(1); + } + } + + if((position+or->begin)&1) + return (or->buffer->data[(position+or->begin)>>1])&0xff; + else + return (or->buffer->data[(position+or->begin)>>1]>>8)&0xff; +} + +void cliptest(unsigned long *b,int vals,int bits,int *comp,int compsize){ + long i,bitcount=0; + ogg_reference *or=ogg_buffer_alloc(bs,64); + for(i=0;ibuffer->data[i]= comp[i]; + or->length=i; + + oggpack_readinit(&r,or); + for(i=0;i7) + report("\nERROR: too many bits reported left over.\n"); + + /* does reading to exactly byte alignment *not* trip EOF? */ + if(oggpack_read(&o,leftover)==-1) + report("\nERROR: read to but not past exact end tripped EOF.\n"); + if(oggpack_bits(&o)!=count*8) + report("\nERROR: read to but not past exact end reported bad bitcount.\n"); + + /* does EOF trip properly after a single additional bit? */ + if(oggpack_read(&o,1)!=-1) + report("\nERROR: read past exact end did not trip EOF.\n"); + if(oggpack_bits(&o)!=count*8) + report("\nERROR: read past exact end reported bad bitcount.\n"); + + /* does EOF stay set over additional bit reads? */ + for(i=0;i<=32;i++){ + if(oggpack_read(&o,i)!=-1) + report("\nERROR: EOF did not stay set on stream.\n"); + if(oggpack_bits(&o)!=count*8) + report("\nERROR: read past exact end reported bad bitcount.\n"); + } +} + +void _end_verify2(int count){ + int i; + + /* are the proper number of bits left over? */ + int leftover=count*8-oggpack_bits(&o); + if(leftover>7) + report("\nERROR: too many bits reported left over.\n"); + + /* does reading to exactly byte alignment *not* trip EOF? */ + oggpack_adv(&o,leftover); +#ifdef ARM_LITTLE_ENDIAN + if(o.bitsLeftInSegment!=0) +#else + if(o.headend!=0) +#endif + report("\nERROR: read to but not past exact end tripped EOF.\n"); + if(oggpack_bits(&o)!=count*8) + report("\nERROR: read to but not past exact end reported bad bitcount.\n"); + + /* does EOF trip properly after a single additional bit? */ + oggpack_adv(&o,1); +#ifdef ARM_LITTLE_ENDIAN + if(o.bitsLeftInSegment>=0) +#else + if(o.headend>=0) +#endif + report("\nERROR: read past exact end did not trip EOF.\n"); + if(oggpack_bits(&o)!=count*8) + report("\nERROR: read past exact end reported bad bitcount.\n"); + + /* does EOF stay set over additional bit reads? */ + for(i=0;i<=32;i++){ + oggpack_adv(&o,i); +#ifdef ARM_LITTLE_ENDIAN + if(o.bitsLeftInSegment>=0) +#else + if(o.headend>=0) +#endif + report("\nERROR: EOF did not stay set on stream.\n"); + if(oggpack_bits(&o)!=count*8) + report("\nERROR: read past exact end reported bad bitcount.\n"); + } +} + +long ogg_buffer_length(ogg_reference *or){ + int count=0; + while(or){ + count+=or->length; + or=or->next; + } + return count; +} + +ogg_reference *ogg_buffer_extend(ogg_reference *or,long bytes){ + if(or){ + while(or->next){ + or=or->next; + } + or->next=ogg_buffer_alloc(or->buffer->ptr.owner,bytes); + return(or->next); + } + return 0; +} + +void ogg_buffer_posttruncate(ogg_reference *or,long pos){ + /* walk to the point where we want to begin truncate */ + while(or && pos>or->length){ + pos-=or->length; + or=or->next; + } + if(or){ + ogg_buffer_release(or->next); + or->next=0; + or->length=pos; + } +} + +int main(void){ + long i; + static unsigned long testbuffer1[]= + {18,12,103948,4325,543,76,432,52,3,65,4,56,32,42,34,21,1,23,32,546,456,7, + 567,56,8,8,55,3,52,342,341,4,265,7,67,86,2199,21,7,1,5,1,4}; + int test1size=43; + + static unsigned long testbuffer2[]= + {216531625L,1237861823,56732452,131,3212421,12325343,34547562,12313212, + 1233432,534,5,346435231,14436467,7869299,76326614,167548585, + 85525151,0,12321,1,349528352}; + int test2size=21; + + static unsigned long testbuffer3[]= + {1,0,14,0,1,0,12,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,0,0,1, + 0,1,30,1,1,1,0,0,1,0,0,0,12,0,11,0,1,0,0,1}; + int test3size=56; + + static unsigned long large[]= + {2136531625L,2137861823,56732452,131,3212421,12325343,34547562,12313212, + 1233432,534,5,2146435231,14436467,7869299,76326614,167548585, + 85525151,0,12321,1,2146528352}; + + int onesize=33; + static int one[33]={146,25,44,151,195,15,153,176,233,131,196,65,85,172,47,40, + 34,242,223,136,35,222,211,86,171,50,225,135,214,75,172, + 223,4}; + + int twosize=6; + static int two[6]={61,255,255,251,231,29}; + + int threesize=54; + static int three[54]={169,2,232,252,91,132,156,36,89,13,123,176,144,32,254, + 142,224,85,59,121,144,79,124,23,67,90,90,216,79,23,83, + 58,135,196,61,55,129,183,54,101,100,170,37,127,126,10, + 100,52,4,14,18,86,77,1}; + + int foursize=38; + static int four[38]={18,6,163,252,97,194,104,131,32,1,7,82,137,42,129,11,72, + 132,60,220,112,8,196,109,64,179,86,9,137,195,208,122,169, + 28,2,133,0,1}; + + int fivesize=45; + static int five[45]={169,2,126,139,144,172,30,4,80,72,240,59,130,218,73,62, + 241,24,210,44,4,20,0,248,116,49,135,100,110,130,181,169, + 84,75,159,2,1,0,132,192,8,0,0,18,22}; + + int sixsize=7; + static int six[7]={17,177,170,242,169,19,148}; + + /* Test read/write together */ + /* Later we test against pregenerated bitstreams */ + bs=ogg_buffer_create(); + + fprintf(stderr,"\nSmall preclipped packing (LSb): "); + cliptest(testbuffer1,test1size,0,one,onesize); + fprintf(stderr,"ok."); + + fprintf(stderr,"\nNull bit call (LSb): "); + cliptest(testbuffer3,test3size,0,two,twosize); + fprintf(stderr,"ok."); + + fprintf(stderr,"\nLarge preclipped packing (LSb): "); + cliptest(testbuffer2,test2size,0,three,threesize); + fprintf(stderr,"ok."); + + fprintf(stderr,"\n32 bit preclipped packing (LSb): "); + + or=ogg_buffer_alloc(bs,128); + for(i=0;ibuffer->data[i*4] = large[i]&0xff; + or->buffer->data[i*4+1] = (large[i]>>8)&0xff; + or->buffer->data[i*4+2] = (large[i]>>16)&0xff; + or->buffer->data[i*4+3] = (large[i]>>24)&0xff; + } + or->length=test2size*4; + oggpack_readinit(&r,or); + for(i=0;i>k)&0x1)<7){ + bit=0; + word++; + } + } + } + } + count2=(bitcount+7)>>3; + + /* construct random-length buffer chain from flat vector; random + byte starting offset within the length of the vector */ + { + ogg_reference *or=NULL,*orl=NULL; + long pos=0; + + /* build buffer chain */ + while(count2){ + int ilen=(rand()%32),k; + int ibegin=(rand()%32); + + + if(ilen>count2)ilen=count2; + + if(or) + orl=ogg_buffer_extend(orl,64); + else + or=orl=ogg_buffer_alloc(bs,64); + + orl->length=ilen; + orl->begin=ibegin; + + for(k=0;kbuffer->data[ibegin++]= flat[pos++]; + + count2-=ilen; + } + + if(ogg_buffer_length(or)!=(bitcount+7)/8){ + fprintf(stderr,"\nERROR: buffer length incorrect after build.\n"); + exit(1); + } + + + { + int begin=0; //=(rand()%TESTWORDS); + int ilen=(rand()%(TESTWORDS-begin)); + int bitoffset,bitcount=0; + unsigned long temp; + + for(j=0;j>(32-bitsLeftInWord) + ADDLE r12,r12,#32 @ r12= bitsLeftInWord += 32 + RSB r14,r14,#32 @ r14= 32-bitsLeftInWord + ORRLT r10,r10,r11,LSL r14 @ r10= Next 32 bits. + MOV r14,#1 + RSB r14,r14,r14,LSL r1 + AND r0,r10,r14 + LDMFD r13!,{r10,r11,PC} + +look_slow: + STMFD r13!,{r5,r6} + ADDS r10,r2,r1 @ r10= bitsLeftInSegment + bits (i.e. + @ the initial value of bitsLeftInSeg) + @ r10 = bitsLeftInSegment (initial) + @ r12 = bitsLeftInWord + RSB r14,r12,#32 @ r14= 32-bitsLeftInWord + MOV r5,r10 @ r5 = bitsLeftInSegment (initial) + BLT look_overrun + BEQ look_next_segment @ r10= r12 = 0, if we branch + CMP r12,r10 @ If bitsLeftInWord < bitsLeftInSeg + @ there must be more in the next word + LDR r10,[r3],#4 @ r10= ptr[0] + LDRLT r6,[r3] @ r6 = ptr[1] + MOV r11,#1 + MOV r10,r10,LSR r14 @ r10= first bitsLeftInWord bits + ORRLT r10,r10,r6,LSL r12 @ r10= first bitsLeftInSeg bits+crap + RSB r11,r11,r11,LSL r5 @ r11= mask + AND r10,r10,r11 @ r10= first r5 bits + @ Load the next segments data +look_next_segment: + @ At this point, r10 contains the first r5 bits of the result + LDR r11,[r0,#12] @ r11= head = b->head + @ Stall + @ Stall +look_next_segment_2: + LDR r11,[r11,#12] @ r11= head = head->next + @ Stall + @ Stall + CMP r11,#0 + BEQ look_out_of_data + LDMIA r11,{r6,r12,r14} @ r6 = buffer + @ r12= begin + @ r14= length + LDR r6,[r6] @ r6 = buffer->data + CMP r14,#0 + BEQ look_next_segment_2 + ADD r6,r6,r12 @ r6 = buffer->data+begin +look_slow_loop: + LDRB r12,[r6],#1 @ r12= *buffer + SUBS r14,r14,#1 @ r14= length + @ Stall + ORR r10,r10,r12,LSL r5 @ r10= first r5+8 bits + ADD r5,r5,#8 + BLE look_really_slow + CMP r5,r1 + BLT look_slow_loop + MOV r14,#1 + RSB r14,r14,r14,LSL r1 + AND r0,r10,r14 + LDMFD r13!,{r5,r6,r10,r11,PC} + + +look_really_slow: + CMP r5,r1 + BLT look_next_segment_2 + MOV r14,#1 + RSB r14,r14,r14,LSL r1 + AND r0,r10,r14 + LDMFD r13!,{r5,r6,r10,r11,PC} + +look_out_of_data: + MVN r0,#0 @ return -1 + LDMFD r13!,{r5,r6,r10,r11,PC} + +look_overrun: + @ We had overrun when we started, so we need to skip -r10 bits. + LDR r11,[r0,#12] @ r11 = head = b->head + @ stall + @ stall +look_overrun_next_segment: + LDR r11,[r11,#12] @ r11 = head->next + @ stall + @ stall + CMP r11,#0 + BEQ look_out_of_data + LDMIA r11,{r6,r7,r14} @ r6 = buffer + @ r7 = begin + @ r14= length + LDR r6,[r6] @ r6 = buffer->data + @ stall + @ stall + ADD r6,r6,r7 @ r6 = buffer->data+begin + MOV r14,r14,LSL #3 @ r14= length in bits + ADDS r14,r14,r10 @ r14= length in bits-bits to skip + MOVLE r10,r14 + BLE look_overrun_next_segment + RSB r10,r10,#0 @ r10= bits to skip + ADD r6,r10,r10,LSR #3 @ r6 = pointer to data + MOV r10,#0 + B look_slow_loop + +oggpack_adv: + @ r0 = oggpack_buffer *b + @ r1 = bits + LDMIA r0,{r2,r3,r12} + @ r2 = bitsLeftInSegment + @ r3 = ptr + @ r12= bitsLeftInWord + SUBS r2,r2,r1 @ Does this run us out of bits in the + BLE adv_slow @ segment? If so, do it slowly + SUBS r12,r12,r1 + ADDLE r12,r12,#32 + ADDLE r3,r3,#4 + STMIA r0,{r2,r3,r12} + MOV PC,R14 +adv_slow: + STMFD r13!,{r10,r14} + + LDR r14,[r0,#12] @ r14= head + @ stall +adv_slow_loop: + LDR r1,[r0,#20] @ r1 = count + LDR r10,[r14,#8] @ r10= head->length + LDR r14,[r14,#12] @ r14= head->next + @ stall + ADD r1,r1,r10 @ r1 = count += head->length + CMP r14,#0 + BEQ adv_end + STR r1,[r0,#20] @ b->count = count + STR r14,[r0,#12] @ b->head = head + LDMIA r14,{r3,r10,r12} @ r3 = buffer + @ r10= begin + @ r12= length + LDR r3,[r3] @ r3 = buffer->data + ADD r3,r3,r10 @ r3 = Pointer to start (byte) + AND r10,r3,#3 @ r10= bytes to backtrk to word align + MOV r10,r10,LSL #3 @ r10= bits to backtrk to word align + RSB r10,r10,#32 @ r10= bits left in word + ADDS r10,r10,r2 @ r10= bits left in word after skip + ADDLE r10,r10,#32 + ADDLE r3,r3,#4 + BIC r3,r3,#3 @ r3 = Pointer to start (word) + ADDS r2,r2,r12,LSL #3 @ r2 = length in bits after advance + BLE adv_slow_loop + STMIA r0,{r2,r3,r10} + + LDMFD r13!,{r10,PC} +adv_end: + STMIA r0,{r2,r3,r12} + + LDMFD r13!,{r10,PC} + +oggpack_readinit: + @ r0 = oggpack_buffer *b + @ r1 = oggreference *r + STR r1,[r0,#12] @ b->head = r1 + STR r1,[r0,#16] @ b->tail = r1 + LDMIA r1,{r2,r3,r12} @ r2 = b->head->buffer + @ r3 = b->head->begin + @ r12= b->head->length + LDR r2,[r2] @ r2 = b->head->buffer->data + MOV r1,r12,LSL #3 @ r1 = BitsInSegment + MOV r12,#0 + ADD r3,r2,r3 @ r3 = r2+b->head->begin + BIC r2,r3,#3 @ r2 = b->headptr (word) + AND r3,r3,#3 + MOV r3,r3,LSL #3 + RSB r3,r3,#32 @ r3 = BitsInWord + STMIA r0,{r1,r2,r3} + STR r12,[r0,#20] + MOV PC,R14 + +oggpack_read: + @ r0 = oggpack_buffer *b + @ r1 = int bits + STMFD r13!,{r10,r11,r14} + LDMIA r0,{r2,r3,r12} + @ r2 = bitsLeftInSegment + @ r3 = ptr + @ r12= bitsLeftInWord + SUBS r2,r2,r1 @ bitsLeftinSegment -= bits + BLT read_slow @ Not enough bits in this segment for + @ this request. Do it slowly. + LDR r10,[r3] @ r10= ptr[0] + RSB r14,r12,#32 @ r14= 32-bitsLeftInWord + SUBS r12,r12,r1 @ r12= bitsLeftInWord -= bits + ADDLE r3,r3,#4 + LDRLT r11,[r3] @ r11= ptr[1] + MOV r10,r10,LSR r14 @ r10= ptr[0]>>(32-bitsLeftInWord) + ADDLE r12,r12,#32 @ r12= bitsLeftInWord += 32 + RSB r14,r14,#32 @ r14= 32-bitsLeftInWord + ORRLT r10,r10,r11,LSL r14 @ r10= Next 32 bits. + STMIA r0,{r2,r3,r12} + MOV r14,#1 + RSB r14,r14,r14,LSL r1 + AND r0,r10,r14 + LDMFD r13!,{r10,r11,PC} + +read_slow: + STMFD r13!,{r5,r6} + ADDS r10,r2,r1 @ r10= bitsLeftInSegment + bits (i.e. + @ the initial value of bitsLeftInSeg) + @ r10 = bitsLeftInSegment (initial) + @ r12 = bitsLeftInWord + RSB r14,r12,#32 @ r14= 32-bitsLeftInWord + MOV r5,r10 @ r5 = bitsLeftInSegment (initial) + BLT read_overrun + BEQ read_next_segment @ r10= r12 = 0, if we branch + CMP r12,r10 @ If bitsLeftInWord < bitsLeftInSeg + @ there must be more in the next word + LDR r10,[r3],#4 @ r10= ptr[0] + LDRLT r6,[r3] @ r6 = ptr[1] + MOV r11,#1 + MOV r10,r10,LSR r14 @ r10= first bitsLeftInWord bits + ORRLT r10,r10,r6,LSL r12 @ r10= first bitsLeftInSeg bits+crap + RSB r11,r11,r11,LSL r5 @ r11= mask + AND r10,r10,r11 @ r10= first r5 bits + @ Load the next segments data +read_next_segment: + @ At this point, r10 contains the first r5 bits of the result + LDR r11,[r0,#12] @ r11= head = b->head + @ Stall +read_next_segment_2: + @ r11 = head + LDR r6,[r0,#20] @ r6 = count + LDR r12,[r11,#8] @ r12= length + LDR r11,[r11,#12] @ r11= head = head->next + @ Stall + ADD r6,r6,r12 @ count += length + CMP r11,#0 + BEQ read_out_of_data + STR r11,[r0,#12] + STR r6,[r0,#20] @ b->count = count + LDMIA r11,{r6,r12,r14} @ r6 = buffer + @ r12= begin + @ r14= length + LDR r6,[r6] @ r6 = buffer->data + CMP r14,#0 + BEQ read_next_segment_2 + ADD r6,r6,r12 @ r6 = buffer->data+begin +read_slow_loop: + LDRB r12,[r6],#1 @ r12= *buffer + SUBS r14,r14,#1 @ r14= length + @ Stall + ORR r10,r10,r12,LSL r5 @ r10= first r5+8 bits + ADD r5,r5,#8 + BLE read_really_slow + CMP r5,r1 + BLT read_slow_loop +read_end: + MOV r12,#1 + RSB r12,r12,r12,LSL r1 + + @ Store back the new position + @ r2 = -number of bits to go from this segment + @ r6 = ptr + @ r14= bytesLeftInSegment + @ r11= New head value + LDMIA r11,{r3,r6,r14} @ r3 = buffer + @ r6 = begin + @ r14= length + LDR r3,[r3] @ r3 = buffer->data + ADD r1,r2,r14,LSL #3 @ r1 = bitsLeftInSegment + @ stall + ADD r6,r3,r6 @ r6 = pointer + AND r3,r6,#3 @ r3 = bytes used in first word + RSB r3,r2,r3,LSL #3 @ r3 = bits used in first word + BIC r2,r6,#3 @ r2 = word ptr + RSBS r3,r3,#32 @ r3 = bitsLeftInWord + ADDLE r3,r3,#32 + ADDLE r2,r2,#4 + STMIA r0,{r1,r2,r3} + + AND r0,r10,r12 + LDMFD r13!,{r5,r6,r10,r11,PC} + + +read_really_slow: + CMP r5,r1 + BGE read_end + LDR r14,[r11,#8] @ r14= length of segment just done + @ stall + @ stall + ADD r2,r2,r14,LSL #3 @ r2 = -bits to use from next seg + B read_next_segment_2 + +read_out_of_data: + @ Store back the new position + @ r2 = -number of bits to go from this segment + @ r6 = ptr + @ r14= bytesLeftInSegment + @ RJW: This may be overkill - we leave the buffer empty, with -1 + @ bits left in it. We might get away with just storing the + @ bitsLeftInSegment as -1. + LDR r11,[r0,#12] @ r11=head + + LDMIA r11,{r3,r6,r14} @ r3 = buffer + @ r6 = begin + @ r14= length + LDR r3,[r3] @ r3 = buffer->data + ADD r6,r3,r6 @ r6 = pointer + ADD r6,r6,r14 + AND r3,r6,#3 @ r3 = bytes used in first word + MOV r3,r3,LSL #3 @ r3 = bits used in first word + BIC r2,r6,#3 @ r2 = word ptr + RSBS r3,r3,#32 @ r3 = bitsLeftInWord + MVN r1,#0 @ r1 = -1 = bitsLeftInSegment + STMIA r0,{r1,r2,r3} + MVN r0,#0 @ return -1 + LDMFD r13!,{r5,r6,r10,r11,PC} + +read_overrun: + @ We had overrun when we started, so we need to skip -r10 bits. + LDR r11,[r0,#12] @ r11 = head = b->head + @ stall + @ stall +read_overrun_next_segment: + LDR r11,[r11,#12] @ r11 = head->next + @ stall + @ stall + CMP r11,#0 + BEQ read_out_of_data + LDMIA r11,{r6,r7,r14} @ r6 = buffer + @ r7 = begin + @ r14= length + LDR r6,[r6] @ r6 = buffer->data + @ stall + @ stall + ADD r6,r6,r7 @ r6 = buffer->data+begin + MOV r14,r14,LSL #3 @ r14= length in bits + ADDS r14,r14,r10 @ r14= length in bits-bits to skip + MOVLE r10,r14 + BLE read_overrun_next_segment + RSB r10,r10,#0 @ r10= bits to skip + ADD r6,r10,r10,LSR #3 @ r6 = pointer to data + MOV r10,#0 + B read_slow_loop diff --git a/android/jni/tremolo/codebook.c b/android/jni/tremolo/codebook.c new file mode 100644 index 00000000..5f46594d --- /dev/null +++ b/android/jni/tremolo/codebook.c @@ -0,0 +1,874 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: basic codebook pack/unpack/code/decode operations + + ********************************************************************/ + +#include +#include +#include +#include +#include "ogg.h" +#include "ivorbiscodec.h" +#include "codebook.h" +#include "misc.h" +#include "os.h" + + +/**** pack/unpack helpers ******************************************/ +int _ilog(unsigned int v){ + int ret=0; + while(v){ + ret++; + v>>=1; + } + return(ret); +} + +static ogg_uint32_t decpack(long entry,long used_entry,long quantvals, + codebook *b,oggpack_buffer *opb,int maptype){ + ogg_uint32_t ret=0; + int j; + + switch(b->dec_type){ + + case 0: + return (ogg_uint32_t)entry; + + case 1: + if(maptype==1){ + /* vals are already read into temporary column vector here */ + for(j=0;jdim;j++){ + ogg_uint32_t off=entry%quantvals; + entry/=quantvals; + ret|=((ogg_uint16_t *)(b->q_val))[off]<<(b->q_bits*j); + } + }else{ + for(j=0;jdim;j++) + ret|=oggpack_read(opb,b->q_bits)<<(b->q_bits*j); + } + return ret; + + case 2: + for(j=0;jdim;j++){ + ogg_uint32_t off=entry%quantvals; + entry/=quantvals; + ret|=off<<(b->q_pack*j); + } + return ret; + + case 3: + return (ogg_uint32_t)used_entry; + + } + return 0; /* silence compiler */ +} + +/* 32 bit float (not IEEE; nonnormalized mantissa + + biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm + Why not IEEE? It's just not that important here. */ + +static ogg_int32_t _float32_unpack(long val,int *point){ + long mant=val&0x1fffff; + int sign=val&0x80000000; + + *point=((val&0x7fe00000L)>>21)-788; + + if(mant){ + while(!(mant&0x40000000)){ + mant<<=1; + *point-=1; + } + if(sign)mant= -mant; + }else{ + *point=-9999; + } + return mant; +} + +/* choose the smallest supported node size that fits our decode table. + Legal bytewidths are 1/1 1/2 2/2 2/4 4/4 */ +static int _determine_node_bytes(long used, int leafwidth){ + + /* special case small books to size 4 to avoid multiple special + cases in repack */ + if(used<2) + return 4; + + if(leafwidth==3)leafwidth=4; + if(_ilog(3*used-6)+1 <= leafwidth*4) + return leafwidth/2?leafwidth/2:1; + return leafwidth; +} + +/* convenience/clarity; leaves are specified as multiple of node word + size (1 or 2) */ +static int _determine_leaf_words(int nodeb, int leafwidth){ + if(leafwidth>nodeb)return 2; + return 1; +} + +/* given a list of word lengths, number of used entries, and byte + width of a leaf, generate the decode table */ +static int _make_words(char *l,long n,ogg_uint32_t *r,long quantvals, + codebook *b, oggpack_buffer *opb,int maptype){ + long i,j,count=0; + long top=0; + ogg_uint32_t marker[33]; + + if (n<1) + return 1; + + if(n<2){ + r[0]=0x80000000; + }else{ + memset(marker,0,sizeof(marker)); + + for(i=0;i>(length-j-1))&1; + if(chase>=top){ + if (chase < 0 || chase >= n) return 1; + top++; + r[chase*2]=top; + r[chase*2+1]=0; + }else + if (chase < 0 || chase >= n || chase*2+bit > n*2+1) return 1; + if(!r[chase*2+bit]) + r[chase*2+bit]=top; + chase=r[chase*2+bit]; + if (chase < 0 || chase >= n) return 1; + } + { + int bit=(entry>>(length-j-1))&1; + if(chase>=top){ + top++; + r[chase*2+1]=0; + } + r[chase*2+bit]= decpack(i,count++,quantvals,b,opb,maptype) | + 0x80000000; + } + + /* Look to see if the next shorter marker points to the node + above. if so, update it and repeat. */ + for(j=length;j>0;j--){ + if(marker[j]&1){ + marker[j]=marker[j-1]<<1; + break; + } + marker[j]++; + } + + /* prune the tree; the implicit invariant says all the longer + markers were dangling from our just-taken node. Dangle them + from our *new* node. */ + for(j=length+1;j<33;j++) + if((marker[j]>>1) == entry){ + entry=marker[j]; + marker[j]=marker[j-1]<<1; + }else + break; + } + } + } + + return 0; +} + +static int _make_decode_table(codebook *s,char *lengthlist,long quantvals, + oggpack_buffer *opb,int maptype){ + int i; + ogg_uint32_t *work; + + if (!lengthlist) return 1; + if(s->dec_nodeb==4){ + /* Over-allocate by using s->entries instead of used_entries. + * This means that we can use s->entries to enforce size in + * _make_words without messing up length list looping. + * This probably wastes a bit of space, but it shouldn't + * impact behavior or size too much. + */ + s->dec_table=_ogg_malloc((s->entries*2+1)*sizeof(*work)); + if (!s->dec_table) return 1; + /* +1 (rather than -2) is to accommodate 0 and 1 sized books, + which are specialcased to nodeb==4 */ + if(_make_words(lengthlist,s->entries, + s->dec_table,quantvals,s,opb,maptype))return 1; + + return 0; + } + + if (s->used_entries > INT_MAX/2 || + s->used_entries*2 > INT_MAX/((long) sizeof(*work)) - 1) return 1; + /* Overallocate as above */ + work=alloca((s->entries*2+1)*sizeof(*work)); + if(_make_words(lengthlist,s->entries,work,quantvals,s,opb,maptype))return 1; + if (s->used_entries > INT_MAX/(s->dec_leafw+1)) return 1; + if (s->dec_nodeb && s->used_entries * (s->dec_leafw+1) > INT_MAX/s->dec_nodeb) return 1; + s->dec_table=_ogg_malloc((s->used_entries*(s->dec_leafw+1)-2)* + s->dec_nodeb); + if (!s->dec_table) return 1; + + if(s->dec_leafw==1){ + switch(s->dec_nodeb){ + case 1: + for(i=0;iused_entries*2-2;i++) + ((unsigned char *)s->dec_table)[i]=(unsigned char) + (((work[i] & 0x80000000UL) >> 24) | work[i]); + break; + case 2: + for(i=0;iused_entries*2-2;i++) + ((ogg_uint16_t *)s->dec_table)[i]=(ogg_uint16_t) + (((work[i] & 0x80000000UL) >> 16) | work[i]); + break; + } + + }else{ + /* more complex; we have to do a two-pass repack that updates the + node indexing. */ + long top=s->used_entries*3-2; + if(s->dec_nodeb==1){ + unsigned char *out=(unsigned char *)s->dec_table; + + for(i=s->used_entries*2-4;i>=0;i-=2){ + if(work[i]&0x80000000UL){ + if(work[i+1]&0x80000000UL){ + top-=4; + out[top]=(work[i]>>8 & 0x7f)|0x80; + out[top+1]=(work[i+1]>>8 & 0x7f)|0x80; + out[top+2]=work[i] & 0xff; + out[top+3]=work[i+1] & 0xff; + }else{ + top-=3; + out[top]=(work[i]>>8 & 0x7f)|0x80; + out[top+1]=work[work[i+1]*2]; + out[top+2]=work[i] & 0xff; + } + }else{ + if(work[i+1]&0x80000000UL){ + top-=3; + out[top]=work[work[i]*2]; + out[top+1]=(work[i+1]>>8 & 0x7f)|0x80; + out[top+2]=work[i+1] & 0xff; + }else{ + top-=2; + out[top]=work[work[i]*2]; + out[top+1]=work[work[i+1]*2]; + } + } + work[i]=top; + } + }else{ + ogg_uint16_t *out=(ogg_uint16_t *)s->dec_table; + for(i=s->used_entries*2-4;i>=0;i-=2){ + if(work[i]&0x80000000UL){ + if(work[i+1]&0x80000000UL){ + top-=4; + out[top]=(work[i]>>16 & 0x7fff)|0x8000; + out[top+1]=(work[i+1]>>16 & 0x7fff)|0x8000; + out[top+2]=work[i] & 0xffff; + out[top+3]=work[i+1] & 0xffff; + }else{ + top-=3; + out[top]=(work[i]>>16 & 0x7fff)|0x8000; + out[top+1]=work[work[i+1]*2]; + out[top+2]=work[i] & 0xffff; + } + }else{ + if(work[i+1]&0x80000000UL){ + top-=3; + out[top]=work[work[i]*2]; + out[top+1]=(work[i+1]>>16 & 0x7fff)|0x8000; + out[top+2]=work[i+1] & 0xffff; + }else{ + top-=2; + out[top]=work[work[i]*2]; + out[top+1]=work[work[i+1]*2]; + } + } + work[i]=top; + } + } + } + + return 0; +} + +/* most of the time, entries%dimensions == 0, but we need to be + well defined. We define that the possible vales at each + scalar is values == entries/dim. If entries%dim != 0, we'll + have 'too few' values (values*dimentries); + int vals=b->entries>>((bits-1)*(b->dim-1)/b->dim); + + while(1){ + long acc=1; + long acc1=1; + int i; + for(i=0;idim;i++){ + acc*=vals; + acc1*=vals+1; + } + if(acc<=b->entries && acc1>b->entries){ + return(vals); + }else{ + if(acc>b->entries){ + vals--; + }else{ + vals++; + } + } + } +} + +void vorbis_book_clear(codebook *b){ + /* static book is not cleared; we're likely called on the lookup and + the static codebook belongs to the info struct */ + if(b->q_val)_ogg_free(b->q_val); + if(b->dec_table)_ogg_free(b->dec_table); + if(b->dec_buf)_ogg_free(b->dec_buf); + + memset(b,0,sizeof(*b)); +} + +int vorbis_book_unpack(oggpack_buffer *opb,codebook *s){ + char *lengthlist=NULL; + int quantvals=0; + long i,j; + int maptype; + + memset(s,0,sizeof(*s)); + + /* make sure alignment is correct */ + if(oggpack_read(opb,24)!=0x564342)goto _eofout; + + /* first the basic parameters */ + s->dim=oggpack_read(opb,16); + s->dec_buf=_ogg_malloc(sizeof(ogg_int32_t)*s->dim); + if (s->dec_buf == NULL) + goto _errout; + s->entries=oggpack_read(opb,24); + if(s->entries<=0)goto _eofout; + if(s->dim<=0)goto _eofout; + if(_ilog(s->dim)+_ilog(s->entries)>24)goto _eofout; + if (s->dim > INT_MAX/s->entries) goto _eofout; + + /* codeword ordering.... length ordered or unordered? */ + switch((int)oggpack_read(opb,1)){ + case 0: + /* unordered */ + lengthlist=(char *)alloca(sizeof(*lengthlist)*s->entries); + if(!lengthlist) goto _eofout; + + /* allocated but unused entries? */ + if(oggpack_read(opb,1)){ + /* yes, unused entries */ + + for(i=0;ientries;i++){ + if(oggpack_read(opb,1)){ + long num=oggpack_read(opb,5); + if(num==-1)goto _eofout; + lengthlist[i]=(char)(num+1); + s->used_entries++; + if(num+1>s->dec_maxlength)s->dec_maxlength=num+1; + }else + lengthlist[i]=0; + } + }else{ + /* all entries used; no tagging */ + s->used_entries=s->entries; + for(i=0;ientries;i++){ + long num=oggpack_read(opb,5); + if(num==-1)goto _eofout; + lengthlist[i]=(char)(num+1); + if(num+1>s->dec_maxlength)s->dec_maxlength=num+1; + } + } + + break; + case 1: + /* ordered */ + { + long length=oggpack_read(opb,5)+1; + + s->used_entries=s->entries; + lengthlist=(char *)alloca(sizeof(*lengthlist)*s->entries); + if (!lengthlist) goto _eofout; + + for(i=0;ientries;){ + long num=oggpack_read(opb,_ilog(s->entries-i)); + if(num<0)goto _eofout; + for(j=0;jentries;j++,i++) + lengthlist[i]=(char)length; + s->dec_maxlength=length; + length++; + } + } + break; + default: + /* EOF */ + goto _eofout; + } + + + /* Do we have a mapping to unpack? */ + + if((maptype=oggpack_read(opb,4))>0){ + s->q_min=_float32_unpack(oggpack_read(opb,32),&s->q_minp); + s->q_del=_float32_unpack(oggpack_read(opb,32),&s->q_delp); + s->q_bits=oggpack_read(opb,4)+1; + s->q_seq=oggpack_read(opb,1); + + s->q_del>>=s->q_bits; + s->q_delp+=s->q_bits; + } + + switch(maptype){ + case 0: + + /* no mapping; decode type 0 */ + + /* how many bytes for the indexing? */ + /* this is the correct boundary here; we lose one bit to + node/leaf mark */ + s->dec_nodeb=_determine_node_bytes(s->used_entries,_ilog(s->entries)/8+1); + s->dec_leafw=_determine_leaf_words(s->dec_nodeb,_ilog(s->entries)/8+1); + s->dec_type=0; + + if(_make_decode_table(s,lengthlist,quantvals,opb,maptype)) goto _errout; + break; + + case 1: + + /* mapping type 1; implicit values by lattice position */ + quantvals=_book_maptype1_quantvals(s); + + /* dec_type choices here are 1,2; 3 doesn't make sense */ + { + /* packed values */ + long total1=(s->q_bits*s->dim+8)/8; /* remember flag bit */ + if (s->dim > (INT_MAX-8)/s->q_bits) goto _eofout; + /* vector of column offsets; remember flag bit */ + long total2=(_ilog(quantvals-1)*s->dim+8)/8+(s->q_bits+7)/8; + + + if(total1<=4 && total1<=total2){ + /* use dec_type 1: vector of packed values */ + + /* need quantized values before */ + s->q_val=alloca(sizeof(ogg_uint16_t)*quantvals); + if (!s->q_val) goto _eofout; + for(i=0;iq_val)[i]=(ogg_uint16_t)oggpack_read(opb,s->q_bits); + + if(oggpack_eop(opb)){ + s->q_val=0; /* cleanup must not free alloca memory */ + goto _eofout; + } + + s->dec_type=1; + s->dec_nodeb=_determine_node_bytes(s->used_entries, + (s->q_bits*s->dim+8)/8); + s->dec_leafw=_determine_leaf_words(s->dec_nodeb, + (s->q_bits*s->dim+8)/8); + if(_make_decode_table(s,lengthlist,quantvals,opb,maptype)){ + s->q_val=0; /* cleanup must not free alloca memory */ + goto _errout; + } + + s->q_val=0; /* about to go out of scope; _make_decode_table + was using it */ + + }else{ + /* use dec_type 2: packed vector of column offsets */ + + /* need quantized values before */ + if(s->q_bits<=8){ + s->q_val=_ogg_malloc(quantvals); + if (!s->q_val) goto _eofout; + for(i=0;iq_val)[i]=(unsigned char)oggpack_read(opb,s->q_bits); + }else{ + s->q_val=_ogg_malloc(quantvals*2); + if (!s->q_val) goto _eofout; + for(i=0;iq_val)[i]=(ogg_uint16_t)oggpack_read(opb,s->q_bits); + } + + if(oggpack_eop(opb))goto _eofout; + + s->q_pack=_ilog(quantvals-1); + s->dec_type=2; + s->dec_nodeb=_determine_node_bytes(s->used_entries, + (_ilog(quantvals-1)*s->dim+8)/8); + s->dec_leafw=_determine_leaf_words(s->dec_nodeb, + (_ilog(quantvals-1)*s->dim+8)/8); + if(_make_decode_table(s,lengthlist,quantvals,opb,maptype))goto _errout; + + } + } + break; + case 2: + + /* mapping type 2; explicit array of values */ + quantvals=s->entries*s->dim; + /* dec_type choices here are 1,3; 2 is not possible */ + + if( (s->q_bits*s->dim+8)/8 <=4){ /* remember flag bit */ + /* use dec_type 1: vector of packed values */ + + s->dec_type=1; + s->dec_nodeb=_determine_node_bytes(s->used_entries,(s->q_bits*s->dim+8)/8); + s->dec_leafw=_determine_leaf_words(s->dec_nodeb,(s->q_bits*s->dim+8)/8); + if(_make_decode_table(s,lengthlist,quantvals,opb,maptype))goto _errout; + + }else{ + /* use dec_type 3: scalar offset into packed value array */ + + s->dec_type=3; + s->dec_nodeb=_determine_node_bytes(s->used_entries,_ilog(s->used_entries-1)/8+1); + s->dec_leafw=_determine_leaf_words(s->dec_nodeb,_ilog(s->used_entries-1)/8+1); + if(_make_decode_table(s,lengthlist,quantvals,opb,maptype))goto _errout; + + /* get the vals & pack them */ + s->q_pack=(s->q_bits+7)/8*s->dim; + s->q_val=_ogg_malloc(s->q_pack*s->used_entries); + + if(s->q_bits<=8){ + for(i=0;iused_entries*s->dim;i++) + ((unsigned char *)(s->q_val))[i]=(unsigned char)oggpack_read(opb,s->q_bits); + }else{ + for(i=0;iused_entries*s->dim;i++) + ((ogg_uint16_t *)(s->q_val))[i]=(ogg_uint16_t)oggpack_read(opb,s->q_bits); + } + } + break; + default: + goto _errout; + } + + if (s->dec_nodeb==1) + if (s->dec_leafw == 1) + s->dec_method = 0; + else + s->dec_method = 1; + else if (s->dec_nodeb==2) + if (s->dec_leafw == 1) + s->dec_method = 2; + else + s->dec_method = 3; + else + s->dec_method = 4; + + if(oggpack_eop(opb))goto _eofout; + + return 0; + _errout: + _eofout: + vorbis_book_clear(s); + return -1; +} + +#ifndef ONLY_C +ogg_uint32_t decode_packed_entry_number(codebook *book, + oggpack_buffer *b); +#else +static inline ogg_uint32_t decode_packed_entry_number(codebook *book, + oggpack_buffer *b){ + ogg_uint32_t chase=0; + int read=book->dec_maxlength; + long lok = oggpack_look(b,read),i; + + while(lok<0 && read>1) + lok = oggpack_look(b, --read); + + if(lok<0){ + oggpack_adv(b,1); /* force eop */ + return -1; + } + + /* chase the tree with the bits we got */ + switch (book->dec_method) + { + case 0: + { + /* book->dec_nodeb==1, book->dec_leafw==1 */ + /* 8/8 - Used */ + unsigned char *t=(unsigned char *)book->dec_table; + + for(i=0;i>i)&1)]; + if(chase&0x80UL)break; + } + chase&=0x7fUL; + break; + } + case 1: + { + /* book->dec_nodeb==1, book->dec_leafw!=1 */ + /* 8/16 - Used by infile2 */ + unsigned char *t=(unsigned char *)book->dec_table; + for(i=0;i>i)&1; + int next=t[chase+bit]; + if(next&0x80){ + chase= (next<<8) | t[chase+bit+1+(!bit || t[chase]&0x80)]; + break; + } + chase=next; + } + //chase&=0x7fffUL; + chase&=~0x8000UL; + break; + } + case 2: + { + /* book->dec_nodeb==2, book->dec_leafw==1 */ + /* 16/16 - Used */ + for(i=0;idec_table))[chase*2+((lok>>i)&1)]; + if(chase&0x8000UL)break; + } + //chase&=0x7fffUL; + chase&=~0x8000UL; + break; + } + case 3: + { + /* book->dec_nodeb==2, book->dec_leafw!=1 */ + /* 16/32 - Used by infile2 */ + ogg_uint16_t *t=(ogg_uint16_t *)book->dec_table; + for(i=0;i>i)&1; + int next=t[chase+bit]; + if(next&0x8000){ + chase= (next<<16) | t[chase+bit+1+(!bit || t[chase]&0x8000)]; + break; + } + chase=next; + } + //chase&=0x7fffffffUL; + chase&=~0x80000000UL; + break; + } + case 4: + { + Output("32/32"); + for(i=0;idec_table))[chase*2+((lok>>i)&1)]; + if(chase&0x80000000UL)break; + } + //chase&=0x7fffffffUL; + chase&=~0x80000000UL; + break; + } + } + + if(idec_type)return -1; + return decode_packed_entry_number(book,b); +} + +#ifndef ONLY_C +int decode_map(codebook *s, oggpack_buffer *b, ogg_int32_t *v, int point); +#else +static int decode_map(codebook *s, oggpack_buffer *b, ogg_int32_t *v, int point){ + ogg_uint32_t entry = decode_packed_entry_number(s,b); + int i; + if(oggpack_eop(b))return(-1); + + /* 1 used by test file 0 */ + + /* according to decode type */ + switch(s->dec_type){ + case 1:{ + /* packed vector of values */ + int mask=(1<q_bits)-1; + for(i=0;idim;i++){ + v[i]=entry&mask; + entry>>=s->q_bits; + } + break; + } + case 2:{ + /* packed vector of column offsets */ + int mask=(1<q_pack)-1; + for(i=0;idim;i++){ + if(s->q_bits<=8) + v[i]=((unsigned char *)(s->q_val))[entry&mask]; + else + v[i]=((ogg_uint16_t *)(s->q_val))[entry&mask]; + entry>>=s->q_pack; + } + break; + } + case 3:{ + /* offset into array */ + void *ptr=s->q_val+entry*s->q_pack; + + if(s->q_bits<=8){ + for(i=0;idim;i++) + v[i]=((unsigned char *)ptr)[i]; + }else{ + for(i=0;idim;i++) + v[i]=((ogg_uint16_t *)ptr)[i]; + } + break; + } + default: + return -1; + } + + /* we have the unpacked multiplicands; compute final vals */ + { + int shiftM = point-s->q_delp; + ogg_int32_t add = point-s->q_minp; + int mul = s->q_del; + + if(add>0) + add= s->q_min >> add; + else + add= s->q_min << -add; + if (shiftM<0) + { + mul <<= -shiftM; + shiftM = 0; + } + add <<= shiftM; + + for(i=0;idim;i++) + v[i]= ((add + v[i] * mul) >> shiftM); + + if(s->q_seq) + for(i=1;idim;i++) + v[i]+=v[i-1]; + } + + return 0; +} +#endif + +/* returns 0 on OK or -1 on eof *************************************/ +long vorbis_book_decodevs_add(codebook *book,ogg_int32_t *a, + oggpack_buffer *b,int n,int point){ + if(book->used_entries>0){ + int step=n/book->dim; + ogg_int32_t *v = book->dec_buf;//(ogg_int32_t *)alloca(sizeof(*v)*book->dim); + int i,j,o; + if (!v) return -1; + + for (j=0;jdim;i++,o+=step) + a[o]+=v[i]; + } + } + return 0; +} + +long vorbis_book_decodev_add(codebook *book,ogg_int32_t *a, + oggpack_buffer *b,int n,int point){ + if(book->used_entries>0){ + ogg_int32_t *v = book->dec_buf;//(ogg_int32_t *)alloca(sizeof(*v)*book->dim); + int i,j; + + if (!v) return -1; + for(i=0;idim;j++) + a[i++]+=v[j]; + } + } + return 0; +} + +long vorbis_book_decodev_set(codebook *book,ogg_int32_t *a, + oggpack_buffer *b,int n,int point){ + if(book->used_entries>0){ + ogg_int32_t *v = book->dec_buf;//(ogg_int32_t *)alloca(sizeof(*v)*book->dim); + int i,j; + + if (!v) return -1; + for(i=0;idim;j++) + a[i++]=v[j]; + } + }else{ + int i,j; + + for(i=0;idim;j++) + a[i++]=0; + } + } + + return 0; +} + +#ifndef ONLY_C +long vorbis_book_decodevv_add(codebook *book,ogg_int32_t **a, + long offset,int ch, + oggpack_buffer *b,int n,int point); +#else +long vorbis_book_decodevv_add(codebook *book,ogg_int32_t **a, + long offset,int ch, + oggpack_buffer *b,int n,int point){ + if(book->used_entries>0){ + + ogg_int32_t *v = book->dec_buf;//(ogg_int32_t *)alloca(sizeof(*v)*book->dim); + long i,j; + int chptr=0; + + if (!v) return -1; + for(i=offset;idim;j++){ + a[chptr++][i]+=v[j]; + if(chptr==ch){ + chptr=0; + i++; + } + } + } + } + + return 0; +} +#endif diff --git a/android/jni/tremolo/codebook.h b/android/jni/tremolo/codebook.h new file mode 100644 index 00000000..5a58bb28 --- /dev/null +++ b/android/jni/tremolo/codebook.h @@ -0,0 +1,69 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: basic shared codebook operations + + ********************************************************************/ + +#ifndef _V_CODEBOOK_H_ +#define _V_CODEBOOK_H_ + +#include "ogg.h" + +typedef struct codebook{ + /* Top 15 used in ARM code */ + int dec_maxlength; + void *dec_table; + int dec_method; + int dec_type; /* 0 = entry number + 1 = packed vector of values + 2 = packed vector of column offsets, maptype 1 + 3 = scalar offset into value array, maptype 2 */ + int q_bits; + long dim; /* codebook dimensions (elements per vector) */ + int q_delp; + int q_minp; + ogg_int32_t q_del; + ogg_int32_t q_min; + int q_seq; + int q_pack; + void *q_val; + long used_entries; /* populated codebook entries */ + ogg_int32_t *dec_buf; + + /* C only */ + int dec_nodeb; + int dec_leafw; + + long entries; /* codebook entries */ + +} codebook; + +extern void vorbis_book_clear(codebook *b); +extern int vorbis_book_unpack(oggpack_buffer *b,codebook *c); + +extern long vorbis_book_decode(codebook *book, oggpack_buffer *b); +extern long vorbis_book_decodevs_add(codebook *book, ogg_int32_t *a, + oggpack_buffer *b,int n,int point); +extern long vorbis_book_decodev_set(codebook *book, ogg_int32_t *a, + oggpack_buffer *b,int n,int point); +extern long vorbis_book_decodev_add(codebook *book, ogg_int32_t *a, + oggpack_buffer *b,int n,int point); +extern long vorbis_book_decodevv_add(codebook *book, ogg_int32_t **a, + long off,int ch, + oggpack_buffer *b,int n,int point); + +extern int _ilog(unsigned int v); + + +#endif diff --git a/android/jni/tremolo/codec_internal.h b/android/jni/tremolo/codec_internal.h new file mode 100644 index 00000000..5dd05998 --- /dev/null +++ b/android/jni/tremolo/codec_internal.h @@ -0,0 +1,213 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: libvorbis codec headers + + ********************************************************************/ + +#ifndef _V_CODECI_H_ +#define _V_CODECI_H_ + +#define CHUNKSIZE 1024 + +#include "codebook.h" +#include "ivorbiscodec.h" + +#define VI_TRANSFORMB 1 +#define VI_WINDOWB 1 +#define VI_TIMEB 1 +#define VI_FLOORB 2 +#define VI_RESB 3 +#define VI_MAPB 1 + +typedef void vorbis_info_floor; + +/* vorbis_dsp_state buffers the current vorbis audio + analysis/synthesis state. The DSP state belongs to a specific + logical bitstream ****************************************************/ +struct vorbis_dsp_state{ + vorbis_info *vi; + oggpack_buffer opb; + + ogg_int32_t **work; + ogg_int32_t **mdctright; + int out_begin; + int out_end; + + long lW; + long W; + + ogg_int64_t granulepos; + ogg_int64_t sequence; + ogg_int64_t sample_count; + +}; + + +/* Floor backend generic *****************************************/ + +extern vorbis_info_floor *floor0_info_unpack(vorbis_info *,oggpack_buffer *); +extern void floor0_free_info(vorbis_info_floor *); +extern int floor0_memosize(vorbis_info_floor *); +extern ogg_int32_t *floor0_inverse1(struct vorbis_dsp_state *, + vorbis_info_floor *,ogg_int32_t *); +extern int floor0_inverse2 (struct vorbis_dsp_state *,vorbis_info_floor *, + ogg_int32_t *buffer,ogg_int32_t *); + +extern vorbis_info_floor *floor1_info_unpack(vorbis_info *,oggpack_buffer *); +extern void floor1_free_info(vorbis_info_floor *); +extern int floor1_memosize(vorbis_info_floor *); +extern ogg_int32_t *floor1_inverse1(struct vorbis_dsp_state *, + vorbis_info_floor *,ogg_int32_t *); +extern int floor1_inverse2 (struct vorbis_dsp_state *,vorbis_info_floor *, + ogg_int32_t *buffer,ogg_int32_t *); + +typedef struct{ + int order; + long rate; + long barkmap; + + int ampbits; + int ampdB; + + int numbooks; /* <= 16 */ + char books[16]; + +} vorbis_info_floor0; + +typedef struct{ + char class_dim; /* 1 to 8 */ + char class_subs; /* 0,1,2,3 (bits: 1<max_length + @ r6 = book->dec_table + @ r7 = book->dec_method + MOV r5,r1 @ r5 = b + + MOV r0,r5 @ r0 = b + MOV r1,r4 @ r1 = read + BL oggpack_look +dpen_read_return: + CMP r0,#0 + BLT dpen_readfailed + + @ r0 = lok + @ r4 = read + @ r5 = b + @ r6 = dec_table + @ r7 = dec_method + + CMP r7, #3 + BGT meth4 + BEQ meth3 + CMP r7, #1 + BGT meth2 + BEQ meth1 +meth0: + RSB r1, r4, #0 @ r1 = i-read = 0-read + MOV r7, #0 @ r7 = chase +m0_loop: + MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit + ADC r2, r6, r7, LSL #1 @ r8 = &t[chase*2+C] + LDRB r7, [r2] + ADDS r1, r1, #1 @ r1 = i-read++ (i-read<0 => i= 0) === (i >= read) + MVNGT r7, #0 @ if (i >= read) value to return = -1 + ADD r1, r1, r4 @ r1 = i-read+read+1 = i +1 + MOV r0, r5 @ r0 = b + BL oggpack_adv @ oggpack_adv(b, i+1); + MOV r0, r7 @ return chase + LDMFD r13!,{r4-r8,r10,PC} + +meth1: + @ r0 = lok + @ r4 = read + @ r5 = b + @ r6 = dec_table + RSB r1, r4, #0 @ r1 = i = -read + MOV r10,#0 @ r10= next = 0 +m1_loop: + MOV r7, r10 @ r7 = chase=next + MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit + ADC r8, r6, r7 @ r8 = t+chase+bit + LDRB r10,[r8], -r6 @ r10= next=t[chase+bit] r8=chase+bit + ADDS r1, r1, #1 @ r1 = i++ + @ stall Xscale + CMPLT r10,#0x80 @ if (next & 0x80) == 0 + BLT m1_loop + + ADD r1, r1, r4 @ r1 = i+read + MOV r0, r5 @ r0 = b + BL oggpack_adv @ oggpack_adv(b, i) + + CMP r10,#0x80 + BLT duff + + CMP r8, r7 @ if bit==0 (chase+bit==chase) (sets C) + LDRNEB r14,[r6, r7] @ r14= t[chase] + MOVEQ r14,#128 + ADC r12,r8, r6 @ r12= chase+bit+1+t + LDRB r14,[r12,r14,LSR #7] @ r14= t[chase+bit+1+(!bit || t[chase]&0x80)] + BIC r10,r10,#0x80 @ r3 = next &= ~0x80 + @ stall Xscale + ORR r0, r14,r10,LSL #8 @ r7 = chase = (next<<8) | r14 + + LDMFD r13!,{r4-r8,r10,PC} + + +meth2: + RSB r1, r4, #0 @ r1 = i-read = 0-read + MOV r7, #0 @ r7 = chase + MOV r6, r6, LSR #1 +m2_loop: + MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit + ADC r2, r6, r7, LSL #1 @ r8 = &t[chase*2+C] + LDRH r7, [r2, r2] + ADDS r1, r1, #1 @ r1 = i-read++ (i-read<0 => i= 0) === (i >= read) + MVNGT r7, #0 @ if (i >= read) value to return = -1 + ADD r1, r1, r4 @ r1 = i-read+read+1 = i +1 + MOV r0, r5 @ r0 = b + BL oggpack_adv @ oggpack_adv(b, i+1); + MOV r0, r7 @ return chase + LDMFD r13!,{r4-r8,r10,PC} + +meth3: + @ r0 = lok + @ r4 = read + @ r5 = b + @ r6 = dec_table + RSB r1, r4, #0 @ r1 = i = -read + MOV r10,#0 @ r10= next = 0 +m3_loop: + MOV r7, r10 @ r7 = chase=next + MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit + ADC r8, r7, #0 @ r8 = chase+bit + MOV r8, r8, LSL #1 @ r8 = (chase+bit)<<1 + LDRH r10,[r6, r8] @ r10= next=t[chase+bit] + ADDS r1, r1, #1 @ r1 = i++ + @ stall Xscale + CMPLT r10,#0x8000 @ if (next & 0x8000) == 0 + BLT m3_loop + + ADD r1, r1, r4 @ r1 = i+read + MOV r0, r5 @ r0 = b + BL oggpack_adv @ oggpack_adv(b, i) + + CMP r10,#0x8000 + BLT duff + + MOV r7, r7, LSL #1 + CMP r8, r7 @ if bit==0 (chase+bit==chase) sets C + LDRNEH r14,[r6, r7] @ r14= t[chase] + MOVEQ r14,#0x8000 + ADC r12,r8, r14,LSR #15 @ r12= 1+((chase+bit)<<1)+(!bit || t[chase]&0x8000) + ADC r12,r12,r14,LSR #15 @ r12= t + (1+chase+bit+(!bit || t[chase]&0x8000))<<1 + LDRH r14,[r6, r12] @ r14= t[chase+bit+1 + BIC r10,r10,#0x8000 @ r3 = next &= ~0x8000 + @ stall Xscale + ORR r0, r14,r10,LSL #16 @ r7 = chase = (next<<16) | r14 + + LDMFD r13!,{r4-r8,r10,PC} + +meth4: + RSB r1, r4, #0 @ r1 = i-read = 0-read + MOV r7, #0 @ r7 = chase +m4_loop: + MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit + ADC r2, r7, r7 @ r8 = chase*2+C + LDR r7, [r6, r2, LSL#2] + ADDS r1, r1, #1 @ r1 = i-read++ (i-read<0 => i= 0) === (i >= read) + MVNGT r7, #0 @ if (i >= read) value to return = -1 + ADD r1, r1, r4 @ r1 = i-read+read+1 = i +1 + MOV r0, r5 @ r0 = b + BL oggpack_adv @ oggpack_adv(b, i+1); + MOV r0, r7 @ return chase + LDMFD r13!,{r4-r8,r10,PC} + +decode_map: + @ r0 = codebook *s + @ r1 = oggpack_buffer *b + @ r2 = int v + @ r3 = int point + STMFD r13!,{r4-r11,r14} + + MOV r4, r0 @ r4 = s + MOV r5, r1 @ r5 = b + MOV r6, r2 @ r6 = v + MOV r7, r3 @ r7 = point + BL decode_packed_entry_number + MOV r8, r0 + + MOV r0, r5 + BL oggpack_eop + CMP r0, #0 + BNE dm_duff + + @ r4 = s + @ r5 = b + @ r6 = v + @ r7 = point + @ r8 = entry + + LDR r1, [r4,#12] @ r1 = s->dec_type + LDR r2, [r4,#16] @ r2 = s->q_bits + LDR r3, [r4,#20] @ r3 = s->dim + LDR r5, [r4,#24] @ r5 = s->q_delp + LDR r11,[r4,#28] @ r11= s->q_minp + LDR r12,[r4,#32] @ r12= s->q_del = mul + LDR r14,[r4,#36] @ r14= s->q_min + SUBS r11,r7, r11 @ r11= add = point - s->q_minp + + MOVGT r14,r14,ASR r11 @ r14= add = s->q_min >> add (if add >0) + RSBLT r11,r11,#0 + MOVLT r14,r14,LSL r11 @ r14= add = s->q_min << -add (if add < 0) + + SUBS r5, r7, r5 @ r5 = shiftM = point - s->q_delp + LDR r7, [r4,#40] @ r7 = s->q_seq + RSBLT r5, r5, #0 @ if (shiftM<0) r5 =-shiftM + MOVLT r12,r12,LSL r5 @ r12=mul<<-shiftM + MOVLT r5, #0 @ r5 =shiftM = 0 + MOVGT r14,r14,LSL r5 @ add <<= shiftM + + CMP r7,#0 @ seqMask = (s->q_seq?-1:0) + MVNNE r7,#0 + + CMP r1, #2 + BEQ dm2 + BGT dm3 + CMP r1,#0 @ probably never happens + BLE dm_duff +dm1: + @ r1 = s->dec_type + @ r2 = s->q_bits + @ r3 = s->dim + @ r5 = shiftM + @ r6 = v + @ r7 = seqMask + @ r8 = entry + @ r12= mul + @ r14= add + MOV r0, #1 + RSB r0, r0, r0, LSL r2 @ r0 = mask = (1<q_bits)-1 + MOV r11,#0 @ r11= prev = 0 +dm1_loop: + AND r1, r8, r0 @ r1 = v = entry & mask + MLA r1, r12, r1, r14 @ r1 = (add + mul*v) + MOV r8, r8, LSR r2 @ r8 = entry>>s->q_bits + SUBS r3, r3, #1 + ADD r1, r11,r1, ASR r5 @ r1 = v = prev+((add+mul*v)>>shiftM) + AND r11,r1, r7 @ r11= prev = seqMask & v + STR r1, [r6], #4 @ *v++ = v + BGT dm1_loop + + MOV r0, #0 + LDMFD r13!,{r4-r11,PC} +dm2: + @ r1 = s->dec_type + @ r2 = s->q_bits + @ r3 = s->dim + @ r4 = s + @ r5 = shiftM + @ r6 = v + @ r7 = seqMask + @ r8 = entry + @ r12= mul + @ r14= add + LDR r1, [r4,#44] @ r1 = s->q_pack + LDR r4, [r4,#48] @ r4 = s->q_val + MOV r11,#0 @ r11= prev + MOV r0, #1 + RSB r0, r0, r0, LSL r1 @ r8 = mask = (1<q_pack)-1 + CMP r2,#8 + BGT dm2_hword +dm2_loop: + AND r2, r8, r0 @ r2 = entry & mask + LDRB r2, [r4, r2] @ r2 = v = q->val[entry & mask] + MOV r8, r8, LSR r1 @ r8 = entry>>q_pack + MLA r2, r12,r2, r14 @ r2 = (add+mul*v) + SUBS r3, r3, #1 + ADD r2, r11,r2, ASR r5 @ r2 = v = prev+(add+mul*v)>>shiftM + AND r11,r2, r7 @ r11= prev = seqMask & v + STR r2, [r6], #4 @ *v++ = v + BGT dm2_loop + MOV r0, #0 + LDMFD r13!,{r4-r11,PC} + +dm2_hword: + AND r2, r8, r0 @ r2 = entry & mask + MOV r2, r2, LSL #1 @ r2 = 2*r2 + LDRH r2, [r4, r2] @ r2 = v = q->val[entry & mask] + MOV r8, r8, LSR r1 @ r8 = entry>>q_pack + MLA r2, r12,r2, r14 @ r2 = (add+mul*v) + SUBS r3, r3, #1 + ADD r2, r11,r2, ASR r5 @ r2 = v = prev+(add+mul*v)>>shiftM + AND r11,r2, r7 @ r11= prev = seqMask & v + STR r2, [r6], #4 @ *v++ = v + BGT dm2_hword + MOV r0, #0 + LDMFD r13!,{r4-r11,PC} + +dm3: + @ r1 = s->dec_type + @ r2 = s->q_bits + @ r3 = s->dim + @ r4 = s + @ r5 = shiftM + @ r6 = v + @ r7 = seqMask + @ r8 = entry + @ r12= mul + @ r14= add + LDR r1, [r4,#44] @ r1 = s->q_pack + LDR r4, [r4,#52] @ r4 = s->q_val + CMP r2,#8 + MOV r11,#0 @ r11= prev + MLA r4,r1,r8,r4 @ r4 = ptr = s->q_val+entry*s->q_pack + + BGT dm3_hword +dm3_loop: + LDRB r2, [r4], #1 @ r2 = v = *ptr++ + SUBS r3, r3, #1 + MLA r2, r12,r2, r14 @ r2 = (add+mul*v) + ADD r2, r11,r2, ASR r5 @ r2 = v = prev+(add+mul*v)>>shiftM + AND r11,r2, r7 @ r11= prev = seqMask & v + STR r2, [r6], #4 @ *v++ = v + BGT dm3_loop + MOV r0, #0 + LDMFD r13!,{r4-r11,PC} + +dm3_hword: + LDRH r2, [r4], #2 @ r2 = *ptr++ + SUBS r3, r3, #1 + MLA r2, r12,r2, r14 @ r2 = (add+mul*v) + ADD r2, r11,r2, ASR r5 @ r2 = v = prev+(add+mul*v)>>shiftM + AND r11,r2, r7 @ r11= prev = seqMask & v + STR r2, [r6], #4 @ *v++ = v + BGT dm3_hword + MOV r0, #0 + LDMFD r13!,{r4-r11,PC} + +dm_duff: + MVN r0,#0 + LDMFD r13!,{r4-r11,PC} + +vorbis_book_decodevv_add: + @ r0 = codebook *book + @ r1 = ogg_int32_t **a + @ r2 = long offset + @ r3 = int ch + @ <> = b + @ <> = n + @ <> = point + STMFD r13!,{r4-r11,R14} + LDR r7, [r0, #13*4] @ r7 = used_entries + MOV r9, r0 @ r9 = book + MOV r10,r1 @ r10= &a[chptr] chptr=0 + MOV r6, r3 @ r6 = ch + ADD r8, r10,r3, LSL #2 @ r8 = &a[ch] + MOV r11,r2 @ r11= offset + CMP r7, #0 @ if (used_entries <= 0) + BLE vbdvva_exit @ exit + LDR r5, [r13,#10*4] @ r5 = n +vbdvva_loop1: + @ r5 = n + @ r6 = ch + @ r8 = &a[ch] + @ r9 = book + @ r10= &a[chptr] + @ r11= offset + MOV r0, r9 @ r0 = book + LDR r1, [r13,# 9*4] @ r1 = b + LDR r2, [r9, #14*4] @ r2 = v = dec_buf + LDR r3, [r13,#11*4] @ r3 = point + BL decode_map + CMP r0, #0 + BNE vbdvva_fail + + LDR r0, [r9, # 5*4] @ r0 = book->dim + LDR r1, [r9, #14*4] @ r1 = v = dec_buf +vbdvva_loop2: + LDR r2, [r10],#4 @ r2 = a[chptr++] + LDR r12,[r1], #4 @ r1 = v[j++] + CMP r10,r8 @ if (chptr == ch) + SUBEQ r10,r10,r6, LSL #2 @ chptr = 0 + LDR r14,[r2, r11,LSL #2]! @ r2 = &a[chptr++][i] r14=[r12] + ADDEQ r11,r11,#1 @ i++ + SUBEQ r5, r5, #1 @ n-- + SUBS r0, r0, #1 @ r0-- + ADD r12,r12,r14 @ r12= a[chptr++][i]+ v[j] + STR r12,[r2] @ r12= a[chptr++][i]+=v[j] + BGT vbdvva_loop2 + CMP r5,#0 + BGT vbdvva_loop1 +vbdvva_exit: + MOV r0, #0 @ return 0 + LDMFD r13!,{r4-r11,PC} +vbdvva_fail: + MVN r0, #0 @ return -1 + LDMFD r13!,{r4-r11,PC} + +_checksum: + @ r0 = ogg_reference *or + @ r1 = bytes + STMFD r13!,{r5-r6,r14} + + LDR r5,=crc_lookup + MOV r14,#0 @ r14= crc_reg = 0 + MOVS r12,r0 + BEQ _cs_end +_cs_loop1: + LDMIA r12,{r0,r2,r3,r12} @ r0 = or->buffer + @ r2 = or->begin + @ r3 = or->length + @ r12= or->next + LDR r0,[r0] @ r0 = or->buffer->data + CMP r1,r3 @ r3 = post = (bytes < or->length ? + MOVLT r3,r1 @ bytes : or->length) + MOVS r6,r3 @ r6 = j = post + BEQ _cs_no_bytes + ADD r0,r0,r2 @ r0 = or->buffer->data + or->begin +_cs_loop2: + LDRB r2, [r0],#1 @ r2 = data[j] + @ stall + @ stall Xscale + EOR r2, r2, r14,LSR #24 @ r2 = (crc_reg>>24)^data[j] + LDR r2, [r5, r2, LSL #2] @ r2 = crc_lkp[(crc_reg>>24)^data[j]] + SUBS r6, r6, #1 @ j-- + @ stall Xscale + EOR r14,r2, r14,LSL #8 @ r14= crc_reg = (crc_reg<<8)^r2 + BGT _cs_loop2 +_cs_no_bytes: + SUBS r1, r1, r3 + CMPNE r12,#0 + BNE _cs_loop1 +_cs_end: + MOV r0,r14 + LDMFD r13!,{r5-r6,PC} diff --git a/android/jni/tremolo/dsp.c b/android/jni/tremolo/dsp.c new file mode 100644 index 00000000..882b6854 --- /dev/null +++ b/android/jni/tremolo/dsp.c @@ -0,0 +1,298 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: PCM data vector blocking, windowing and dis/reassembly + + ********************************************************************/ + +#include +#include "ogg.h" +#include "mdct.h" +#include "ivorbiscodec.h" +#include "codec_internal.h" +#include "misc.h" +#include "window_lookup.h" + +int vorbis_dsp_restart(vorbis_dsp_state *v){ + if(!v)return -1; + { + vorbis_info *vi=v->vi; + codec_setup_info *ci; + + if(!vi)return -1; + ci=vi->codec_setup; + if(!ci)return -1; + + v->out_end=-1; + v->out_begin=-1; + + v->granulepos=-1; + v->sequence=-1; + v->sample_count=-1; + } + return 0; +} + +vorbis_dsp_state *vorbis_dsp_create(vorbis_info *vi){ + int i; + + vorbis_dsp_state *v=_ogg_calloc(1,sizeof(*v)); + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + + v->vi=vi; + + v->work=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->work)); + v->mdctright=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->mdctright)); + for(i=0;ichannels;i++){ + v->work[i]=(ogg_int32_t *)_ogg_calloc(1,(ci->blocksizes[1]>>1)* + sizeof(*v->work[i])); + v->mdctright[i]=(ogg_int32_t *)_ogg_calloc(1,(ci->blocksizes[1]>>2)* + sizeof(*v->mdctright[i])); + } + + v->lW=0; /* previous window size */ + v->W=0; /* current window size */ + + vorbis_dsp_restart(v); + return v; +} + +void vorbis_dsp_destroy(vorbis_dsp_state *v){ + int i; + if(v){ + vorbis_info *vi=v->vi; + + if(v->work){ + for(i=0;ichannels;i++) + if(v->work[i])_ogg_free(v->work[i]); + _ogg_free(v->work); + } + if(v->mdctright){ + for(i=0;ichannels;i++) + if(v->mdctright[i])_ogg_free(v->mdctright[i]); + _ogg_free(v->mdctright); + } + + _ogg_free(v); + } +} + +static LOOKUP_T *_vorbis_window(int left){ + switch(left){ + case 32: + return vwin64; + case 64: + return vwin128; + case 128: + return vwin256; + case 256: + return vwin512; + case 512: + return vwin1024; + case 1024: + return vwin2048; + case 2048: + return vwin4096; +#ifndef LIMIT_TO_64kHz + case 4096: + return vwin8192; +#endif + default: + return(0); + } +} + +/* pcm==0 indicates we just want the pending samples, no more */ +int vorbis_dsp_pcmout(vorbis_dsp_state *v,ogg_int16_t *pcm,int samples){ + vorbis_info *vi=v->vi; + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + if(v->out_begin>-1 && v->out_beginout_end){ + int n=v->out_end-v->out_begin; + if(pcm){ + int i; + if(n>samples)n=samples; + for(i=0;ichannels;i++) + mdct_unroll_lap(ci->blocksizes[0],ci->blocksizes[1], + v->lW,v->W,v->work[i],v->mdctright[i], + _vorbis_window(ci->blocksizes[0]>>1), + _vorbis_window(ci->blocksizes[1]>>1), + pcm+i,vi->channels, + v->out_begin,v->out_begin+n); + } + return(n); + } + return(0); +} + +int vorbis_dsp_read(vorbis_dsp_state *v,int s){ + if(s && v->out_begin+s>v->out_end)return(OV_EINVAL); + v->out_begin+=s; + return(0); +} + +long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){ + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + oggpack_buffer opb; + int mode; + int modebits=0; + int v=ci->modes; + + oggpack_readinit(&opb,op->packet); + + /* Check the packet type */ + if(oggpack_read(&opb,1)!=0){ + /* Oops. This is not an audio data packet */ + return(OV_ENOTAUDIO); + } + + while(v>1){ + modebits++; + v>>=1; + } + + /* read our mode and pre/post windowsize */ + mode=oggpack_read(&opb,modebits); + if(mode==-1)return(OV_EBADPACKET); + return(ci->blocksizes[ci->mode_param[mode].blockflag]); +} + + +static int ilog(ogg_uint32_t v){ + int ret=0; + if(v)--v; + while(v){ + ret++; + v>>=1; + } + return(ret); +} + +int vorbis_dsp_synthesis(vorbis_dsp_state *vd,ogg_packet *op,int decodep){ + vorbis_info *vi=vd->vi; + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + int mode,i; + + oggpack_readinit(&vd->opb,op->packet); + + /* Check the packet type */ + if(oggpack_read(&vd->opb,1)!=0){ + /* Oops. This is not an audio data packet */ + return OV_ENOTAUDIO ; + } + + /* read our mode and pre/post windowsize */ + mode=oggpack_read(&vd->opb,ilog(ci->modes)); + if(mode==-1 || mode>=ci->modes) return OV_EBADPACKET; + + /* shift information we still need from last window */ + vd->lW=vd->W; + vd->W=ci->mode_param[mode].blockflag; + for(i=0;ichannels;i++) + mdct_shift_right(ci->blocksizes[vd->lW],vd->work[i],vd->mdctright[i]); + + if(vd->W){ + int temp; + oggpack_read(&vd->opb,1); + temp=oggpack_read(&vd->opb,1); + if(temp==-1) return OV_EBADPACKET; + } + + /* packet decode and portions of synthesis that rely on only this block */ + if(decodep){ + mapping_inverse(vd,ci->map_param+ci->mode_param[mode].mapping); + + if(vd->out_begin==-1){ + vd->out_begin=0; + vd->out_end=0; + }else{ + vd->out_begin=0; + vd->out_end=ci->blocksizes[vd->lW]/4+ci->blocksizes[vd->W]/4; + } + } + + /* track the frame number... This is for convenience, but also + making sure our last packet doesn't end with added padding. + + This is not foolproof! It will be confused if we begin + decoding at the last page after a seek or hole. In that case, + we don't have a starting point to judge where the last frame + is. For this reason, vorbisfile will always try to make sure + it reads the last two marked pages in proper sequence */ + + /* if we're out of sequence, dump granpos tracking until we sync back up */ + if(vd->sequence==-1 || vd->sequence+1 != op->packetno-3){ + /* out of sequence; lose count */ + vd->granulepos=-1; + vd->sample_count=-1; + } + + vd->sequence=op->packetno; + vd->sequence=vd->sequence-3; + + if(vd->sample_count==-1){ + vd->sample_count=0; + }else{ + vd->sample_count+= + ci->blocksizes[vd->lW]/4+ci->blocksizes[vd->W]/4; + } + + if(vd->granulepos==-1){ + if(op->granulepos!=-1){ /* only set if we have a + position to set to */ + + vd->granulepos=op->granulepos; + + /* is this a short page? */ + if(vd->sample_count>vd->granulepos){ + /* corner case; if this is both the first and last audio page, + then spec says the end is cut, not beginning */ + if(op->e_o_s){ + /* trim the end */ + /* no preceeding granulepos; assume we started at zero (we'd + have to in a short single-page stream) */ + /* granulepos could be -1 due to a seek, but that would result + in a long coun t, not short count */ + + vd->out_end-=vd->sample_count-vd->granulepos; + }else{ + /* trim the beginning */ + vd->out_begin+=vd->sample_count-vd->granulepos; + if(vd->out_begin>vd->out_end) + vd->out_begin=vd->out_end; + } + + } + + } + }else{ + vd->granulepos+= + ci->blocksizes[vd->lW]/4+ci->blocksizes[vd->W]/4; + if(op->granulepos!=-1 && vd->granulepos!=op->granulepos){ + + if(vd->granulepos>op->granulepos){ + long extra=vd->granulepos-op->granulepos; + + if(extra) + if(op->e_o_s){ + /* partial last frame. Strip the extra samples off */ + vd->out_end-=extra; + } /* else {Shouldn't happen *unless* the bitstream is out of + spec. Either way, believe the bitstream } */ + } /* else {Shouldn't happen *unless* the bitstream is out of + spec. Either way, believe the bitstream } */ + vd->granulepos=op->granulepos; + } + } + + return(0); +} diff --git a/android/jni/tremolo/floor0.c b/android/jni/tremolo/floor0.c new file mode 100644 index 00000000..864af70b --- /dev/null +++ b/android/jni/tremolo/floor0.c @@ -0,0 +1,428 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: floor backend 0 implementation + + ********************************************************************/ + +#include +#include +#include +#include "ogg.h" +#include "ivorbiscodec.h" +#include "codec_internal.h" +#include "codebook.h" +#include "misc.h" +#include "os.h" + +#define LSP_FRACBITS 14 +extern const ogg_int32_t FLOOR_fromdB_LOOKUP[]; + +/*************** LSP decode ********************/ + +#include "lsp_lookup.h" + +/* interpolated 1./sqrt(p) where .5 <= a < 1. (.100000... to .111111...) in + 16.16 format + returns in m.8 format */ + +static long ADJUST_SQRT2[2]={8192,5792}; +static inline ogg_int32_t vorbis_invsqlook_i(long a,long e){ + long i=(a&0x7fff)>>(INVSQ_LOOKUP_I_SHIFT-1); + long d=a&INVSQ_LOOKUP_I_MASK; /* 0.10 */ + long val=INVSQ_LOOKUP_I[i]- /* 1.16 */ + ((INVSQ_LOOKUP_IDel[i]*d)>>INVSQ_LOOKUP_I_SHIFT); /* result 1.16 */ + val*=ADJUST_SQRT2[e&1]; + e=(e>>1)+21; + return(val>>e); +} + +/* interpolated lookup based fromdB function, domain -140dB to 0dB only */ +/* a is in n.12 format */ +#ifdef _LOW_ACCURACY_ +static inline ogg_int32_t vorbis_fromdBlook_i(long a){ + if(a>0) return 0x7fffffff; + if(a<(-140<<12)) return 0; + return FLOOR_fromdB_LOOKUP[((a+140)*467)>>20]<<9; +} +#else +static inline ogg_int32_t vorbis_fromdBlook_i(long a){ + if(a>0) return 0x7fffffff; + if(a<(-140<<12)) return 0; + return FLOOR_fromdB_LOOKUP[((a+(140<<12))*467)>>20]; +} +#endif + +/* interpolated lookup based cos function, domain 0 to PI only */ +/* a is in 0.16 format, where 0==0, 2^^16-1==PI, return 0.14 */ +static inline ogg_int32_t vorbis_coslook_i(long a){ + int i=a>>COS_LOOKUP_I_SHIFT; + int d=a&COS_LOOKUP_I_MASK; + return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>> + COS_LOOKUP_I_SHIFT); +} + +/* interpolated half-wave lookup based cos function */ +/* a is in 0.16 format, where 0==0, 2^^16==PI, return .LSP_FRACBITS */ +static inline ogg_int32_t vorbis_coslook2_i(long a){ + int i=a>>COS_LOOKUP_I_SHIFT; + int d=a&COS_LOOKUP_I_MASK; + return ((COS_LOOKUP_I[i]<> + (COS_LOOKUP_I_SHIFT-LSP_FRACBITS+14); +} + +static const ogg_uint16_t barklook[54]={ + 0,51,102,154, 206,258,311,365, + 420,477,535,594, 656,719,785,854, + 926,1002,1082,1166, 1256,1352,1454,1564, + 1683,1812,1953,2107, 2276,2463,2670,2900, + 3155,3440,3756,4106, 4493,4919,5387,5901, + 6466,7094,7798,8599, 9528,10623,11935,13524, + 15453,17775,20517,23667, 27183,31004 +}; + +/* used in init only; interpolate the long way */ +static inline ogg_int32_t toBARK(int n){ + int i; + for(i=0;i<54;i++) + if(n>=barklook[i] && n>17); + } +} + +static const unsigned char MLOOP_1[64]={ + 0,10,11,11, 12,12,12,12, 13,13,13,13, 13,13,13,13, + 14,14,14,14, 14,14,14,14, 14,14,14,14, 14,14,14,14, + 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, + 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, +}; + +static const unsigned char MLOOP_2[64]={ + 0,4,5,5, 6,6,6,6, 7,7,7,7, 7,7,7,7, + 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8, + 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, + 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, +}; + +static const unsigned char MLOOP_3[8]={0,1,2,2,3,3,3,3}; + +void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln, + ogg_int32_t *lsp,int m, + ogg_int32_t amp, + ogg_int32_t ampoffset, + ogg_int32_t nyq){ + + /* 0 <= m < 256 */ + + /* set up for using all int later */ + int i; + int ampoffseti=ampoffset*4096; + int ampi=amp; + ogg_int32_t *ilsp=(ogg_int32_t *)alloca(m*sizeof(*ilsp)); + + ogg_uint32_t inyq= (1UL<<31) / toBARK(nyq); + ogg_uint32_t imap= (1UL<<31) / ln; + ogg_uint32_t tBnyq1 = toBARK(nyq)<<1; + + /* Besenham for frequency scale to avoid a division */ + int f=0; + int fdx=n; + int fbase=nyq/fdx; + int ferr=0; + int fdy=nyq-fbase*fdx; + int map=0; + +#ifdef _LOW_ACCURACY_ + ogg_uint32_t nextbark=((tBnyq1<<11)/ln)>>12; +#else + ogg_uint32_t nextbark=MULT31(imap>>1,tBnyq1); +#endif + int nextf=barklook[nextbark>>14]+(((nextbark&0x3fff)* + (barklook[(nextbark>>14)+1]-barklook[nextbark>>14]))>>14); + + /* lsp is in 8.24, range 0 to PI; coslook wants it in .16 0 to 1*/ + for(i=0;i>10)*0x517d)>>14; +#endif + + /* safeguard against a malicious stream */ + if(val<0 || (val>>COS_LOOKUP_I_SHIFT)>=COS_LOOKUP_I_SZ){ + memset(curve,0,sizeof(*curve)*n); + return; + } + + ilsp[i]=vorbis_coslook_i(val); + } + + i=0; + while(i>15); + + +#ifdef _V_LSP_MATH_ASM + lsp_loop_asm(&qi,&pi,&qexp,ilsp,wi,m); + + pi=((pi*pi)>>16); + qi=((qi*qi)>>16); + + if(m&1){ + qexp= qexp*2-28*((m+1)>>1)+m; + pi*=(1<<14)-((wi*wi)>>14); + qi+=pi>>14; + }else{ + qexp= qexp*2-13*m; + + pi*=(1<<14)-wi; + qi*=(1<<14)+wi; + + qi=(qi+pi)>>14; + } + + if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */ + qi>>=1; qexp++; + }else + lsp_norm_asm(&qi,&qexp); + +#else + + qi*=labs(ilsp[0]-wi); + pi*=labs(ilsp[1]-wi); + + for(j=3;j>25])) + if(!(shift=MLOOP_2[(pi|qi)>>19])) + shift=MLOOP_3[(pi|qi)>>16]; + + qi=(qi>>shift)*labs(ilsp[j-1]-wi); + pi=(pi>>shift)*labs(ilsp[j]-wi); + qexp+=shift; + } + if(!(shift=MLOOP_1[(pi|qi)>>25])) + if(!(shift=MLOOP_2[(pi|qi)>>19])) + shift=MLOOP_3[(pi|qi)>>16]; + + /* pi,qi normalized collectively, both tracked using qexp */ + + if(m&1){ + /* odd order filter; slightly assymetric */ + /* the last coefficient */ + qi=(qi>>shift)*labs(ilsp[j-1]-wi); + pi=(pi>>shift)<<14; + qexp+=shift; + + if(!(shift=MLOOP_1[(pi|qi)>>25])) + if(!(shift=MLOOP_2[(pi|qi)>>19])) + shift=MLOOP_3[(pi|qi)>>16]; + + pi>>=shift; + qi>>=shift; + qexp+=shift-14*((m+1)>>1); + + pi=((pi*pi)>>16); + qi=((qi*qi)>>16); + qexp=qexp*2+m; + + pi*=(1<<14)-((wi*wi)>>14); + qi+=pi>>14; + + }else{ + /* even order filter; still symmetric */ + + /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't + worth tracking step by step */ + + pi>>=shift; + qi>>=shift; + qexp+=shift-7*m; + + pi=((pi*pi)>>16); + qi=((qi*qi)>>16); + qexp=qexp*2+m; + + pi*=(1<<14)-wi; + qi*=(1<<14)+wi; + qi=(qi+pi)>>14; + + } + + + /* we've let the normalization drift because it wasn't important; + however, for the lookup, things must be normalized again. We + need at most one right shift or a number of left shifts */ + + if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */ + qi>>=1; qexp++; + }else + while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/ + qi<<=1; qexp--; + } + +#endif + + amp=vorbis_fromdBlook_i(ampi* /* n.4 */ + vorbis_invsqlook_i(qi,qexp)- + /* m.8, m+n<=8 */ + ampoffseti); /* 8.12[0] */ + +#ifdef _LOW_ACCURACY_ + amp>>=9; +#endif + curve[i]= MULT31_SHIFT15(curve[i],amp); + + while(++i=fdx){ + ferr-=fdx; + f++; + } + f+=fbase; + + if(f>=nextf)break; + + curve[i]= MULT31_SHIFT15(curve[i],amp); + } + + while(1){ + map++; + + if(map+1>12; +#else + nextbark=MULT31((map+1)*(imap>>1),tBnyq1); +#endif + nextf=barklook[nextbark>>14]+ + (((nextbark&0x3fff)* + (barklook[(nextbark>>14)+1]-barklook[nextbark>>14]))>>14); + if(f<=nextf)break; + + }else{ + nextf=9999999; + break; + } + } + if(map>=ln){ + map=ln-1; /* guard against the approximation */ + nextf=9999999; + } + } +} + +/*************** vorbis decode glue ************/ + +void floor0_free_info(vorbis_info_floor *i){ + vorbis_info_floor0 *info=(vorbis_info_floor0 *)i; + if(info)_ogg_free(info); +} + +vorbis_info_floor *floor0_info_unpack (vorbis_info *vi,oggpack_buffer *opb){ + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + int j; + + vorbis_info_floor0 *info=(vorbis_info_floor0 *)_ogg_malloc(sizeof(*info)); + info->order=oggpack_read(opb,8); + info->rate=oggpack_read(opb,16); + info->barkmap=oggpack_read(opb,16); + info->ampbits=oggpack_read(opb,6); + info->ampdB=oggpack_read(opb,8); + info->numbooks=oggpack_read(opb,4)+1; + + if(info->order<1)goto err_out; + if(info->rate<1)goto err_out; + if(info->barkmap<1)goto err_out; + + for(j=0;jnumbooks;j++){ + info->books[j]=oggpack_read(opb,8); + if(info->books[j]>=ci->books)goto err_out; + } + + if(oggpack_eop(opb))goto err_out; + return(info); + + err_out: + floor0_free_info(info); + return(NULL); +} + +int floor0_memosize(vorbis_info_floor *i){ + vorbis_info_floor0 *info=(vorbis_info_floor0 *)i; + return info->order+1; +} + +ogg_int32_t *floor0_inverse1(vorbis_dsp_state *vd,vorbis_info_floor *i, + ogg_int32_t *lsp){ + vorbis_info_floor0 *info=(vorbis_info_floor0 *)i; + int j,k; + + int ampraw=oggpack_read(&vd->opb,info->ampbits); + if(ampraw>0){ /* also handles the -1 out of data case */ + long maxval=(1<ampbits)-1; + int amp=((ampraw*info->ampdB)<<4)/maxval; + int booknum=oggpack_read(&vd->opb,_ilog(info->numbooks)); + + if(booknum!=-1 && booknumnumbooks){ /* be paranoid */ + codec_setup_info *ci=(codec_setup_info *)vd->vi->codec_setup; + codebook *b=ci->book_param+info->books[booknum]; + ogg_int32_t last=0; + + for(j=0;jorder;j+=b->dim) + if(vorbis_book_decodev_set(b,lsp+j,&vd->opb,b->dim,-24)==-1)goto eop; + for(j=0;jorder;){ + for(k=0;kdim;k++,j++)lsp[j]+=last; + last=lsp[j-1]; + } + + lsp[info->order]=amp; + return(lsp); + } + } + eop: + return(NULL); +} + +int floor0_inverse2(vorbis_dsp_state *vd,vorbis_info_floor *i, + ogg_int32_t *lsp,ogg_int32_t *out){ + vorbis_info_floor0 *info=(vorbis_info_floor0 *)i; + codec_setup_info *ci=(codec_setup_info *)vd->vi->codec_setup; + + if(lsp){ + ogg_int32_t amp=lsp[info->order]; + + /* take the coefficients back to a spectral envelope curve */ + vorbis_lsp_to_curve(out,ci->blocksizes[vd->W]/2,info->barkmap, + lsp,info->order,amp,info->ampdB, + info->rate>>1); + return(1); + } + memset(out,0,sizeof(*out)*ci->blocksizes[vd->W]/2); + return(0); +} + diff --git a/android/jni/tremolo/floor1.c b/android/jni/tremolo/floor1.c new file mode 100644 index 00000000..f0aa0b21 --- /dev/null +++ b/android/jni/tremolo/floor1.c @@ -0,0 +1,382 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: floor backend 1 implementation + + ********************************************************************/ + +#include +#include +#include +#include "ogg.h" +#include "ivorbiscodec.h" +#include "codec_internal.h" +#include "codebook.h" +#include "misc.h" + +extern const ogg_int32_t FLOOR_fromdB_LOOKUP[]; +#define floor1_rangedB 140 /* floor 1 fixed at -140dB to 0dB range */ +#define VIF_POSIT 63 + +/***********************************************/ + +void floor1_free_info(vorbis_info_floor *i){ + vorbis_info_floor1 *info=(vorbis_info_floor1 *)i; + if(info){ + if(info->class)_ogg_free(info->class); + if(info->partitionclass)_ogg_free(info->partitionclass); + if(info->postlist)_ogg_free(info->postlist); + if(info->forward_index)_ogg_free(info->forward_index); + if(info->hineighbor)_ogg_free(info->hineighbor); + if(info->loneighbor)_ogg_free(info->loneighbor); + memset(info,0,sizeof(*info)); + _ogg_free(info); + } +} + +static int ilog(unsigned int v){ + int ret=0; + while(v){ + ret++; + v>>=1; + } + return(ret); +} + +static void mergesort(char *index,ogg_uint16_t *vals,ogg_uint16_t n){ + ogg_uint16_t i,j; + char *temp,*A=index,*B=_ogg_malloc(n*sizeof(*B)); + + for(i=1;icodec_setup; + int j,k,count=0,maxclass=-1,rangebits; + + vorbis_info_floor1 *info=(vorbis_info_floor1 *)_ogg_calloc(1,sizeof(*info)); + /* read partitions */ + info->partitions=oggpack_read(opb,5); /* only 0 to 31 legal */ + info->partitionclass= + (char *)_ogg_malloc(info->partitions*sizeof(*info->partitionclass)); + for(j=0;jpartitions;j++){ + info->partitionclass[j]=oggpack_read(opb,4); /* only 0 to 15 legal */ + if(maxclasspartitionclass[j])maxclass=info->partitionclass[j]; + } + + /* read partition classes */ + info->class= + (floor1class *)_ogg_malloc((maxclass+1)*sizeof(*info->class)); + for(j=0;jclass[j].class_dim=oggpack_read(opb,3)+1; /* 1 to 8 */ + info->class[j].class_subs=oggpack_read(opb,2); /* 0,1,2,3 bits */ + if(oggpack_eop(opb)<0) goto err_out; + if(info->class[j].class_subs) + info->class[j].class_book=oggpack_read(opb,8); + else + info->class[j].class_book=0; + if(info->class[j].class_book>=ci->books)goto err_out; + for(k=0;k<(1<class[j].class_subs);k++){ + info->class[j].class_subbook[k]=oggpack_read(opb,8)-1; + if(info->class[j].class_subbook[k]>=ci->books && + info->class[j].class_subbook[k]!=0xff)goto err_out; + } + } + + /* read the post list */ + info->mult=oggpack_read(opb,2)+1; /* only 1,2,3,4 legal now */ + rangebits=oggpack_read(opb,4); + + for(j=0,k=0;jpartitions;j++) + count+=info->class[info->partitionclass[j]].class_dim; + info->postlist= + (ogg_uint16_t *)_ogg_malloc((count+2)*sizeof(*info->postlist)); + info->forward_index= + (char *)_ogg_malloc((count+2)*sizeof(*info->forward_index)); + info->loneighbor= + (char *)_ogg_malloc(count*sizeof(*info->loneighbor)); + info->hineighbor= + (char *)_ogg_malloc(count*sizeof(*info->hineighbor)); + + count=0; + for(j=0,k=0;jpartitions;j++){ + count+=info->class[info->partitionclass[j]].class_dim; + for(;kpostlist[k+2]=oggpack_read(opb,rangebits); + if(t>=(1<postlist[0]=0; + info->postlist[1]=1<posts=count+2; + + /* also store a sorted position index */ + for(j=0;jposts;j++)info->forward_index[j]=j; + mergesort(info->forward_index,info->postlist,info->posts); + + /* discover our neighbors for decode where we don't use fit flags + (that would push the neighbors outward) */ + for(j=0;jposts-2;j++){ + int lo=0; + int hi=1; + int lx=0; + int hx=info->postlist[1]; + int currentx=info->postlist[j+2]; + for(k=0;kpostlist[k]; + if(x>lx && xcurrentx){ + hi=k; + hx=x; + } + } + info->loneighbor[j]=lo; + info->hineighbor[j]=hi; + } + + return(info); + + err_out: + floor1_free_info(info); + return(NULL); +} + +#ifdef ONLY_C +static +#endif +int render_point(int x0,int x1,int y0,int y1,int x){ + y0&=0x7fff; /* mask off flag */ + y1&=0x7fff; + + { + int dy=y1-y0; + int adx=x1-x0; + int ady=abs(dy); + int err=ady*(x-x0); + + int off=err/adx; + if(dy<0)return(y0-off); + return(y0+off); + } +} + +static void render_line(int n,int x0,int x1,int y0,int y1,ogg_int32_t *d){ + int dy; + int adx; + int ady; + int base; + int err; + const ogg_int32_t *floor; + + if(n>x1)n=x1; + n -= x0; + if (n <= 0) + return; + dy=y1-y0; + adx=x1-x0; + ady=abs(dy); + base=dy/adx; + err=adx-1; + floor=&FLOOR_fromdB_LOOKUP[y0]; + d += x0; + ady-=abs(base*adx); + + /* We should add base each time, and then: + * if dy >=0 we occasionally add 1 + * else occasionally subtract 1. + * As an optimisation we say that if dy <0 we make base 1 smaller. + * Then we need to add 1 occassionally, rather than subtract 1 - but we + * need to add 1 in all the cases when we wouldn't have done so before. + * Previously we'd have added 1 (100*ady/adx)% of the time. Now we want + * to do so (100*(adx-ady)/adx)% of the time. + */ + if (dy < 0){ + base--; + ady = adx-ady; + err = 0; + } + + //if(x0); +#else + render_lineARM(n,d,floor,base,err,adx,ady); +#endif +} + +int floor1_memosize(vorbis_info_floor *i){ + vorbis_info_floor1 *info=(vorbis_info_floor1 *)i; + return info->posts; +} + +static int quant_look[4]={256,128,86,64}; + +ogg_int32_t *floor1_inverse1(vorbis_dsp_state *vd,vorbis_info_floor *in, + ogg_int32_t *fit_value){ + vorbis_info_floor1 *info=(vorbis_info_floor1 *)in; + codec_setup_info *ci=(codec_setup_info *)vd->vi->codec_setup; + + int i,j,k; + codebook *books=ci->book_param; + int quant_q=quant_look[info->mult-1]; + + /* unpack wrapped/predicted values from stream */ + if(oggpack_read(&vd->opb,1)==1){ + fit_value[0]=oggpack_read(&vd->opb,ilog(quant_q-1)); + fit_value[1]=oggpack_read(&vd->opb,ilog(quant_q-1)); + + /* partition by partition */ + /* partition by partition */ + for(i=0,j=2;ipartitions;i++){ + int classv=info->partitionclass[i]; + int cdim=info->class[classv].class_dim; + int csubbits=info->class[classv].class_subs; + int csub=1<class[classv].class_book,&vd->opb); + + if(cval==-1)goto eop; + } + + for(k=0;kclass[classv].class_subbook[cval&(csub-1)]; + cval>>=csubbits; + if(book!=0xff){ + if((fit_value[j+k]=vorbis_book_decode(books+book,&vd->opb))==-1) + goto eop; + }else{ + fit_value[j+k]=0; + } + } + j+=cdim; + } + + /* unwrap positive values and reconsitute via linear interpolation */ + for(i=2;iposts;i++){ + int predicted=render_point(info->postlist[info->loneighbor[i-2]], + info->postlist[info->hineighbor[i-2]], + fit_value[info->loneighbor[i-2]], + fit_value[info->hineighbor[i-2]], + info->postlist[i]); + int hiroom=quant_q-predicted; + int loroom=predicted; + int room=(hiroom=room){ + if(hiroom>loroom){ + val = val-loroom; + }else{ + val = -1-(val-hiroom); + } + }else{ + if(val&1){ + val= -((val+1)>>1); + }else{ + val>>=1; + } + } + + fit_value[i]=val+predicted; + fit_value[info->loneighbor[i-2]]&=0x7fff; + fit_value[info->hineighbor[i-2]]&=0x7fff; + + }else{ + fit_value[i]=predicted|0x8000; + } + + } + + return(fit_value); + } + eop: + return(NULL); +} + +int floor1_inverse2(vorbis_dsp_state *vd,vorbis_info_floor *in, + ogg_int32_t *fit_value,ogg_int32_t *out){ + vorbis_info_floor1 *info=(vorbis_info_floor1 *)in; + + codec_setup_info *ci=(codec_setup_info *)vd->vi->codec_setup; + int n=ci->blocksizes[vd->W]/2; + int j; + + if(fit_value){ + /* render the lines */ + int hx=0; + int lx=0; + int ly=fit_value[0]*info->mult; + for(j=1;jposts;j++){ + int current=info->forward_index[j]; + int hy=fit_value[current]&0x7fff; + if(hy==fit_value[current]){ + + hy*=info->mult; + hx=info->postlist[current]; + + render_line(n,lx,hx,ly,hy,out); + + lx=hx; + ly=hy; + } + } + for(j=hx;j = err + @ <> = adx + @ <> = ady + MOV r12,r13 + STMFD r13!,{r4-r6,r11,r14} + LDMFD r12,{r11,r12,r14} @ r11 = err + @ r12 = adx + @ r14 = ady +rl_loop: + LDR r4,[r1] @ r4 = *d + LDR r5,[r2],r3,LSL #2 @ r5 = *floor r2 = floor+base + SUBS r11,r11,r14 @ err -= ady + ADDLT r11,r11,r12 @ if (err < 0) err+=adx + SMULL r6, r5, r4, r5 @ (r6,r5) = *d * *floor + ADDLT r2, r2, #4 @ floor+=1 + MOVS r6, r6, LSR #15 + ADC r5, r6, r5, LSL #17 @ r5 = MULT31_SHIFT15 + STR r5,[r1],#4 + SUBS r0, r0, #1 + BGT rl_loop + + LDMFD r13!,{r4-r6,r11,PC} diff --git a/android/jni/tremolo/floor1LARM.s b/android/jni/tremolo/floor1LARM.s new file mode 100644 index 00000000..5397fb6c --- /dev/null +++ b/android/jni/tremolo/floor1LARM.s @@ -0,0 +1,30 @@ + .text + + .global render_lineARM + +render_lineARM: + @ r0 = n + @ r1 = d + @ r2 = floor + @ r3 = base + @ <> = err + @ <> = adx + @ <> = ady + MOV r12,r13 + STMFD r13!,{r4-r6,r11,r14} + LDMFD r12,{r11,r12,r14} @ r11 = err + @ r12 = adx + @ r14 = ady +rl_loop: + LDR r4, [r1] @ r4 = *d + LDR r5, [r2], r3,LSL #2 @ r5 = *floor r2 = floor+base + SUBS r11,r11,r14 @ err -= ady + MOV r4, r4, ASR #6 + MUL r5, r4, r5 @ r5 = MULT31_SHIFT15 + ADDLT r11,r11,r12 @ if (err < 0) err+=adx + ADDLT r2, r2, #4 @ floor+=1 + SUBS r0, r0, #1 + STR r5, [r1], #4 + BGT rl_loop + + LDMFD r13!,{r4-r6,r11,PC} diff --git a/android/jni/tremolo/floor_lookup.c b/android/jni/tremolo/floor_lookup.c new file mode 100644 index 00000000..be0554e8 --- /dev/null +++ b/android/jni/tremolo/floor_lookup.c @@ -0,0 +1,92 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: floor dB lookup + + ********************************************************************/ + +#include "os.h" + +#ifdef _LOW_ACCURACY_ +# define XdB(n) ((((n)>>8)+1)>>1) +#else +# define XdB(n) (n) +#endif + +const ogg_int32_t FLOOR_fromdB_LOOKUP[256]={ + XdB(0x000000e5), XdB(0x000000f4), XdB(0x00000103), XdB(0x00000114), + XdB(0x00000126), XdB(0x00000139), XdB(0x0000014e), XdB(0x00000163), + XdB(0x0000017a), XdB(0x00000193), XdB(0x000001ad), XdB(0x000001c9), + XdB(0x000001e7), XdB(0x00000206), XdB(0x00000228), XdB(0x0000024c), + XdB(0x00000272), XdB(0x0000029b), XdB(0x000002c6), XdB(0x000002f4), + XdB(0x00000326), XdB(0x0000035a), XdB(0x00000392), XdB(0x000003cd), + XdB(0x0000040c), XdB(0x00000450), XdB(0x00000497), XdB(0x000004e4), + XdB(0x00000535), XdB(0x0000058c), XdB(0x000005e8), XdB(0x0000064a), + XdB(0x000006b3), XdB(0x00000722), XdB(0x00000799), XdB(0x00000818), + XdB(0x0000089e), XdB(0x0000092e), XdB(0x000009c6), XdB(0x00000a69), + XdB(0x00000b16), XdB(0x00000bcf), XdB(0x00000c93), XdB(0x00000d64), + XdB(0x00000e43), XdB(0x00000f30), XdB(0x0000102d), XdB(0x0000113a), + XdB(0x00001258), XdB(0x0000138a), XdB(0x000014cf), XdB(0x00001629), + XdB(0x0000179a), XdB(0x00001922), XdB(0x00001ac4), XdB(0x00001c82), + XdB(0x00001e5c), XdB(0x00002055), XdB(0x0000226f), XdB(0x000024ac), + XdB(0x0000270e), XdB(0x00002997), XdB(0x00002c4b), XdB(0x00002f2c), + XdB(0x0000323d), XdB(0x00003581), XdB(0x000038fb), XdB(0x00003caf), + XdB(0x000040a0), XdB(0x000044d3), XdB(0x0000494c), XdB(0x00004e10), + XdB(0x00005323), XdB(0x0000588a), XdB(0x00005e4b), XdB(0x0000646b), + XdB(0x00006af2), XdB(0x000071e5), XdB(0x0000794c), XdB(0x0000812e), + XdB(0x00008993), XdB(0x00009283), XdB(0x00009c09), XdB(0x0000a62d), + XdB(0x0000b0f9), XdB(0x0000bc79), XdB(0x0000c8b9), XdB(0x0000d5c4), + XdB(0x0000e3a9), XdB(0x0000f274), XdB(0x00010235), XdB(0x000112fd), + XdB(0x000124dc), XdB(0x000137e4), XdB(0x00014c29), XdB(0x000161bf), + XdB(0x000178bc), XdB(0x00019137), XdB(0x0001ab4a), XdB(0x0001c70e), + XdB(0x0001e4a1), XdB(0x0002041f), XdB(0x000225aa), XdB(0x00024962), + XdB(0x00026f6d), XdB(0x000297f0), XdB(0x0002c316), XdB(0x0002f109), + XdB(0x000321f9), XdB(0x00035616), XdB(0x00038d97), XdB(0x0003c8b4), + XdB(0x000407a7), XdB(0x00044ab2), XdB(0x00049218), XdB(0x0004de23), + XdB(0x00052f1e), XdB(0x0005855c), XdB(0x0005e135), XdB(0x00064306), + XdB(0x0006ab33), XdB(0x00071a24), XdB(0x0007904b), XdB(0x00080e20), + XdB(0x00089422), XdB(0x000922da), XdB(0x0009bad8), XdB(0x000a5cb6), + XdB(0x000b091a), XdB(0x000bc0b1), XdB(0x000c8436), XdB(0x000d5471), + XdB(0x000e3233), XdB(0x000f1e5f), XdB(0x001019e4), XdB(0x001125c1), + XdB(0x00124306), XdB(0x001372d5), XdB(0x0014b663), XdB(0x00160ef7), + XdB(0x00177df0), XdB(0x001904c1), XdB(0x001aa4f9), XdB(0x001c603d), + XdB(0x001e384f), XdB(0x00202f0f), XdB(0x0022467a), XdB(0x002480b1), + XdB(0x0026dff7), XdB(0x002966b3), XdB(0x002c1776), XdB(0x002ef4fc), + XdB(0x0032022d), XdB(0x00354222), XdB(0x0038b828), XdB(0x003c67c2), + XdB(0x004054ae), XdB(0x004482e8), XdB(0x0048f6af), XdB(0x004db488), + XdB(0x0052c142), XdB(0x005821ff), XdB(0x005ddc33), XdB(0x0063f5b0), + XdB(0x006a74a7), XdB(0x00715faf), XdB(0x0078bdce), XdB(0x0080967f), + XdB(0x0088f1ba), XdB(0x0091d7f9), XdB(0x009b5247), XdB(0x00a56a41), + XdB(0x00b02a27), XdB(0x00bb9ce2), XdB(0x00c7ce12), XdB(0x00d4ca17), + XdB(0x00e29e20), XdB(0x00f15835), XdB(0x0101074b), XdB(0x0111bb4e), + XdB(0x01238531), XdB(0x01367704), XdB(0x014aa402), XdB(0x016020a7), + XdB(0x017702c3), XdB(0x018f6190), XdB(0x01a955cb), XdB(0x01c4f9cf), + XdB(0x01e269a8), XdB(0x0201c33b), XdB(0x0223265a), XdB(0x0246b4ea), + XdB(0x026c9302), XdB(0x0294e716), XdB(0x02bfda13), XdB(0x02ed9793), + XdB(0x031e4e09), XdB(0x03522ee4), XdB(0x03896ed0), XdB(0x03c445e2), + XdB(0x0402efd6), XdB(0x0445ac4b), XdB(0x048cbefc), XdB(0x04d87013), + XdB(0x05290c67), XdB(0x057ee5ca), XdB(0x05da5364), XdB(0x063bb204), + XdB(0x06a36485), XdB(0x0711d42b), XdB(0x0787710e), XdB(0x0804b299), + XdB(0x088a17ef), XdB(0x0918287e), XdB(0x09af747c), XdB(0x0a50957e), + XdB(0x0afc2f19), XdB(0x0bb2ef7f), XdB(0x0c759034), XdB(0x0d44d6ca), + XdB(0x0e2195bc), XdB(0x0f0cad0d), XdB(0x10070b62), XdB(0x1111aeea), + XdB(0x122da66c), XdB(0x135c120f), XdB(0x149e24d9), XdB(0x15f525b1), + XdB(0x176270e3), XdB(0x18e7794b), XdB(0x1a85c9ae), XdB(0x1c3f06d1), + XdB(0x1e14f07d), XdB(0x200963d7), XdB(0x221e5ccd), XdB(0x2455f870), + XdB(0x26b2770b), XdB(0x29363e2b), XdB(0x2be3db5c), XdB(0x2ebe06b6), + XdB(0x31c7a55b), XdB(0x3503ccd4), XdB(0x3875c5aa), XdB(0x3c210f44), + XdB(0x4009632b), XdB(0x4432b8cf), XdB(0x48a149bc), XdB(0x4d59959e), + XdB(0x52606733), XdB(0x57bad899), XdB(0x5d6e593a), XdB(0x6380b298), + XdB(0x69f80e9a), XdB(0x70dafda8), XdB(0x78307d76), XdB(0x7fffffff), +}; + diff --git a/android/jni/tremolo/framing.c b/android/jni/tremolo/framing.c new file mode 100644 index 00000000..d565c049 --- /dev/null +++ b/android/jni/tremolo/framing.c @@ -0,0 +1,1118 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: decode Ogg streams back into raw packets + + note: The CRC code is directly derived from public domain code by + Ross Williams (ross@guest.adelaide.edu.au). See docs/framing.html + for details. + + ********************************************************************/ + +#include +#include +#include "ogg.h" +#include "misc.h" + + +/* A complete description of Ogg framing exists in docs/framing.html */ + +/* basic, centralized Ogg memory management based on linked lists of + references to refcounted memory buffers. References and buffers + are both recycled. Buffers are passed around and consumed in + reference form. */ + +static ogg_buffer_state *ogg_buffer_create(void){ + ogg_buffer_state *bs=_ogg_calloc(1,sizeof(*bs)); + return bs; +} + +/* destruction is 'lazy'; there may be memory references outstanding, + and yanking the buffer state out from underneath would be + antisocial. Dealloc what is currently unused and have + _release_one watch for the stragglers to come in. When they do, + finish destruction. */ + +/* call the helper while holding lock */ +static void _ogg_buffer_destroy(ogg_buffer_state *bs){ + ogg_buffer *bt; + ogg_reference *rt; + + if(bs->shutdown){ + + bt=bs->unused_buffers; + rt=bs->unused_references; + + while(bt){ + ogg_buffer *b=bt; + bt=b->ptr.next; + if(b->data)_ogg_free(b->data); + _ogg_free(b); + } + bs->unused_buffers=0; + while(rt){ + ogg_reference *r=rt; + rt=r->next; + _ogg_free(r); + } + bs->unused_references=0; + + if(!bs->outstanding) + _ogg_free(bs); + + } +} + +static void ogg_buffer_destroy(ogg_buffer_state *bs){ + bs->shutdown=1; + _ogg_buffer_destroy(bs); +} + +static ogg_buffer *_fetch_buffer(ogg_buffer_state *bs,long bytes){ + ogg_buffer *ob; + bs->outstanding++; + + /* do we have an unused buffer sitting in the pool? */ + if(bs->unused_buffers){ + ob=bs->unused_buffers; + bs->unused_buffers=ob->ptr.next; + + /* if the unused buffer is too small, grow it */ + if(ob->sizedata=_ogg_realloc(ob->data,bytes); + ob->size=bytes; + } + }else{ + /* allocate a new buffer */ + ob=_ogg_malloc(sizeof(*ob)); + ob->data=_ogg_malloc(bytes<16?16:bytes); + ob->size=bytes; + } + + ob->refcount=1; + ob->ptr.owner=bs; + return ob; +} + +static ogg_reference *_fetch_ref(ogg_buffer_state *bs){ + ogg_reference *or; + bs->outstanding++; + + /* do we have an unused reference sitting in the pool? */ + if(bs->unused_references){ + or=bs->unused_references; + bs->unused_references=or->next; + }else{ + /* allocate a new reference */ + or=_ogg_malloc(sizeof(*or)); + } + + or->begin=0; + or->length=0; + or->next=0; + return or; +} + +/* fetch a reference pointing to a fresh, initially continguous buffer + of at least [bytes] length */ +static ogg_reference *ogg_buffer_alloc(ogg_buffer_state *bs,long bytes){ + ogg_buffer *ob=_fetch_buffer(bs,bytes); + ogg_reference *or=_fetch_ref(bs); + or->buffer=ob; + return or; +} + +/* enlarge the data buffer in the current link */ +static void ogg_buffer_realloc(ogg_reference *or,long bytes){ + ogg_buffer *ob=or->buffer; + + /* if the unused buffer is too small, grow it */ + if(ob->sizedata=_ogg_realloc(ob->data,bytes); + ob->size=bytes; + } +} + +static void _ogg_buffer_mark_one(ogg_reference *or){ + or->buffer->refcount++; +} + +/* increase the refcount of the buffers to which the reference points */ +static void ogg_buffer_mark(ogg_reference *or){ + while(or){ + _ogg_buffer_mark_one(or); + or=or->next; + } +} + +/* duplicate a reference (pointing to the same actual buffer memory) + and increment buffer refcount. If the desired segment is zero + length, a zero length ref is returned. */ +static ogg_reference *ogg_buffer_sub(ogg_reference *or,long length){ + ogg_reference *ret=0,*head=0; + + /* duplicate the reference chain; increment refcounts */ + while(or && length){ + ogg_reference *temp=_fetch_ref(or->buffer->ptr.owner); + if(head) + head->next=temp; + else + ret=temp; + head=temp; + head->buffer=or->buffer; + head->begin=or->begin; + head->length=length; + if(head->length>or->length) + head->length=or->length; + + length-=head->length; + or=or->next; + } + + ogg_buffer_mark(ret); + return ret; +} + +ogg_reference *ogg_buffer_dup(ogg_reference *or){ + ogg_reference *ret=0,*head=0; + /* duplicate the reference chain; increment refcounts */ + while(or){ + ogg_reference *temp=_fetch_ref(or->buffer->ptr.owner); + if(head) + head->next=temp; + else + ret=temp; + head=temp; + head->buffer=or->buffer; + head->begin=or->begin; + head->length=or->length; + or=or->next; + } + + ogg_buffer_mark(ret); + return ret; +} + +/* split a reference into two references; 'return' is a reference to + the buffer preceeding pos and 'head'/'tail' are the buffer past the + split. If pos is at or past the end of the passed in segment, + 'head/tail' are NULL */ +static ogg_reference *ogg_buffer_split(ogg_reference **tail, + ogg_reference **head,long pos){ + + /* walk past any preceeding fragments to one of: + a) the exact boundary that seps two fragments + b) the fragment that needs split somewhere in the middle */ + ogg_reference *ret=*tail; + ogg_reference *or=*tail; + + while(or && pos>or->length){ + pos-=or->length; + or=or->next; + } + + if(!or || pos==0){ + + return 0; + + }else{ + + if(pos>=or->length){ + /* exact split, or off the end? */ + if(or->next){ + + /* a split */ + *tail=or->next; + or->next=0; + + }else{ + + /* off or at the end */ + *tail=*head=0; + + } + }else{ + + /* split within a fragment */ + long lengthA=pos; + long beginB=or->begin+pos; + long lengthB=or->length-pos; + + /* make a new reference to tail the second piece */ + *tail=_fetch_ref(or->buffer->ptr.owner); + + (*tail)->buffer=or->buffer; + (*tail)->begin=beginB; + (*tail)->length=lengthB; + (*tail)->next=or->next; + _ogg_buffer_mark_one(*tail); + if(head && or==*head)*head=*tail; + + /* update the first piece */ + or->next=0; + or->length=lengthA; + + } + } + return ret; +} + +static void ogg_buffer_release_one(ogg_reference *or){ + ogg_buffer *ob=or->buffer; + ogg_buffer_state *bs=ob->ptr.owner; + + ob->refcount--; + if(ob->refcount==0){ + bs->outstanding--; /* for the returned buffer */ + ob->ptr.next=bs->unused_buffers; + bs->unused_buffers=ob; + } + + bs->outstanding--; /* for the returned reference */ + or->next=bs->unused_references; + bs->unused_references=or; + + _ogg_buffer_destroy(bs); /* lazy cleanup (if needed) */ + +} + +/* release the references, decrease the refcounts of buffers to which + they point, release any buffers with a refcount that drops to zero */ +static void ogg_buffer_release(ogg_reference *or){ + while(or){ + ogg_reference *next=or->next; + ogg_buffer_release_one(or); + or=next; + } +} + +static ogg_reference *ogg_buffer_pretruncate(ogg_reference *or,long pos){ + /* release preceeding fragments we don't want */ + while(or && pos>=or->length){ + ogg_reference *next=or->next; + pos-=or->length; + ogg_buffer_release_one(or); + or=next; + } + if (or) { + or->begin+=pos; + or->length-=pos; + } + return or; +} + +static ogg_reference *ogg_buffer_walk(ogg_reference *or){ + if(!or)return NULL; + while(or->next){ + or=or->next; + } + return(or); +} + +/* *head is appended to the front end (head) of *tail; both continue to + be valid pointers, with *tail at the tail and *head at the head */ +static ogg_reference *ogg_buffer_cat(ogg_reference *tail, ogg_reference *head){ + if(!tail)return head; + + while(tail->next){ + tail=tail->next; + } + tail->next=head; + return ogg_buffer_walk(head); +} + +static void _positionB(oggbyte_buffer *b,int pos){ + if(pospos){ + /* start at beginning, scan forward */ + b->ref=b->baseref; + b->pos=0; + b->end=b->pos+b->ref->length; + b->ptr=b->ref->buffer->data+b->ref->begin; + } +} + +static void _positionF(oggbyte_buffer *b,int pos){ + /* scan forward for position */ + while(pos>=b->end){ + /* just seek forward */ + b->pos+=b->ref->length; + b->ref=b->ref->next; + b->end=b->ref->length+b->pos; + b->ptr=b->ref->buffer->data+b->ref->begin; + } +} + +static int oggbyte_init(oggbyte_buffer *b,ogg_reference *or){ + memset(b,0,sizeof(*b)); + if(or){ + b->ref=b->baseref=or; + b->pos=0; + b->end=b->ref->length; + b->ptr=b->ref->buffer->data+b->ref->begin; + return 0; + }else + return -1; +} + +static void oggbyte_set4(oggbyte_buffer *b,ogg_uint32_t val,int pos){ + int i; + _positionB(b,pos); + for(i=0;i<4;i++){ + _positionF(b,pos); + b->ptr[pos-b->pos]=val; + val>>=8; + ++pos; + } +} + +static unsigned char oggbyte_read1(oggbyte_buffer *b,int pos){ + _positionB(b,pos); + _positionF(b,pos); + return b->ptr[pos-b->pos]; +} + +static ogg_uint32_t oggbyte_read4(oggbyte_buffer *b,int pos){ + ogg_uint32_t ret; + _positionB(b,pos); + _positionF(b,pos); + ret=b->ptr[pos-b->pos]; + _positionF(b,++pos); + ret|=b->ptr[pos-b->pos]<<8; + _positionF(b,++pos); + ret|=b->ptr[pos-b->pos]<<16; + _positionF(b,++pos); + ret|=b->ptr[pos-b->pos]<<24; + return ret; +} + +static ogg_int64_t oggbyte_read8(oggbyte_buffer *b,int pos){ + ogg_int64_t ret; + unsigned char t[7]; + int i; + _positionB(b,pos); + for(i=0;i<7;i++){ + _positionF(b,pos); + t[i]=b->ptr[pos++ -b->pos]; + } + + _positionF(b,pos); + ret=b->ptr[pos-b->pos]; + + for(i=6;i>=0;--i) + ret= ret<<8 | t[i]; + + return ret; +} + +/* Now we get to the actual framing code */ + +int ogg_page_version(ogg_page *og){ + oggbyte_buffer ob; + if(oggbyte_init(&ob,og->header))return -1; + return oggbyte_read1(&ob,4); +} + +int ogg_page_continued(ogg_page *og){ + oggbyte_buffer ob; + if(oggbyte_init(&ob,og->header))return -1; + return oggbyte_read1(&ob,5)&0x01; +} + +int ogg_page_bos(ogg_page *og){ + oggbyte_buffer ob; + if(oggbyte_init(&ob,og->header))return -1; + return oggbyte_read1(&ob,5)&0x02; +} + +int ogg_page_eos(ogg_page *og){ + oggbyte_buffer ob; + if(oggbyte_init(&ob,og->header))return -1; + return oggbyte_read1(&ob,5)&0x04; +} + +ogg_int64_t ogg_page_granulepos(ogg_page *og){ + oggbyte_buffer ob; + if(oggbyte_init(&ob,og->header))return -1; + return oggbyte_read8(&ob,6); +} + +ogg_uint32_t ogg_page_serialno(ogg_page *og){ + oggbyte_buffer ob; + if(oggbyte_init(&ob,og->header)) return 0xffffffffUL; + return oggbyte_read4(&ob,14); +} + +ogg_uint32_t ogg_page_pageno(ogg_page *og){ + oggbyte_buffer ob; + if(oggbyte_init(&ob,og->header))return 0xffffffffUL; + return oggbyte_read4(&ob,18); +} + +/* returns the number of packets that are completed on this page (if + the leading packet is begun on a previous page, but ends on this + page, it's counted */ + +/* NOTE: +If a page consists of a packet begun on a previous page, and a new +packet begun (but not completed) on this page, the return will be: + ogg_page_packets(page) ==1, + ogg_page_continued(page) !=0 + +If a page happens to be a single packet that was begun on a +previous page, and spans to the next page (in the case of a three or +more page packet), the return will be: + ogg_page_packets(page) ==0, + ogg_page_continued(page) !=0 +*/ + +int ogg_page_packets(ogg_page *og){ + int i; + int n; + int count=0; + oggbyte_buffer ob; + oggbyte_init(&ob,og->header); + + n=oggbyte_read1(&ob,26); + for(i=0;ibufferpool=ogg_buffer_create(); + return oy; +} + +int ogg_sync_destroy(ogg_sync_state *oy){ + if(oy){ + ogg_sync_reset(oy); + ogg_buffer_destroy(oy->bufferpool); + memset(oy,0,sizeof(*oy)); + _ogg_free(oy); + } + return OGG_SUCCESS; +} + +unsigned char *ogg_sync_bufferin(ogg_sync_state *oy, long bytes){ + + /* [allocate and] expose a buffer for data submission. + + If there is no head fragment + allocate one and expose it + else + if the current head fragment has sufficient unused space + expose it + else + if the current head fragment is unused + resize and expose it + else + allocate new fragment and expose it + */ + + /* base case; fifo uninitialized */ + if(!oy->fifo_head){ + oy->fifo_head=oy->fifo_tail=ogg_buffer_alloc(oy->bufferpool,bytes); + return oy->fifo_head->buffer->data; + } + + /* space left in current fragment case */ + if(oy->fifo_head->buffer->size- + oy->fifo_head->length- + oy->fifo_head->begin >= bytes) + return oy->fifo_head->buffer->data+ + oy->fifo_head->length+oy->fifo_head->begin; + + /* current fragment is unused, but too small */ + if(!oy->fifo_head->length){ + ogg_buffer_realloc(oy->fifo_head,bytes); + return oy->fifo_head->buffer->data+oy->fifo_head->begin; + } + + /* current fragment used/full; get new fragment */ + { + ogg_reference *new=ogg_buffer_alloc(oy->bufferpool,bytes); + oy->fifo_head->next=new; + oy->fifo_head=new; + } + return oy->fifo_head->buffer->data; +} + +int ogg_sync_wrote(ogg_sync_state *oy, long bytes){ + if(!oy->fifo_head)return OGG_EINVAL; + if(oy->fifo_head->buffer->size-oy->fifo_head->length-oy->fifo_head->begin < + bytes)return OGG_EINVAL; + oy->fifo_head->length+=bytes; + oy->fifo_fill+=bytes; + return OGG_SUCCESS; +} + +#ifdef ONLY_C +static ogg_uint32_t _checksum(ogg_reference *or, int bytes){ + ogg_uint32_t crc_reg=0; + int j,post; + + while(or){ + unsigned char *data=or->buffer->data+or->begin; + post=(byteslength?bytes:or->length); + for(j=0;j> 24)&0xff)^data[j]]; + bytes-=j; + or=or->next; + } + + return crc_reg; +} +#endif + +/* sync the stream. This is meant to be useful for finding page + boundaries. + + return values for this: + -n) skipped n bytes + 0) page not ready; more data (no bytes skipped) + n) page synced at current location; page length n bytes + +*/ + +long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){ + oggbyte_buffer page; + long bytes,ret=0; + + ogg_page_release(og); + + bytes=oy->fifo_fill; + oggbyte_init(&page,oy->fifo_tail); + + if(oy->headerbytes==0){ + if(bytes<27)goto sync_out; /* not enough for even a minimal header */ + + /* verify capture pattern */ + if(oggbyte_read1(&page,0)!=(int)'O' || + oggbyte_read1(&page,1)!=(int)'g' || + oggbyte_read1(&page,2)!=(int)'g' || + oggbyte_read1(&page,3)!=(int)'S' ) goto sync_fail; + + oy->headerbytes=oggbyte_read1(&page,26)+27; + } + if(bytesheaderbytes)goto sync_out; /* not enough for header + + seg table */ + if(oy->bodybytes==0){ + int i; + /* count up body length in the segment table */ + for(i=0;iheaderbytes-27;i++) + oy->bodybytes+=oggbyte_read1(&page,27+i); + } + + if(oy->bodybytes+oy->headerbytes>bytes)goto sync_out; + + /* we have what appears to be a complete page; last test: verify + checksum */ + { + ogg_uint32_t chksum=oggbyte_read4(&page,22); + oggbyte_set4(&page,0,22); + + /* Compare checksums; memory continues to be common access */ + if(chksum!=_checksum(oy->fifo_tail,oy->bodybytes+oy->headerbytes)){ + + /* D'oh. Mismatch! Corrupt page (or miscapture and not a page + at all). replace the computed checksum with the one actually + read in; remember all the memory is common access */ + + oggbyte_set4(&page,chksum,22); + goto sync_fail; + } + oggbyte_set4(&page,chksum,22); + } + + /* We have a page. Set up page return. */ + if(og){ + /* set up page output */ + og->header=ogg_buffer_split(&oy->fifo_tail,&oy->fifo_head,oy->headerbytes); + og->header_len=oy->headerbytes; + og->body=ogg_buffer_split(&oy->fifo_tail,&oy->fifo_head,oy->bodybytes); + og->body_len=oy->bodybytes; + }else{ + /* simply advance */ + oy->fifo_tail= + ogg_buffer_pretruncate(oy->fifo_tail,oy->headerbytes+oy->bodybytes); + if(!oy->fifo_tail)oy->fifo_head=0; + } + + ret=oy->headerbytes+oy->bodybytes; + oy->unsynced=0; + oy->headerbytes=0; + oy->bodybytes=0; + oy->fifo_fill-=ret; + + return ret; + + sync_fail: + + oy->headerbytes=0; + oy->bodybytes=0; + oy->fifo_tail=ogg_buffer_pretruncate(oy->fifo_tail,1); + ret--; + + /* search forward through fragments for possible capture */ + while(oy->fifo_tail){ + /* invariant: fifo_cursor points to a position in fifo_tail */ + unsigned char *now=oy->fifo_tail->buffer->data+oy->fifo_tail->begin; + unsigned char *next=memchr(now, 'O', oy->fifo_tail->length); + + if(next){ + /* possible capture in this segment */ + long bytes=next-now; + oy->fifo_tail=ogg_buffer_pretruncate(oy->fifo_tail,bytes); + ret-=bytes; + break; + }else{ + /* no capture. advance to next segment */ + long bytes=oy->fifo_tail->length; + ret-=bytes; + oy->fifo_tail=ogg_buffer_pretruncate(oy->fifo_tail,bytes); + } + } + if(!oy->fifo_tail)oy->fifo_head=0; + oy->fifo_fill+=ret; + + sync_out: + return ret; +} + +/* sync the stream and get a page. Keep trying until we find a page. + Supress 'sync errors' after reporting the first. + + return values: + OGG_HOLE) recapture (hole in data) + 0) need more data + 1) page returned + + Returns pointers into buffered data; invalidated by next call to + _stream, _clear, _init, or _buffer */ + +int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og){ + + /* all we need to do is verify a page at the head of the stream + buffer. If it doesn't verify, we look for the next potential + frame */ + + while(1){ + long ret=ogg_sync_pageseek(oy,og); + if(ret>0){ + /* have a page */ + return 1; + } + if(ret==0){ + /* need more data */ + return 0; + } + + /* head did not start a synced page... skipped some bytes */ + if(!oy->unsynced){ + oy->unsynced=1; + return OGG_HOLE; + } + + /* loop. keep looking */ + + } +} + +/* clear things to an initial state. Good to call, eg, before seeking */ +int ogg_sync_reset(ogg_sync_state *oy){ + + ogg_buffer_release(oy->fifo_tail); + oy->fifo_tail=0; + oy->fifo_head=0; + oy->fifo_fill=0; + + oy->unsynced=0; + oy->headerbytes=0; + oy->bodybytes=0; + return OGG_SUCCESS; +} + +ogg_stream_state *ogg_stream_create(int serialno){ + ogg_stream_state *os=_ogg_calloc(1,sizeof(*os)); + os->serialno=serialno; + os->pageno=-1; + return os; +} + +int ogg_stream_destroy(ogg_stream_state *os){ + if(os){ + ogg_buffer_release(os->header_tail); + ogg_buffer_release(os->body_tail); + memset(os,0,sizeof(*os)); + _ogg_free(os); + } + return OGG_SUCCESS; +} + + +#define FINFLAG 0x80000000UL +#define FINMASK 0x7fffffffUL + +static void _next_lace(oggbyte_buffer *ob,ogg_stream_state *os){ + /* search ahead one lace */ + os->body_fill_next=0; + while(os->laceptrlacing_fill){ + int val=oggbyte_read1(ob,27+os->laceptr++); + os->body_fill_next+=val; + if(val<255){ + os->body_fill_next|=FINFLAG; + os->clearflag=1; + break; + } + } +} + +static void _span_queued_page(ogg_stream_state *os){ + while( !(os->body_fill&FINFLAG) ){ + + if(!os->header_tail)break; + + /* first flush out preceeding page header (if any). Body is + flushed as it's consumed, so that's not done here. */ + + if(os->lacing_fill>=0) + os->header_tail=ogg_buffer_pretruncate(os->header_tail, + os->lacing_fill+27); + os->lacing_fill=0; + os->laceptr=0; + os->clearflag=0; + + if(!os->header_tail){ + os->header_head=0; + break; + }else{ + + /* process/prepare next page, if any */ + + long pageno; + oggbyte_buffer ob; + ogg_page og; /* only for parsing header values */ + og.header=os->header_tail; /* only for parsing header values */ + pageno=ogg_page_pageno(&og); + + oggbyte_init(&ob,os->header_tail); + os->lacing_fill=oggbyte_read1(&ob,26); + + /* are we in sequence? */ + if(pageno!=os->pageno){ + if(os->pageno==-1) /* indicates seek or reset */ + os->holeflag=1; /* set for internal use */ + else + os->holeflag=2; /* set for external reporting */ + + os->body_tail=ogg_buffer_pretruncate(os->body_tail, + os->body_fill); + if(os->body_tail==0)os->body_head=0; + os->body_fill=0; + + } + + if(ogg_page_continued(&og)){ + if(os->body_fill==0){ + /* continued packet, but no preceeding data to continue */ + /* dump the first partial packet on the page */ + _next_lace(&ob,os); + os->body_tail= + ogg_buffer_pretruncate(os->body_tail,os->body_fill_next&FINMASK); + if(os->body_tail==0)os->body_head=0; + /* set span flag */ + if(!os->spanflag && !os->holeflag)os->spanflag=2; + } + }else{ + if(os->body_fill>0){ + /* preceeding data to continue, but not a continued page */ + /* dump body_fill */ + os->body_tail=ogg_buffer_pretruncate(os->body_tail, + os->body_fill); + if(os->body_tail==0)os->body_head=0; + os->body_fill=0; + + /* set espan flag */ + if(!os->spanflag && !os->holeflag)os->spanflag=2; + } + } + + if(os->laceptrlacing_fill){ + os->granulepos=ogg_page_granulepos(&og); + + /* get current packet size & flag */ + _next_lace(&ob,os); + os->body_fill+=os->body_fill_next; /* addition handles the flag fine; + unsigned on purpose */ + /* ...and next packet size & flag */ + _next_lace(&ob,os); + + } + + os->pageno=pageno+1; + os->e_o_s=ogg_page_eos(&og); + os->b_o_s=ogg_page_bos(&og); + + } + } +} + +/* add the incoming page to the stream state; we decompose the page + into packet segments here as well. */ + +int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){ + + int serialno=ogg_page_serialno(og); + int version=ogg_page_version(og); + + /* check the serial number */ + if(serialno!=os->serialno){ + ogg_page_release(og); + return OGG_ESERIAL; + } + if(version>0){ + ogg_page_release(og); + return OGG_EVERSION; + } + + /* add to fifos */ + if(!os->body_tail){ + os->body_tail=og->body; + os->body_head=ogg_buffer_walk(og->body); + }else{ + os->body_head=ogg_buffer_cat(os->body_head,og->body); + } + if(!os->header_tail){ + os->header_tail=og->header; + os->header_head=ogg_buffer_walk(og->header); + os->lacing_fill=-27; + }else{ + os->header_head=ogg_buffer_cat(os->header_head,og->header); + } + + memset(og,0,sizeof(*og)); + return OGG_SUCCESS; +} + +int ogg_stream_reset(ogg_stream_state *os){ + + ogg_buffer_release(os->header_tail); + ogg_buffer_release(os->body_tail); + os->header_tail=os->header_head=0; + os->body_tail=os->body_head=0; + + os->e_o_s=0; + os->b_o_s=0; + os->pageno=-1; + os->packetno=0; + os->granulepos=0; + + os->body_fill=0; + os->lacing_fill=0; + + os->holeflag=0; + os->spanflag=0; + os->clearflag=0; + os->laceptr=0; + os->body_fill_next=0; + + return OGG_SUCCESS; +} + +int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno){ + ogg_stream_reset(os); + os->serialno=serialno; + return OGG_SUCCESS; +} + +static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){ + + ogg_packet_release(op); + _span_queued_page(os); + + if(os->holeflag){ + int temp=os->holeflag; + if(os->clearflag) + os->holeflag=0; + else + os->holeflag=1; + if(temp==2){ + os->packetno++; + return OGG_HOLE; + } + } + if(os->spanflag){ + int temp=os->spanflag; + if(os->clearflag) + os->spanflag=0; + else + os->spanflag=1; + if(temp==2){ + os->packetno++; + return OGG_SPAN; + } + } + + if(!(os->body_fill&FINFLAG)) return 0; + if(!op && !adv)return 1; /* just using peek as an inexpensive way + to ask if there's a whole packet + waiting */ + if(op){ + op->b_o_s=os->b_o_s; + if(os->e_o_s && os->body_fill_next==0) + op->e_o_s=os->e_o_s; + else + op->e_o_s=0; + if( (os->body_fill&FINFLAG) && !(os->body_fill_next&FINFLAG) ) + op->granulepos=os->granulepos; + else + op->granulepos=-1; + op->packetno=os->packetno; + } + + if(adv){ + oggbyte_buffer ob; + oggbyte_init(&ob,os->header_tail); + + /* split the body contents off */ + if(op){ + op->packet=ogg_buffer_split(&os->body_tail,&os->body_head, + os->body_fill&FINMASK); + op->bytes=os->body_fill&FINMASK; + }else{ + os->body_tail=ogg_buffer_pretruncate(os->body_tail, + os->body_fill&FINMASK); + if(os->body_tail==0)os->body_head=0; + } + + /* update lacing pointers */ + os->body_fill=os->body_fill_next; + _next_lace(&ob,os); + }else{ + if(op){ + op->packet=ogg_buffer_sub(os->body_tail,os->body_fill&FINMASK); + op->bytes=os->body_fill&FINMASK; + } + } + + if(adv){ + os->packetno++; + os->b_o_s=0; + } + + return 1; +} + +int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){ + return _packetout(os,op,1); +} + +int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){ + return _packetout(os,op,0); +} + +int ogg_packet_release(ogg_packet *op) { + if(op){ + ogg_buffer_release(op->packet); + memset(op, 0, sizeof(*op)); + } + return OGG_SUCCESS; +} + +int ogg_page_release(ogg_page *og) { + if(og){ + ogg_buffer_release(og->header); + ogg_buffer_release(og->body); + memset(og, 0, sizeof(*og)); + } + return OGG_SUCCESS; +} + +void ogg_page_dup(ogg_page *dup,ogg_page *orig){ + dup->header_len=orig->header_len; + dup->body_len=orig->body_len; + dup->header=ogg_buffer_dup(orig->header); + dup->body=ogg_buffer_dup(orig->body); +} + diff --git a/android/jni/tremolo/info.c b/android/jni/tremolo/info.c new file mode 100644 index 00000000..be5df496 --- /dev/null +++ b/android/jni/tremolo/info.c @@ -0,0 +1,348 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: maintain the info structure, info <-> header packets + + ********************************************************************/ + +/* general handling of the header and the vorbis_info structure (and + substructures) */ + +#include +#include +#include +#include "ogg.h" +#include "ivorbiscodec.h" +#include "codec_internal.h" +#include "codebook.h" +#include "misc.h" +#include "os.h" + +/* helpers */ +static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){ + while(bytes--){ + *buf++=oggpack_read(o,8); + } +} + +void vorbis_comment_init(vorbis_comment *vc){ + memset(vc,0,sizeof(*vc)); +} + +/* This is more or less the same as strncasecmp - but that doesn't exist + * everywhere, and this is a fairly trivial function, so we include it */ +static int tagcompare(const char *s1, const char *s2, int n){ + int c=0; + while(c < n){ + if(toupper(s1[c]) != toupper(s2[c])) + return !0; + c++; + } + return 0; +} + +char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count){ + long i; + int found = 0; + int taglen = strlen(tag)+1; /* +1 for the = we append */ + char *fulltag = (char *)alloca(taglen+ 1); + + strcpy(fulltag, tag); + strcat(fulltag, "="); + + for(i=0;icomments;i++){ + if(!tagcompare(vc->user_comments[i], fulltag, taglen)){ + if(count == found) + /* We return a pointer to the data, not a copy */ + return vc->user_comments[i] + taglen; + else + found++; + } + } + return NULL; /* didn't find anything */ +} + +int vorbis_comment_query_count(vorbis_comment *vc, char *tag){ + int i,count=0; + int taglen = strlen(tag)+1; /* +1 for the = we append */ + char *fulltag = (char *)alloca(taglen+1); + strcpy(fulltag,tag); + strcat(fulltag, "="); + + for(i=0;icomments;i++){ + if(!tagcompare(vc->user_comments[i], fulltag, taglen)) + count++; + } + + return count; +} + +void vorbis_comment_clear(vorbis_comment *vc){ + if(vc){ + long i; + for(i=0;icomments;i++) + if(vc->user_comments[i])_ogg_free(vc->user_comments[i]); + if(vc->user_comments)_ogg_free(vc->user_comments); + if(vc->comment_lengths)_ogg_free(vc->comment_lengths); + if(vc->vendor)_ogg_free(vc->vendor); + } + memset(vc,0,sizeof(*vc)); +} + +/* blocksize 0 is guaranteed to be short, 1 is guarantted to be long. + They may be equal, but short will never ge greater than long */ +int vorbis_info_blocksize(vorbis_info *vi,int zo){ + codec_setup_info *ci = (codec_setup_info *)vi->codec_setup; + return ci ? ci->blocksizes[zo] : -1; +} + +/* used by synthesis, which has a full, alloced vi */ +void vorbis_info_init(vorbis_info *vi){ + memset(vi,0,sizeof(*vi)); + vi->codec_setup=(codec_setup_info *)_ogg_calloc(1,sizeof(codec_setup_info)); +} + +void vorbis_info_clear(vorbis_info *vi){ + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + int i; + + if(ci){ + + if(ci->mode_param)_ogg_free(ci->mode_param); + + if(ci->map_param){ + for(i=0;imaps;i++) /* unpack does the range checking */ + mapping_clear_info(ci->map_param+i); + _ogg_free(ci->map_param); + } + + if(ci->floor_param){ + for(i=0;ifloors;i++) /* unpack does the range checking */ + if(ci->floor_type[i]) + floor1_free_info(ci->floor_param[i]); + else + floor0_free_info(ci->floor_param[i]); + _ogg_free(ci->floor_param); + _ogg_free(ci->floor_type); + } + + if(ci->residue_param){ + for(i=0;iresidues;i++) /* unpack does the range checking */ + res_clear_info(ci->residue_param+i); + _ogg_free(ci->residue_param); + } + + if(ci->book_param){ + for(i=0;ibooks;i++) + vorbis_book_clear(ci->book_param+i); + _ogg_free(ci->book_param); + } + + _ogg_free(ci); + } + + memset(vi,0,sizeof(*vi)); +} + +/* Header packing/unpacking ********************************************/ + +static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){ + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + if(!ci)return(OV_EFAULT); + + vi->version=oggpack_read(opb,32); + if(vi->version!=0)return(OV_EVERSION); + + vi->channels=oggpack_read(opb,8); + vi->rate=oggpack_read(opb,32); + + vi->bitrate_upper=oggpack_read(opb,32); + vi->bitrate_nominal=oggpack_read(opb,32); + vi->bitrate_lower=oggpack_read(opb,32); + + ci->blocksizes[0]=1<blocksizes[1]=1<rate>=64000 || ci->blocksizes[1]>4096)goto err_out; +#else + if(vi->rate<64000 && ci->blocksizes[1]>4096)goto err_out; +#endif + + if(vi->rate<1)goto err_out; + if(vi->channels<1)goto err_out; + if(ci->blocksizes[0]<64)goto err_out; + if(ci->blocksizes[1]blocksizes[0])goto err_out; + if(ci->blocksizes[1]>8192)goto err_out; + + if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */ + + return(0); + err_out: + vorbis_info_clear(vi); + return(OV_EBADHEADER); +} + +static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){ + int i; + int vendorlen=oggpack_read(opb,32); + if(vendorlen<0)goto err_out; + vc->vendor=(char *)_ogg_calloc(vendorlen+1,1); + _v_readstring(opb,vc->vendor,vendorlen); + vc->comments=oggpack_read(opb,32); + if(vc->comments<0)goto err_out; + vc->user_comments=(char **)_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments)); + vc->comment_lengths=(int *)_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths)); + + for(i=0;icomments;i++){ + int len=oggpack_read(opb,32); + if(len<0)goto err_out; + vc->comment_lengths[i]=len; + vc->user_comments[i]=(char *)_ogg_calloc(len+1,1); + _v_readstring(opb,vc->user_comments[i],len); + } + if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */ + + return(0); + err_out: + vorbis_comment_clear(vc); + return(OV_EBADHEADER); +} + +/* all of the real encoding details are here. The modes, books, + everything */ +static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){ + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + int i; + if(!ci)return(OV_EFAULT); + + /* codebooks */ + ci->books=oggpack_read(opb,8)+1; + ci->book_param=(codebook *)_ogg_calloc(ci->books,sizeof(*ci->book_param)); + for(i=0;ibooks;i++) + if(vorbis_book_unpack(opb,ci->book_param+i))goto err_out; + + /* time backend settings, not actually used */ + i=oggpack_read(opb,6); + for(;i>=0;i--) + if(oggpack_read(opb,16)!=0)goto err_out; + + /* floor backend settings */ + ci->floors=oggpack_read(opb,6)+1; + ci->floor_param=_ogg_malloc(sizeof(*ci->floor_param)*ci->floors); + ci->floor_type=_ogg_malloc(sizeof(*ci->floor_type)*ci->floors); + for(i=0;ifloors;i++){ + ci->floor_type[i]=oggpack_read(opb,16); + if(ci->floor_type[i]<0 || ci->floor_type[i]>=VI_FLOORB)goto err_out; + if(ci->floor_type[i]) + ci->floor_param[i]=floor1_info_unpack(vi,opb); + else + ci->floor_param[i]=floor0_info_unpack(vi,opb); + if(!ci->floor_param[i])goto err_out; + } + + /* residue backend settings */ + ci->residues=oggpack_read(opb,6)+1; + ci->residue_param=_ogg_malloc(sizeof(*ci->residue_param)*ci->residues); + for(i=0;iresidues;i++) + if(res_unpack(ci->residue_param+i,vi,opb))goto err_out; + + /* map backend settings */ + ci->maps=oggpack_read(opb,6)+1; + ci->map_param=_ogg_malloc(sizeof(*ci->map_param)*ci->maps); + for(i=0;imaps;i++){ + if(oggpack_read(opb,16)!=0)goto err_out; + if(mapping_info_unpack(ci->map_param+i,vi,opb))goto err_out; + } + + /* mode settings */ + ci->modes=oggpack_read(opb,6)+1; + ci->mode_param= + (vorbis_info_mode *)_ogg_malloc(ci->modes*sizeof(*ci->mode_param)); + for(i=0;imodes;i++){ + ci->mode_param[i].blockflag=oggpack_read(opb,1); + if(oggpack_read(opb,16))goto err_out; + if(oggpack_read(opb,16))goto err_out; + ci->mode_param[i].mapping=oggpack_read(opb,8); + if(ci->mode_param[i].mapping>=ci->maps)goto err_out; + } + + if(oggpack_read(opb,1)!=1)goto err_out; /* top level EOP check */ + + return(0); + err_out: + vorbis_info_clear(vi); + return(OV_EBADHEADER); +} + +/* The Vorbis header is in three packets; the initial small packet in + the first page that identifies basic parameters, a second packet + with bitstream comments and a third packet that holds the + codebook. */ + +int vorbis_dsp_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){ + oggpack_buffer opb; + + if(op){ + oggpack_readinit(&opb,op->packet); + + /* Which of the three types of header is this? */ + /* Also verify header-ness, vorbis */ + { + char buffer[6]; + int packtype=oggpack_read(&opb,8); + memset(buffer,0,6); + _v_readstring(&opb,buffer,6); + if(memcmp(buffer,"vorbis",6)){ + /* not a vorbis header */ + return(OV_ENOTVORBIS); + } + switch(packtype){ + case 0x01: /* least significant *bit* is read first */ + if(!op->b_o_s){ + /* Not the initial packet */ + return(OV_EBADHEADER); + } + if(vi->rate!=0){ + /* previously initialized info header */ + return(OV_EBADHEADER); + } + + return(_vorbis_unpack_info(vi,&opb)); + + case 0x03: /* least significant *bit* is read first */ + if(vi->rate==0){ + /* um... we didn't get the initial header */ + return(OV_EBADHEADER); + } + + return(_vorbis_unpack_comment(vc,&opb)); + + case 0x05: /* least significant *bit* is read first */ + if(vi->rate==0 || vc->vendor==NULL){ + /* um... we didn;t get the initial header or comments yet */ + return(OV_EBADHEADER); + } + + return(_vorbis_unpack_books(vi,&opb)); + + default: + /* Not a valid vorbis header type */ + return(OV_EBADHEADER); + break; + } + } + } + return(OV_EBADHEADER); +} + diff --git a/android/jni/tremolo/ivorbiscodec.h b/android/jni/tremolo/ivorbiscodec.h new file mode 100644 index 00000000..0eea9eb8 --- /dev/null +++ b/android/jni/tremolo/ivorbiscodec.h @@ -0,0 +1,104 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: libvorbis codec headers + + ********************************************************************/ + +#ifndef _vorbis_codec_h_ +#define _vorbis_codec_h_ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#include "ogg.h" + +struct vorbis_dsp_state; +typedef struct vorbis_dsp_state vorbis_dsp_state; + +typedef struct vorbis_info{ + int version; + int channels; + long rate; + + /* The below bitrate declarations are *hints*. + Combinations of the three values carry the following implications: + + all three set to the same value: + implies a fixed rate bitstream + only nominal set: + implies a VBR stream that averages the nominal bitrate. No hard + upper/lower limit + upper and or lower set: + implies a VBR bitstream that obeys the bitrate limits. nominal + may also be set to give a nominal rate. + none set: + the coder does not care to speculate. + */ + + long bitrate_upper; + long bitrate_nominal; + long bitrate_lower; + long bitrate_window; + + void *codec_setup; +} vorbis_info; + +typedef struct vorbis_comment{ + char **user_comments; + int *comment_lengths; + int comments; + char *vendor; + +} vorbis_comment; + + +/* Vorbis PRIMITIVES: general ***************************************/ + +extern void vorbis_info_init(vorbis_info *vi); +extern void vorbis_info_clear(vorbis_info *vi); +extern int vorbis_info_blocksize(vorbis_info *vi,int zo); +extern void vorbis_comment_init(vorbis_comment *vc); +extern void vorbis_comment_add(vorbis_comment *vc, char *comment); +extern void vorbis_comment_add_tag(vorbis_comment *vc, + char *tag, char *contents); +extern char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count); +extern int vorbis_comment_query_count(vorbis_comment *vc, char *tag); +extern void vorbis_comment_clear(vorbis_comment *vc); + +/* Vorbis ERRORS and return codes ***********************************/ + +#define OV_FALSE -1 +#define OV_EOF -2 +#define OV_HOLE -3 + +#define OV_EREAD -128 +#define OV_EFAULT -129 +#define OV_EIMPL -130 +#define OV_EINVAL -131 +#define OV_ENOTVORBIS -132 +#define OV_EBADHEADER -133 +#define OV_EVERSION -134 +#define OV_ENOTAUDIO -135 +#define OV_EBADPACKET -136 +#define OV_EBADLINK -137 +#define OV_ENOSEEK -138 + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif + diff --git a/android/jni/tremolo/ivorbisfile.h b/android/jni/tremolo/ivorbisfile.h new file mode 100644 index 00000000..7ebc0427 --- /dev/null +++ b/android/jni/tremolo/ivorbisfile.h @@ -0,0 +1,122 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: stdio-based convenience library for opening/seeking/decoding + + ********************************************************************/ + +#ifndef _OV_FILE_H_ +#define _OV_FILE_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#include +#include "ivorbiscodec.h" + +/* The function prototypes for the callbacks are basically the same as for + * the stdio functions fread, fseek, fclose, ftell. + * The one difference is that the FILE * arguments have been replaced with + * a void * - this is to be used as a pointer to whatever internal data these + * functions might need. In the stdio case, it's just a FILE * cast to a void * + * + * If you use other functions, check the docs for these functions and return + * the right values. For seek_func(), you *MUST* return -1 if the stream is + * unseekable + */ +typedef struct { + size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource); + int (*seek_func) (void *datasource, ogg_int64_t offset, int whence); + int (*close_func) (void *datasource); + long (*tell_func) (void *datasource); +} ov_callbacks; + +typedef struct OggVorbis_File { + void *datasource; /* Pointer to a FILE *, etc. */ + int seekable; + ogg_int64_t offset; + ogg_int64_t end; + ogg_sync_state *oy; + + /* If the FILE handle isn't seekable (eg, a pipe), only the current + stream appears */ + int links; + ogg_int64_t *offsets; + ogg_int64_t *dataoffsets; + ogg_uint32_t *serialnos; + ogg_int64_t *pcmlengths; + vorbis_info vi; + vorbis_comment vc; + + /* Decoding working state local storage */ + ogg_int64_t pcm_offset; + int ready_state; + ogg_uint32_t current_serialno; + int current_link; + + ogg_int64_t bittrack; + ogg_int64_t samptrack; + + ogg_stream_state *os; /* take physical pages, weld into a logical + stream of packets */ + vorbis_dsp_state *vd; /* central working state for the packet->PCM decoder */ + + ov_callbacks callbacks; + +} OggVorbis_File; + +extern int ov_clear(OggVorbis_File *vf); +extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); +extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf, + char *initial, long ibytes, ov_callbacks callbacks); + +extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); +extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf, + char *initial, long ibytes, ov_callbacks callbacks); +extern int ov_test_open(OggVorbis_File *vf); + +extern long ov_bitrate(OggVorbis_File *vf,int i); +extern long ov_bitrate_instant(OggVorbis_File *vf); +extern long ov_streams(OggVorbis_File *vf); +extern long ov_seekable(OggVorbis_File *vf); +extern long ov_serialnumber(OggVorbis_File *vf,int i); + +extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i); +extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i); +extern ogg_int64_t ov_time_total(OggVorbis_File *vf,int i); + +extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos); +extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos); +extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos); +extern int ov_time_seek(OggVorbis_File *vf,ogg_int64_t pos); +extern int ov_time_seek_page(OggVorbis_File *vf,ogg_int64_t pos); + +extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf); +extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf); +extern ogg_int64_t ov_time_tell(OggVorbis_File *vf); + +extern vorbis_info *ov_info(OggVorbis_File *vf,int link); +extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link); + +extern long ov_read(OggVorbis_File *vf,void *buffer,int length, + int *bitstream); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif + + diff --git a/android/jni/tremolo/ivorbisfile_example.c b/android/jni/tremolo/ivorbisfile_example.c new file mode 100644 index 00000000..c99cfd25 --- /dev/null +++ b/android/jni/tremolo/ivorbisfile_example.c @@ -0,0 +1,86 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: simple example decoder using vorbisidec + + ********************************************************************/ + +/* Takes a vorbis bitstream from stdin and writes raw stereo PCM to + stdout using vorbisfile. Using vorbisfile is much simpler than + dealing with libvorbis. */ + +#include +#include +#include "ivorbiscodec.h" +#include "ivorbisfile.h" + +#ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */ +#include +#include +#endif + +char pcmout[4096]; /* take 4k out of the data segment, not the stack */ + +int main(){ + OggVorbis_File vf; + int eof=0; + int current_section; + +#ifdef _WIN32 /* We need to set stdin/stdout to binary mode. Damn windows. */ + /* Beware the evil ifdef. We avoid these where we can, but this one we + cannot. Don't add any more, you'll probably go to hell if you do. */ + _setmode( _fileno( stdin ), _O_BINARY ); + _setmode( _fileno( stdout ), _O_BINARY ); +#endif + + if(ov_open(stdin, &vf, NULL, 0) < 0) { + fprintf(stderr,"Input does not appear to be an Ogg bitstream.\n"); + exit(1); + } + + /* Throw the comments plus a few lines about the bitstream we're + decoding */ + { + char **ptr=ov_comment(&vf,-1)->user_comments; + vorbis_info *vi=ov_info(&vf,-1); + while(*ptr){ + fprintf(stderr,"%s\n",*ptr); + ++ptr; + } + fprintf(stderr,"\nBitstream is %d channel, %ldHz\n",vi->channels,vi->rate); + fprintf(stderr,"\nDecoded length: %ld samples\n", + (long)ov_pcm_total(&vf,-1)); + fprintf(stderr,"Encoded by: %s\n\n",ov_comment(&vf,-1)->vendor); + } + + while(!eof){ + long ret=ov_read(&vf,pcmout,sizeof(pcmout),¤t_section); + if (ret == 0) { + /* EOF */ + eof=1; + } else if (ret < 0) { + /* error in the stream. Not a problem, just reporting it in + case we (the app) cares. In this case, we don't. */ + } else { + /* we don't bother dealing with sample rate changes, etc, but + you'll have to*/ + fwrite(pcmout,1,ret,stdout); + } + } + + /* cleanup */ + ov_clear(&vf); + + fprintf(stderr,"Done.\n"); + return(0); +} diff --git a/android/jni/tremolo/lsp_lookup.h b/android/jni/tremolo/lsp_lookup.h new file mode 100644 index 00000000..72c7581a --- /dev/null +++ b/android/jni/tremolo/lsp_lookup.h @@ -0,0 +1,108 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: lookup data + + ********************************************************************/ + +#ifndef _V_LOOKUP_DATA_H_ +#define _V_LOOKUP_DATA_H_ + +#include "os_types.h" + +#define INVSQ_LOOKUP_I_SHIFT 10 +#define INVSQ_LOOKUP_I_MASK 1023 +static const long INVSQ_LOOKUP_I[64+1]={ + 92682, 91966, 91267, 90583, + 89915, 89261, 88621, 87995, + 87381, 86781, 86192, 85616, + 85051, 84497, 83953, 83420, + 82897, 82384, 81880, 81385, + 80899, 80422, 79953, 79492, + 79039, 78594, 78156, 77726, + 77302, 76885, 76475, 76072, + 75674, 75283, 74898, 74519, + 74146, 73778, 73415, 73058, + 72706, 72359, 72016, 71679, + 71347, 71019, 70695, 70376, + 70061, 69750, 69444, 69141, + 68842, 68548, 68256, 67969, + 67685, 67405, 67128, 66855, + 66585, 66318, 66054, 65794, + 65536, +}; + +static const long INVSQ_LOOKUP_IDel[64]={ + 716, 699, 684, 668, + 654, 640, 626, 614, + 600, 589, 576, 565, + 554, 544, 533, 523, + 513, 504, 495, 486, + 477, 469, 461, 453, + 445, 438, 430, 424, + 417, 410, 403, 398, + 391, 385, 379, 373, + 368, 363, 357, 352, + 347, 343, 337, 332, + 328, 324, 319, 315, + 311, 306, 303, 299, + 294, 292, 287, 284, + 280, 277, 273, 270, + 267, 264, 260, 258, +}; + +#define COS_LOOKUP_I_SHIFT 9 +#define COS_LOOKUP_I_MASK 511 +#define COS_LOOKUP_I_SZ 128 +static const ogg_int32_t COS_LOOKUP_I[COS_LOOKUP_I_SZ+1]={ + 16384, 16379, 16364, 16340, + 16305, 16261, 16207, 16143, + 16069, 15986, 15893, 15791, + 15679, 15557, 15426, 15286, + 15137, 14978, 14811, 14635, + 14449, 14256, 14053, 13842, + 13623, 13395, 13160, 12916, + 12665, 12406, 12140, 11866, + 11585, 11297, 11003, 10702, + 10394, 10080, 9760, 9434, + 9102, 8765, 8423, 8076, + 7723, 7366, 7005, 6639, + 6270, 5897, 5520, 5139, + 4756, 4370, 3981, 3590, + 3196, 2801, 2404, 2006, + 1606, 1205, 804, 402, + 0, -401, -803, -1204, + -1605, -2005, -2403, -2800, + -3195, -3589, -3980, -4369, + -4755, -5138, -5519, -5896, + -6269, -6638, -7004, -7365, + -7722, -8075, -8422, -8764, + -9101, -9433, -9759, -10079, + -10393, -10701, -11002, -11296, + -11584, -11865, -12139, -12405, + -12664, -12915, -13159, -13394, + -13622, -13841, -14052, -14255, + -14448, -14634, -14810, -14977, + -15136, -15285, -15425, -15556, + -15678, -15790, -15892, -15985, + -16068, -16142, -16206, -16260, + -16304, -16339, -16363, -16378, + -16383, +}; + +#endif + + + + + diff --git a/android/jni/tremolo/mapping0.c b/android/jni/tremolo/mapping0.c new file mode 100644 index 00000000..23e3b8e9 --- /dev/null +++ b/android/jni/tremolo/mapping0.c @@ -0,0 +1,241 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: channel mapping 0 implementation + + ********************************************************************/ + +#include +#include +#include +#include +#include "ogg.h" +#include "os.h" +#include "ivorbiscodec.h" +#include "mdct.h" +#include "codec_internal.h" +#include "codebook.h" +#include "misc.h" + +void mapping_clear_info(vorbis_info_mapping *info){ + if(info){ + if(info->chmuxlist)_ogg_free(info->chmuxlist); + if(info->submaplist)_ogg_free(info->submaplist); + if(info->coupling)_ogg_free(info->coupling); + memset(info,0,sizeof(*info)); + } +} + +static int ilog(unsigned int v){ + int ret=0; + if(v)--v; + while(v){ + ret++; + v>>=1; + } + return(ret); +} + +/* also responsible for range checking */ +int mapping_info_unpack(vorbis_info_mapping *info,vorbis_info *vi, + oggpack_buffer *opb){ + int i; + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + memset(info,0,sizeof(*info)); + + if(oggpack_read(opb,1)) + info->submaps=oggpack_read(opb,4)+1; + else + info->submaps=1; + + if(oggpack_read(opb,1)){ + info->coupling_steps=oggpack_read(opb,8)+1; + info->coupling= + _ogg_malloc(info->coupling_steps*sizeof(*info->coupling)); + + for(i=0;icoupling_steps;i++){ + int testM=info->coupling[i].mag=oggpack_read(opb,ilog(vi->channels)); + int testA=info->coupling[i].ang=oggpack_read(opb,ilog(vi->channels)); + + if(testM<0 || + testA<0 || + testM==testA || + testM>=vi->channels || + testA>=vi->channels) goto err_out; + } + + } + + if(oggpack_read(opb,2)>0)goto err_out; /* 2,3:reserved */ + + if(info->submaps>1){ + info->chmuxlist=_ogg_malloc(sizeof(*info->chmuxlist)*vi->channels); + for(i=0;ichannels;i++){ + info->chmuxlist[i]=oggpack_read(opb,4); + if(info->chmuxlist[i]>=info->submaps)goto err_out; + } + } + + info->submaplist=_ogg_malloc(sizeof(*info->submaplist)*info->submaps); + for(i=0;isubmaps;i++){ + int temp=oggpack_read(opb,8); + info->submaplist[i].floor=oggpack_read(opb,8); + if(info->submaplist[i].floor>=ci->floors)goto err_out; + info->submaplist[i].residue=oggpack_read(opb,8); + if(info->submaplist[i].residue>=ci->residues)goto err_out; + } + + return 0; + + err_out: + mapping_clear_info(info); + return -1; +} + +int mapping_inverse(vorbis_dsp_state *vd,vorbis_info_mapping *info){ + vorbis_info *vi=vd->vi; + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + + int i,j; + long n=ci->blocksizes[vd->W]; + + ogg_int32_t **pcmbundle= + alloca(sizeof(*pcmbundle)*vi->channels); + int *zerobundle= + alloca(sizeof(*zerobundle)*vi->channels); + int *nonzero= + alloca(sizeof(*nonzero)*vi->channels); + ogg_int32_t **floormemo= + alloca(sizeof(*floormemo)*vi->channels); + + /* recover the spectral envelope; store it in the PCM vector for now */ + for(i=0;ichannels;i++){ + int submap=0; + int floorno; + + if(info->submaps>1) + submap=info->chmuxlist[i]; + floorno=info->submaplist[submap].floor; + + if(ci->floor_type[floorno]){ + /* floor 1 */ + floormemo[i]=alloca(sizeof(*floormemo[i])* + floor1_memosize(ci->floor_param[floorno])); + floormemo[i]=floor1_inverse1(vd,ci->floor_param[floorno],floormemo[i]); + }else{ + /* floor 0 */ + floormemo[i]=alloca(sizeof(*floormemo[i])* + floor0_memosize(ci->floor_param[floorno])); + floormemo[i]=floor0_inverse1(vd,ci->floor_param[floorno],floormemo[i]); + } + + if(floormemo[i]) + nonzero[i]=1; + else + nonzero[i]=0; + memset(vd->work[i],0,sizeof(*vd->work[i])*n/2); + } + + /* channel coupling can 'dirty' the nonzero listing */ + for(i=0;icoupling_steps;i++){ + if(nonzero[info->coupling[i].mag] || + nonzero[info->coupling[i].ang]){ + nonzero[info->coupling[i].mag]=1; + nonzero[info->coupling[i].ang]=1; + } + } + + /* recover the residue into our working vectors */ + for(i=0;isubmaps;i++){ + int ch_in_bundle=0; + for(j=0;jchannels;j++){ + if(!info->chmuxlist || info->chmuxlist[j]==i){ + if(nonzero[j]) + zerobundle[ch_in_bundle]=1; + else + zerobundle[ch_in_bundle]=0; + pcmbundle[ch_in_bundle++]=vd->work[j]; + } + } + + res_inverse(vd,ci->residue_param+info->submaplist[i].residue, + pcmbundle,zerobundle,ch_in_bundle); + } + + //for(j=0;jchannels;j++) + //_analysis_output("coupled",seq+j,vb->pcm[j],-8,n/2,0,0); + + /* channel coupling */ + for(i=info->coupling_steps-1;i>=0;i--){ + ogg_int32_t *pcmM=vd->work[info->coupling[i].mag]; + ogg_int32_t *pcmA=vd->work[info->coupling[i].ang]; + + for(j=0;j0) + if(ang>0){ + pcmM[j]=mag; + pcmA[j]=mag-ang; + }else{ + pcmA[j]=mag; + pcmM[j]=mag+ang; + } + else + if(ang>0){ + pcmM[j]=mag; + pcmA[j]=mag+ang; + }else{ + pcmA[j]=mag; + pcmM[j]=mag-ang; + } + } + } + + //for(j=0;jchannels;j++) + //_analysis_output("residue",seq+j,vb->pcm[j],-8,n/2,0,0); + + /* compute and apply spectral envelope */ + for(i=0;ichannels;i++){ + ogg_int32_t *pcm=vd->work[i]; + int submap=0; + int floorno; + + if(info->submaps>1) + submap=info->chmuxlist[i]; + floorno=info->submaplist[submap].floor; + + if(ci->floor_type[floorno]){ + /* floor 1 */ + floor1_inverse2(vd,ci->floor_param[floorno],floormemo[i],pcm); + }else{ + /* floor 0 */ + floor0_inverse2(vd,ci->floor_param[floorno],floormemo[i],pcm); + } + } + + //for(j=0;jchannels;j++) + //_analysis_output("mdct",seq+j,vb->pcm[j],-24,n/2,0,1); + + /* transform the PCM data; takes PCM vector, vb; modifies PCM vector */ + /* only MDCT right now.... */ + for(i=0;ichannels;i++) + mdct_backward(n,vd->work[i]); + + //for(j=0;jchannels;j++) + //_analysis_output("imdct",seq+j,vb->pcm[j],-24,n,0,0); + + /* all done! */ + return(0); +} diff --git a/android/jni/tremolo/mdct.c b/android/jni/tremolo/mdct.c new file mode 100644 index 00000000..450819b9 --- /dev/null +++ b/android/jni/tremolo/mdct.c @@ -0,0 +1,562 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: normalized modified discrete cosine transform + power of two length transform only [64 <= n ] + last mod: $Id: mdct.c,v 1.9.6.5 2003/04/29 04:03:27 xiphmont Exp $ + + Original algorithm adapted long ago from _The use of multirate filter + banks for coding of high quality digital audio_, by T. Sporer, + K. Brandenburg and B. Edler, collection of the European Signal + Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp + 211-214 + + The below code implements an algorithm that no longer looks much like + that presented in the paper, but the basic structure remains if you + dig deep enough to see it. + + This module DOES NOT INCLUDE code to generate/apply the window + function. Everybody has their own weird favorite including me... I + happen to like the properties of y=sin(.5PI*sin^2(x)), but others may + vehemently disagree. + + ********************************************************************/ + +#include "ivorbiscodec.h" +#include "os.h" +#include "misc.h" +#include "mdct.h" +#include "mdct_lookup.h" + +#include + +#if defined(ONLY_C) +STIN void presymmetry(DATA_TYPE *in,int n2,int step){ + DATA_TYPE *aX; + DATA_TYPE *bX; + LOOKUP_T *T; + int n4=n2>>1; + + aX = in+n2-3; + T = sincos_lookup0; + + do{ + REG_TYPE s0= aX[0]; + REG_TYPE s2= aX[2]; + XPROD31( s0, s2, T[0], T[1], &aX[0], &aX[2] ); T+=step; + aX-=4; + }while(aX>=in+n4); + do{ + REG_TYPE s0= aX[0]; + REG_TYPE s2= aX[2]; + XPROD31( s0, s2, T[1], T[0], &aX[0], &aX[2] ); T-=step; + aX-=4; + }while(aX>=in); + + aX = in+n2-4; + bX = in; + T = sincos_lookup0; + do{ + REG_TYPE ri0= aX[0]; + REG_TYPE ri2= aX[2]; + REG_TYPE ro0= bX[0]; + REG_TYPE ro2= bX[2]; + + XNPROD31( ro2, ro0, T[1], T[0], &aX[0], &aX[2] ); T+=step; + XNPROD31( ri2, ri0, T[0], T[1], &bX[0], &bX[2] ); + + aX-=4; + bX+=4; + }while(aX>=bX); +} + +/* 8 point butterfly (in place) */ +STIN void mdct_butterfly_8(DATA_TYPE *x){ + + REG_TYPE s0 = x[0] + x[1]; + REG_TYPE s1 = x[0] - x[1]; + REG_TYPE s2 = x[2] + x[3]; + REG_TYPE s3 = x[2] - x[3]; + REG_TYPE s4 = x[4] + x[5]; + REG_TYPE s5 = x[4] - x[5]; + REG_TYPE s6 = x[6] + x[7]; + REG_TYPE s7 = x[6] - x[7]; + + x[0] = s5 + s3; + x[1] = s7 - s1; + x[2] = s5 - s3; + x[3] = s7 + s1; + x[4] = s4 - s0; + x[5] = s6 - s2; + x[6] = s4 + s0; + x[7] = s6 + s2; + MB(); +} + +/* 16 point butterfly (in place, 4 register) */ +STIN void mdct_butterfly_16(DATA_TYPE *x){ + + REG_TYPE s0, s1, s2, s3; + + s0 = x[ 8] - x[ 9]; x[ 8] += x[ 9]; + s1 = x[10] - x[11]; x[10] += x[11]; + s2 = x[ 1] - x[ 0]; x[ 9] = x[ 1] + x[0]; + s3 = x[ 3] - x[ 2]; x[11] = x[ 3] + x[2]; + x[ 0] = MULT31((s0 - s1) , cPI2_8); + x[ 1] = MULT31((s2 + s3) , cPI2_8); + x[ 2] = MULT31((s0 + s1) , cPI2_8); + x[ 3] = MULT31((s3 - s2) , cPI2_8); + MB(); + + s2 = x[12] - x[13]; x[12] += x[13]; + s3 = x[14] - x[15]; x[14] += x[15]; + s0 = x[ 4] - x[ 5]; x[13] = x[ 5] + x[ 4]; + s1 = x[ 7] - x[ 6]; x[15] = x[ 7] + x[ 6]; + x[ 4] = s2; x[ 5] = s1; + x[ 6] = s3; x[ 7] = s0; + MB(); + + mdct_butterfly_8(x); + mdct_butterfly_8(x+8); +} + +/* 32 point butterfly (in place, 4 register) */ +STIN void mdct_butterfly_32(DATA_TYPE *x){ + + REG_TYPE s0, s1, s2, s3; + + s0 = x[16] - x[17]; x[16] += x[17]; + s1 = x[18] - x[19]; x[18] += x[19]; + s2 = x[ 1] - x[ 0]; x[17] = x[ 1] + x[ 0]; + s3 = x[ 3] - x[ 2]; x[19] = x[ 3] + x[ 2]; + XNPROD31( s0, s1, cPI3_8, cPI1_8, &x[ 0], &x[ 2] ); + XPROD31 ( s2, s3, cPI1_8, cPI3_8, &x[ 1], &x[ 3] ); + MB(); + + s0 = x[20] - x[21]; x[20] += x[21]; + s1 = x[22] - x[23]; x[22] += x[23]; + s2 = x[ 5] - x[ 4]; x[21] = x[ 5] + x[ 4]; + s3 = x[ 7] - x[ 6]; x[23] = x[ 7] + x[ 6]; + x[ 4] = MULT31((s0 - s1) , cPI2_8); + x[ 5] = MULT31((s3 + s2) , cPI2_8); + x[ 6] = MULT31((s0 + s1) , cPI2_8); + x[ 7] = MULT31((s3 - s2) , cPI2_8); + MB(); + + s0 = x[24] - x[25]; x[24] += x[25]; + s1 = x[26] - x[27]; x[26] += x[27]; + s2 = x[ 9] - x[ 8]; x[25] = x[ 9] + x[ 8]; + s3 = x[11] - x[10]; x[27] = x[11] + x[10]; + XNPROD31( s0, s1, cPI1_8, cPI3_8, &x[ 8], &x[10] ); + XPROD31 ( s2, s3, cPI3_8, cPI1_8, &x[ 9], &x[11] ); + MB(); + + s0 = x[28] - x[29]; x[28] += x[29]; + s1 = x[30] - x[31]; x[30] += x[31]; + s2 = x[12] - x[13]; x[29] = x[13] + x[12]; + s3 = x[15] - x[14]; x[31] = x[15] + x[14]; + x[12] = s0; x[13] = s3; + x[14] = s1; x[15] = s2; + MB(); + + mdct_butterfly_16(x); + mdct_butterfly_16(x+16); +} + +/* N/stage point generic N stage butterfly (in place, 2 register) */ +STIN void mdct_butterfly_generic(DATA_TYPE *x,int points,int step){ + LOOKUP_T *T = sincos_lookup0; + DATA_TYPE *x1 = x + points - 4; + DATA_TYPE *x2 = x + (points>>1) - 4; + REG_TYPE s0, s1, s2, s3; + + do{ + s0 = x1[0] - x1[1]; x1[0] += x1[1]; + s1 = x1[3] - x1[2]; x1[2] += x1[3]; + s2 = x2[1] - x2[0]; x1[1] = x2[1] + x2[0]; + s3 = x2[3] - x2[2]; x1[3] = x2[3] + x2[2]; + XPROD31( s1, s0, T[0], T[1], &x2[0], &x2[2] ); + XPROD31( s2, s3, T[0], T[1], &x2[1], &x2[3] ); T+=step; + x1-=4; + x2-=4; + }while(T>1) + (points>>2) - 4; + x2 = x + (points>>2) - 4; + T = sincos_lookup0+1024; + do{ + s0 = x1[0] - x1[1]; x1[0] += x1[1]; + s1 = x1[2] - x1[3]; x1[2] += x1[3]; + s2 = x2[0] - x2[1]; x1[1] = x2[1] + x2[0]; + s3 = x2[3] - x2[2]; x1[3] = x2[3] + x2[2]; + XNPROD31( s0, s1, T[0], T[1], &x2[0], &x2[2] ); + XNPROD31( s3, s2, T[0], T[1], &x2[1], &x2[3] ); T-=step; + x1-=4; + x2-=4; + }while(T>sincos_lookup0); +} + +STIN void mdct_butterflies(DATA_TYPE *x,int points,int shift){ + + int stages=7-shift; + int i,j; + + for(i=0;--stages>=0;i++){ + for(j=0;j<(1<>i)*j,points>>i,4<<(i+shift)); + } + } + + for(j=0;j>8]|(bitrev[(x&0x0f0)>>4]<<4)|(((int)bitrev[x&0x00f])<<8); +} + +STIN void mdct_bitreverse(DATA_TYPE *x,int n,int shift){ + int bit = 0; + DATA_TYPE *w = x+(n>>1); + + do{ + DATA_TYPE b = bitrev12(bit++); + DATA_TYPE *xx = x + (b>>shift); + REG_TYPE r; + + w -= 2; + + if(w>xx){ + + r = xx[0]; + xx[0] = w[0]; + w[0] = r; + + r = xx[1]; + xx[1] = w[1]; + w[1] = r; + } + }while(w>x); +} + +STIN void mdct_step7(DATA_TYPE *x,int n,int step){ + DATA_TYPE *w0 = x; + DATA_TYPE *w1 = x+(n>>1); + LOOKUP_T *T = (step>=4)?(sincos_lookup0+(step>>1)):sincos_lookup1; + LOOKUP_T *Ttop = T+1024; + REG_TYPE s0, s1, s2, s3; + + do{ + w1 -= 2; + + s0 = w0[0] + w1[0]; + s1 = w1[1] - w0[1]; + s2 = MULT32(s0, T[1]) + MULT32(s1, T[0]); + s3 = MULT32(s1, T[1]) - MULT32(s0, T[0]); + T+=step; + + s0 = (w0[1] + w1[1])>>1; + s1 = (w0[0] - w1[0])>>1; + w0[0] = s0 + s2; + w0[1] = s1 + s3; + w1[0] = s0 - s2; + w1[1] = s3 - s1; + + w0 += 2; + }while(T>1; + s1 = (w0[0] - w1[0])>>1; + w0[0] = s0 + s2; + w0[1] = s1 + s3; + w1[0] = s0 - s2; + w1[1] = s3 - s1; + + w0 += 2; + }while(w0>1); + + switch(step) { +#if defined(ONLY_C) + default: + T=(step>=4)?(sincos_lookup0+(step>>1)):sincos_lookup1; + do{ + REG_TYPE s0 = x[0]; + REG_TYPE s1 = -x[1]; + XPROD31( s0, s1, T[0], T[1], x, x+1); T+=step; + x +=2; + }while(x>1; + t1 = (*T++)>>1; + do{ + s0 = x[0]; + s1 = -x[1]; + t0 += (v0 = (*V++)>>1); + t1 += (v1 = (*V++)>>1); + XPROD31( s0, s1, t0, t1, x, x+1 ); + + s0 = x[2]; + s1 = -x[3]; + v0 += (t0 = (*T++)>>1); + v1 += (t1 = (*T++)>>1); + XPROD31( s0, s1, v0, v1, x+2, x+3 ); + + x += 4; + }while(x>2); + t1 += (q1 = (v1-t1)>>2); + s0 = x[0]; + s1 = -x[1]; + XPROD31( s0, s1, t0, t1, x, x+1 ); + t0 = v0-q0; + t1 = v1-q1; + s0 = x[2]; + s1 = -x[3]; + XPROD31( s0, s1, t0, t1, x+2, x+3 ); + + t0 = *T++; + t1 = *T++; + v0 += (q0 = (t0-v0)>>2); + v1 += (q1 = (t1-v1)>>2); + s0 = x[4]; + s1 = -x[5]; + XPROD31( s0, s1, v0, v1, x+4, x+5 ); + v0 = t0-q0; + v1 = t1-q1; + s0 = x[6]; + s1 = -x[7]; + XPROD31( s0, s1, v0, v1, x+5, x+6 ); + + x+=8; + }while(x>1,step); + mdct_butterflies(in,n>>1,shift); + mdct_bitreverse(in,n,shift); + mdct_step7(in,n,step); + mdct_step8(in,n,step>>2); +#else + step = mdct_backwardARM(n, in); + if (step < 1) + mdct_step8(in,n,step); +#endif +} + +#if defined(ONLY_C) +void mdct_shift_right(int n, DATA_TYPE *in, DATA_TYPE *right){ + int i; + n>>=2; + in+=1; + + for(i=0;i>1 : n0>>1); + DATA_TYPE *r=right+(lW ? n1>>2 : n0>>2); + DATA_TYPE *post; + LOOKUP_T *wR=(W && lW ? w1+(n1>>1) : w0+(n0>>1)); + LOOKUP_T *wL=(W && lW ? w1 : w0 ); + + int preLap=(lW && !W ? (n1>>2)-(n0>>2) : 0 ); + int halfLap=(lW && W ? (n1>>2) : (n0>>2) ); + int postLap=(!lW && W ? (n1>>2)-(n0>>2) : 0 ); + int n,off; + + /* preceeding direct-copy lapping from previous frame, if any */ + if(preLap){ + n = (endpost){ + *out = CLIP_TO_15((*--r)>>9); + out+=step; + } +#else + out = mdct_unroll_prelap(out,post,r,step); + n -= off; + if (n < 0) + n = 0; + r -= n; +#endif + } + + /* cross-lap; two halves due to wrap-around */ + n = (endpost){ + l-=2; + *out = CLIP_TO_15((MULT31(*--r,*--wR) + MULT31(*l,*wL++))>>9); + out+=step; + } +#else + out = mdct_unroll_part2(out, post, l, r, step, wL, wR); + n -= off; + if (n < 0) + n = 0; + l -= 2*n; + r -= n; + wR -= n; + wL += n; +#endif + + n = (end>9); + out+=step; + l+=2; + } +#else + out = mdct_unroll_part3(out, post, l, r, step, wL, wR); + n -= off; + if (n < 0) + n = 0; + l += 2*n; + r += n; + wR -= n; + wL += n; +#endif + + /* preceeding direct-copy lapping from previous frame, if any */ + if(postLap){ + n = (end>9); + out+=step; + l+=2; + } +#else + out = mdct_unroll_postlap(out,post,l,step); +#endif + } +} + diff --git a/android/jni/tremolo/mdct.h b/android/jni/tremolo/mdct.h new file mode 100644 index 00000000..5e865d06 --- /dev/null +++ b/android/jni/tremolo/mdct.h @@ -0,0 +1,59 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: modified discrete cosine transform prototypes + + ********************************************************************/ + +#ifndef _OGG_mdct_H_ +#define _OGG_mdct_H_ + +#include "ivorbiscodec.h" +#include "misc.h" + +#define DATA_TYPE ogg_int32_t +#define REG_TYPE register ogg_int32_t + +#ifdef _LOW_ACCURACY_ +#define cPI3_8 (0x0062) +#define cPI2_8 (0x00b5) +#define cPI1_8 (0x00ed) +#else +#define cPI3_8 (0x30fbc54d) +#define cPI2_8 (0x5a82799a) +#define cPI1_8 (0x7641af3d) +#endif + +extern void mdct_backward(int n, DATA_TYPE *in); +extern void mdct_shift_right(int n, DATA_TYPE *in, DATA_TYPE *right); +extern void mdct_unroll_lap(int n0,int n1, + int lW,int W, + DATA_TYPE *in,DATA_TYPE *right, + LOOKUP_T *w0,LOOKUP_T *w1, + ogg_int16_t *out, + int step, + int start,int end /* samples, this frame */); + +#endif + + + + + + + + + + + + diff --git a/android/jni/tremolo/mdctARM.s b/android/jni/tremolo/mdctARM.s new file mode 100644 index 00000000..b51eea73 --- /dev/null +++ b/android/jni/tremolo/mdctARM.s @@ -0,0 +1,1179 @@ + .text + + @ full accuracy version + + .global mdct_backwardARM + .global mdct_shift_right + .global mdct_unroll_prelap + .global mdct_unroll_part2 + .global mdct_unroll_part3 + .global mdct_unroll_postlap + +mdct_unroll_prelap: + @ r0 = out + @ r1 = post + @ r2 = r + @ r3 = step + STMFD r13!,{r4-r7,r14} + MVN r4, #0x8000 + MOV r3, r3, LSL #1 + SUB r1, r2, r1 @ r1 = r - post + SUBS r1, r1, #16 @ r1 = r - post - 16 + BLT unroll_over +unroll_loop: + LDMDB r2!,{r5,r6,r7,r12} + + MOV r5, r5, ASR #9 @ r5 = (*--r)>>9 + MOV r6, r6, ASR #9 @ r6 = (*--r)>>9 + MOV r7, r7, ASR #9 @ r7 = (*--r)>>9 + MOV r12,r12,ASR #9 @ r12= (*--r)>>9 + + MOV r14,r12,ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r12,r4, r14,ASR #31 + STRH r12,[r0], r3 + + MOV r14,r7, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r7, r4, r14,ASR #31 + STRH r7, [r0], r3 + + MOV r14,r6, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r6, r4, r14,ASR #31 + STRH r6, [r0], r3 + + MOV r14,r5, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r5, r4, r14,ASR #31 + STRH r5, [r0], r3 + + SUBS r1, r1, #16 + BGE unroll_loop + +unroll_over: + ADDS r1, r1, #16 + BLE unroll_end +unroll_loop2: + LDR r5,[r2,#-4]! + @ stall + @ stall (Xscale) + MOV r5, r5, ASR #9 @ r5 = (*--r)>>9 + MOV r14,r5, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r5, r4, r14,ASR #31 + STRH r5, [r0], r3 + SUBS r1, r1, #4 + BGT unroll_loop2 +unroll_end: + LDMFD r13!,{r4-r7,PC} + +mdct_unroll_postlap: + @ r0 = out + @ r1 = post + @ r2 = l + @ r3 = step + STMFD r13!,{r4-r7,r14} + MVN r4, #0x8000 + MOV r3, r3, LSL #1 + SUB r1, r1, r2 @ r1 = post - l + MOV r1, r1, ASR #1 @ r1 = (post - l)>>1 + SUBS r1, r1, #16 @ r1 = ((post - l)>>1) - 4 + BLT unroll_over3 +unroll_loop3: + LDR r12,[r2],#8 + LDR r7, [r2],#8 + LDR r6, [r2],#8 + LDR r5, [r2],#8 + + RSB r12,r12,#0 + RSB r5, r5, #0 + RSB r6, r6, #0 + RSB r7, r7, #0 + + MOV r12, r12,ASR #9 @ r12= (-*l)>>9 + MOV r5, r5, ASR #9 @ r5 = (-*l)>>9 + MOV r6, r6, ASR #9 @ r6 = (-*l)>>9 + MOV r7, r7, ASR #9 @ r7 = (-*l)>>9 + + MOV r14,r12,ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r12,r4, r14,ASR #31 + STRH r12,[r0], r3 + + MOV r14,r7, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r7, r4, r14,ASR #31 + STRH r7, [r0], r3 + + MOV r14,r6, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r6, r4, r14,ASR #31 + STRH r6, [r0], r3 + + MOV r14,r5, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r5, r4, r14,ASR #31 + STRH r5, [r0], r3 + + SUBS r1, r1, #16 + BGE unroll_loop3 + +unroll_over3: + ADDS r1, r1, #16 + BLE unroll_over4 +unroll_loop4: + LDR r5,[r2], #8 + @ stall + @ stall (Xscale) + RSB r5, r5, #0 + MOV r5, r5, ASR #9 @ r5 = (-*l)>>9 + MOV r14,r5, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r5, r4, r14,ASR #31 + STRH r5, [r0], r3 + SUBS r1, r1, #4 + BGT unroll_loop4 +unroll_over4: + LDMFD r13!,{r4-r7,PC} + +mdct_unroll_part2: + @ r0 = out + @ r1 = post + @ r2 = l + @ r3 = r + @ <> = step + @ <> = wL + @ <> = wR + MOV r12,r13 + STMFD r13!,{r4,r6-r11,r14} + LDMFD r12,{r8,r9,r10} @ r8 = step + @ r9 = wL + @ r10= wR + MVN r4, #0x8000 + MOV r8, r8, LSL #1 + SUBS r1, r3, r1 @ r1 = (r - post) + BLE unroll_over5 +unroll_loop5: + LDR r12,[r2, #-8]! @ r12= *l (but l -= 2 first) + LDR r11,[r9],#4 @ r11= *wL++ + LDR r7, [r3, #-4]! @ r7 = *--r + LDR r6, [r10,#-4]! @ r6 = *--wR + + @ Can save a cycle here, at the cost of 1bit errors in rounding + SMULL r14,r11,r12,r11 @ (r14,r11) = *l * *wL++ + SMULL r14,r6, r7, r6 @ (r14,r6) = *--r * *--wR + ADD r6, r6, r11 + MOV r6, r6, ASR #8 + MOV r14,r6, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r6, r4, r14,ASR #31 + STRH r6, [r0], r8 + + SUBS r1, r1, #4 + BGT unroll_loop5 + +unroll_over5: + LDMFD r13!,{r4,r6-r11,PC} + +mdct_unroll_part3: + @ r0 = out + @ r1 = post + @ r2 = l + @ r3 = r + @ <> = step + @ <> = wL + @ <> = wR + MOV r12,r13 + STMFD r13!,{r4,r6-r11,r14} + LDMFD r12,{r8,r9,r10} @ r8 = step + @ r9 = wL + @ r10= wR + MVN r4, #0x8000 + MOV r8, r8, LSL #1 + SUBS r1, r1, r3 @ r1 = (post - r) + BLE unroll_over6 +unroll_loop6: + LDR r12,[r2],#8 @ r12= *l (but l += 2 first) + LDR r11,[r9],#4 @ r11= *wL++ + LDR r7, [r3],#4 @ r7 = *r++ + LDR r6, [r10,#-4]! @ r6 = *--wR + + @ Can save a cycle here, at the cost of 1bit errors in rounding + SMULL r14,r11,r12,r11 @ (r14,r11) = *l * *wL++ + SMULL r14,r6, r7, r6 @ (r14,r6) = *--r * *--wR + SUB r6, r6, r11 + MOV r6, r6, ASR #8 + MOV r14,r6, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r6, r4, r14,ASR #31 + STRH r6, [r0], r8 + + SUBS r1, r1, #4 + BGT unroll_loop6 + +unroll_over6: + LDMFD r13!,{r4,r6-r11,PC} + +mdct_shift_right: + @ r0 = n + @ r1 = in + @ r2 = right + STMFD r13!,{r4-r11,r14} + + MOV r0, r0, LSR #2 @ n >>= 2 + ADD r1, r1, #4 + + SUBS r0, r0, #8 + BLT sr_less_than_8 +sr_loop: + LDR r3, [r1], #8 + LDR r4, [r1], #8 + LDR r5, [r1], #8 + LDR r6, [r1], #8 + LDR r7, [r1], #8 + LDR r8, [r1], #8 + LDR r12,[r1], #8 + LDR r14,[r1], #8 + SUBS r0, r0, #8 + STMIA r2!,{r3,r4,r5,r6,r7,r8,r12,r14} + BGE sr_loop +sr_less_than_8: + ADDS r0, r0, #8 + BEQ sr_end +sr_loop2: + LDR r3, [r1], #8 + SUBS r0, r0, #1 + STR r3, [r2], #4 + BGT sr_loop2 +sr_end: + LDMFD r13!,{r4-r11,PC} + +mdct_backwardARM: + @ r0 = n + @ r1 = in + STMFD r13!,{r4-r11,r14} + + MOV r2,#1<<4 @ r2 = 1<>1) + ADD r14,r1, r0 @ r14= in+(n>>2) + SUB r4, r4, #3*4 @ r4 = aX = in+n2-3 + LDR r5, =sincos_lookup0 @ r5 = T=sincos_lookup0 + +presymmetry_loop1: + LDR r7, [r4,#8] @ r6 = s2 = aX[2] + LDR r11,[r5,#4] @ r11= T[1] + LDR r6, [r4] @ r6 = s0 = aX[0] + LDR r10,[r5],r2,LSL #2 @ r10= T[0] T += step + + @ XPROD31(s0, s2, T[0], T[1], &aX[0], &ax[2]) + SMULL r8, r9, r7, r11 @ (r8, r9) = s2*T[1] + @ stall + @ stall ? + SMLAL r8, r9, r6, r10 @ (r8, r9) += s0*T[0] + RSB r6, r6, #0 + @ stall ? + SMULL r8, r12,r7, r10 @ (r8, r12) = s2*T[0] + MOV r9, r9, LSL #1 + @ stall ? + SMLAL r8, r12,r6, r11 @ (r8, r12) -= s0*T[1] + STR r9, [r4],#-16 @ aX[0] = r9 + CMP r4,r14 + MOV r12,r12,LSL #1 + STR r12,[r4,#8+16] @ aX[2] = r12 + + BGE presymmetry_loop1 @ while (aX >= in+n4) + +presymmetry_loop2: + LDR r6,[r4] @ r6 = s0 = aX[0] + LDR r10,[r5,#4] @ r10= T[1] + LDR r7,[r4,#8] @ r6 = s2 = aX[2] + LDR r11,[r5],-r2,LSL #2 @ r11= T[0] T -= step + + @ XPROD31(s0, s2, T[1], T[0], &aX[0], &ax[2]) + SMULL r8, r9, r6, r10 @ (r8, r9) = s0*T[1] + @ stall + @ stall ? + SMLAL r8, r9, r7, r11 @ (r8, r9) += s2*T[0] + RSB r6, r6, #0 + @ stall ? + SMULL r8, r12,r7, r10 @ (r8, r12) = s2*T[1] + MOV r9, r9, LSL #1 + @ stall ? + SMLAL r8, r12,r6, r11 @ (r8, r12) -= s0*T[0] + STR r9, [r4],#-16 @ aX[0] = r9 + CMP r4,r1 + MOV r12,r12,LSL #1 + STR r12,[r4,#8+16] @ aX[2] = r12 + + BGE presymmetry_loop2 @ while (aX >= in) + + @ r0 = n + @ r1 = in + @ r2 = step + @ r3 = shift + STMFD r13!,{r3} + LDR r5, =sincos_lookup0 @ r5 = T=sincos_lookup0 + ADD r4, r1, r0, LSL #1 @ r4 = aX = in+(n>>1) + SUB r4, r4, #4*4 @ r4 = aX = in+(n>>1)-4 + LDR r11,[r5,#4] @ r11= T[1] + LDR r10,[r5],r2, LSL #2 @ r10= T[0] T += step +presymmetry_loop3: + LDR r8,[r1],#16 @ r8 = ro0 = bX[0] + LDR r9,[r1,#8-16] @ r9 = ro2 = bX[2] + LDR r6,[r4] @ r6 = ri0 = aX[0] + + @ XNPROD31( ro2, ro0, T[1], T[0], &aX[0], &aX[2] ) + @ aX[0] = (ro2*T[1] - ro0*T[0])>>31 aX[2] = (ro0*T[1] + ro2*T[0])>>31 + SMULL r14,r12,r8, r11 @ (r14,r12) = ro0*T[1] + RSB r8,r8,#0 @ r8 = -ro0 + @ Stall ? + SMLAL r14,r12,r9, r10 @ (r14,r12) += ro2*T[0] + LDR r7,[r4,#8] @ r7 = ri2 = aX[2] + @ Stall ? + SMULL r14,r3, r9, r11 @ (r14,r3) = ro2*T[1] + MOV r12,r12,LSL #1 + LDR r11,[r5,#4] @ r11= T[1] + SMLAL r14,r3, r8, r10 @ (r14,r3) -= ro0*T[0] + LDR r10,[r5],r2, LSL #2 @ r10= T[0] T += step + STR r12,[r4,#8] + MOV r3, r3, LSL #1 + STR r3, [r4],#-16 + + @ XNPROD31( ri2, ri0, T[0], T[1], &bX[0], &bX[2] ) + @ bX[0] = (ri2*T[0] - ri0*T[1])>>31 bX[2] = (ri0*T[0] + ri2*T[1])>>31 + SMULL r14,r12,r6, r10 @ (r14,r12) = ri0*T[0] + RSB r6,r6,#0 @ r6 = -ri0 + @ stall ? + SMLAL r14,r12,r7, r11 @ (r14,r12) += ri2*T[1] + @ stall ? + @ stall ? + SMULL r14,r3, r7, r10 @ (r14,r3) = ri2*T[0] + MOV r12,r12,LSL #1 + @ stall ? + SMLAL r14,r3, r6, r11 @ (r14,r3) -= ri0*T[1] + CMP r4,r1 + STR r12,[r1,#8-16] + MOV r3, r3, LSL #1 + STR r3, [r1,#-16] + + BGE presymmetry_loop3 + + SUB r1,r1,r0 @ r1 = in -= n>>2 (i.e. restore in) + + LDR r3,[r13] + STR r2,[r13,#-4]! + + @ mdct_butterflies + @ r0 = n = (points * 2) + @ r1 = in = x + @ r2 = i + @ r3 = shift + STMFD r13!,{r0-r1} + RSBS r4,r3,#6 @ r4 = stages = 7-shift then --stages + LDR r5,=sincos_lookup0 + BLE no_generics + MOV r14,#4 @ r14= 4 (i=0) + MOV r6, r14,LSL r3 @ r6 = (4<>i = POINTS + MOV r2, r14,LSR #2 @ r2 = (1<>1) + ADD r7,r1,r0,LSL #1 @ r7 = x1+4 = x + POINTS + ADD r12,r5,#1024*4 @ r12= sincos_lookup0+1024 + +mdct_bufferfly_generic_loop1: + LDMDB r7!,{r2,r3,r8,r11} @ r2 = x1[0] + @ r3 = x1[1] + @ r8 = x1[2] + @ r11= x1[3] x1 -= 4 + LDMDB r1!,{r4,r9,r10,r14} @ r4 = x2[0] + @ r9 = x2[1] + @ r10= x2[2] + @ r14= x2[3] x2 -= 4 + + SUB r2, r2, r3 @ r2 = s0 = x1[0] - x1[1] + ADD r3, r2, r3, LSL #1 @ r3 = x1[0] + x1[1] (-> x1[0]) + SUB r11,r11,r8 @ r11= s1 = x1[3] - x1[2] + ADD r8, r11,r8, LSL #1 @ r8 = x1[3] + x1[2] (-> x1[2]) + SUB r9, r9, r4 @ r9 = s2 = x2[1] - x2[0] + ADD r4, r9, r4, LSL #1 @ r4 = x2[1] + x2[0] (-> x1[1]) + SUB r14,r14,r10 @ r14= s3 = x2[3] - x2[2] + ADD r10,r14,r10,LSL #1 @ r10= x2[3] + x2[2] (-> x1[3]) + STMIA r7,{r3,r4,r8,r10} + + @ r0 = points + @ r1 = x2 + @ r2 = s0 + @ r3 free + @ r4 free + @ r5 = T + @ r6 = step + @ r7 = x1 + @ r8 free + @ r9 = s2 + @ r10 free + @ r11= s1 + @ r12= limit + @ r14= s3 + + LDR r8, [r5,#4] @ r8 = T[1] + LDR r10,[r5],r6,LSL #2 @ r10= T[0] T += step + + @ XPROD31(s1, s0, T[0], T[1], &x2[0], &x2[2]) + @ x2[0] = (s1*T[0] + s0*T[1])>>31 x2[2] = (s0*T[0] - s1*T[1])>>31 + @ stall Xscale + SMULL r4, r3, r2, r8 @ (r4, r3) = s0*T[1] + SMLAL r4, r3, r11,r10 @ (r4, r3) += s1*T[0] + RSB r11,r11,#0 + SMULL r11,r4, r8, r11 @ (r11,r4) = -s1*T[1] + SMLAL r11,r4, r2, r10 @ (r11,r4) += s0*T[0] + MOV r2, r3, LSL #1 @ r2 = r3<<1 = Value for x2[0] + + @ XPROD31(s2, s3, T[0], T[1], &x2[1], &x2[3]) + @ x2[1] = (s2*T[0] + s3*T[1])>>31 x2[3] = (s3*T[0] - s2*T[1])>>31 + SMULL r11,r3, r9, r10 @ (r11,r3) = s2*T[0] + MOV r4, r4, LSL #1 @ r4 = r4<<1 = Value for x2[2] + SMLAL r11,r3, r14,r8 @ (r11,r3) += s3*T[1] + RSB r9, r9, #0 + SMULL r10,r11,r14,r10 @ (r10,r11) = s3*T[0] + MOV r3, r3, LSL #1 @ r3 = r3<<1 = Value for x2[1] + SMLAL r10,r11,r9,r8 @ (r10,r11) -= s2*T[1] + CMP r5, r12 + MOV r11,r11,LSL #1 @ r11= r11<<1 = Value for x2[3] + + STMIA r1,{r2,r3,r4,r11} + + BLT mdct_bufferfly_generic_loop1 + + SUB r12,r12,#1024*4 +mdct_bufferfly_generic_loop2: + LDMDB r7!,{r2,r3,r9,r10} @ r2 = x1[0] + @ r3 = x1[1] + @ r9 = x1[2] + @ r10= x1[3] x1 -= 4 + LDMDB r1!,{r4,r8,r11,r14} @ r4 = x2[0] + @ r8 = x2[1] + @ r11= x2[2] + @ r14= x2[3] x2 -= 4 + + SUB r2, r2, r3 @ r2 = s0 = x1[0] - x1[1] + ADD r3, r2, r3, LSL #1 @ r3 = x1[0] + x1[1] (-> x1[0]) + SUB r9, r9,r10 @ r9 = s1 = x1[2] - x1[3] + ADD r10,r9,r10, LSL #1 @ r10= x1[2] + x1[3] (-> x1[2]) + SUB r4, r4, r8 @ r4 = s2 = x2[0] - x2[1] + ADD r8, r4, r8, LSL #1 @ r8 = x2[0] + x2[1] (-> x1[1]) + SUB r14,r14,r11 @ r14= s3 = x2[3] - x2[2] + ADD r11,r14,r11,LSL #1 @ r11= x2[3] + x2[2] (-> x1[3]) + STMIA r7,{r3,r8,r10,r11} + + @ r0 = points + @ r1 = x2 + @ r2 = s0 + @ r3 free + @ r4 = s2 + @ r5 = T + @ r6 = step + @ r7 = x1 + @ r8 free + @ r9 = s1 + @ r10 free + @ r11 free + @ r12= limit + @ r14= s3 + + LDR r8, [r5,#4] @ r8 = T[1] + LDR r10,[r5],-r6,LSL #2 @ r10= T[0] T -= step + + @ XNPROD31(s0, s1, T[0], T[1], &x2[0], &x2[2]) + @ x2[0] = (s0*T[0] - s1*T[1])>>31 x2[2] = (s1*T[0] + s0*T[1])>>31 + @ stall Xscale + SMULL r3, r11,r2, r8 @ (r3, r11) = s0*T[1] + SMLAL r3, r11,r9, r10 @ (r3, r11) += s1*T[0] + RSB r9, r9, #0 + SMULL r3, r2, r10,r2 @ (r3, r2) = s0*T[0] + SMLAL r3, r2, r9, r8 @ (r3, r2) += -s1*T[1] + MOV r9, r11,LSL #1 @ r9 = r11<<1 = Value for x2[2] + + @ XNPROD31(s3, s2, T[0], T[1], &x2[1], &x2[3]) + @ x2[1] = (s3*T[0] - s2*T[1])>>31 x2[3] = (s2*T[0] + s3*T[1])>>31 + SMULL r3, r11,r4, r10 @ (r3,r11) = s2*T[0] + MOV r2, r2, LSL #1 @ r2 = r2<<1 = Value for x2[0] + SMLAL r3, r11,r14,r8 @ (r3,r11) += s3*T[1] + RSB r4, r4, #0 + SMULL r10,r3,r14,r10 @ (r10,r3) = s3*T[0] + MOV r11,r11,LSL #1 @ r11= r11<<1 = Value for x2[3] + SMLAL r10,r3, r4, r8 @ (r10,r3) -= s2*T[1] + CMP r5, r12 + MOV r3, r3, LSL #1 @ r3 = r3<<1 = Value for x2[1] + + STMIA r1,{r2,r3,r9,r11} + + BGT mdct_bufferfly_generic_loop2 + + LDR r2,[r13],#4 @ unstack r2 + ADD r1, r1, r0, LSL #2 @ r1 = x+POINTS*j + @ stall Xscale + SUBS r2, r2, #1 @ r2-- (j++) + BGT mdct_butterflies_loop2 + + LDMFD r13!,{r4,r14} + + LDR r1,[r13,#4] + + SUBS r4, r4, #1 @ stages-- + MOV r14,r14,LSL #1 @ r14= 4< x[16] + SUB r9, r9, r10 @ r9 = s1 = x[18] - x[19] + ADD r10,r9, r10,LSL #1 @ r10= x[18] + x[19] -> x[18] + SUB r8, r8, r7 @ r8 = s2 = x[ 1] - x[ 0] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 1] + x[ 0] -> x[17] + SUB r12,r12,r11 @ r12= s3 = x[ 3] - x[ 2] + ADD r11,r12,r11, LSL #1 @ r11= x[ 3] + x[ 2] -> x[19] + STMIA r4!,{r6,r7,r10,r11} + + LDR r6,cPI1_8 + LDR r7,cPI3_8 + + @ XNPROD31( s0, s1, cPI3_8, cPI1_8, &x[ 0], &x[ 2] ) + @ x[0] = s0*cPI3_8 - s1*cPI1_8 x[2] = s1*cPI3_8 + s0*cPI1_8 + @ stall Xscale + SMULL r14,r11,r5, r6 @ (r14,r11) = s0*cPI1_8 + SMLAL r14,r11,r9, r7 @ (r14,r11) += s1*cPI3_8 + RSB r9, r9, #0 + SMULL r14,r5, r7, r5 @ (r14,r5) = s0*cPI3_8 + SMLAL r14,r5, r9, r6 @ (r14,r5) -= s1*cPI1_8 + MOV r11,r11,LSL #1 + MOV r5, r5, LSL #1 + + @ XPROD31 ( s2, s3, cPI1_8, cPI3_8, &x[ 1], &x[ 3] ) + @ x[1] = s2*cPI1_8 + s3*cPI3_8 x[3] = s3*cPI1_8 - s2*cPI3_8 + SMULL r14,r9, r8, r6 @ (r14,r9) = s2*cPI1_8 + SMLAL r14,r9, r12,r7 @ (r14,r9) += s3*cPI3_8 + RSB r8,r8,#0 + SMULL r14,r12,r6, r12 @ (r14,r12) = s3*cPI1_8 + SMLAL r14,r12,r8, r7 @ (r14,r12) -= s2*cPI3_8 + MOV r9, r9, LSL #1 + MOV r12,r12,LSL #1 + STMIA r1!,{r5,r9,r11,r12} + + @ block2 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[20] + @ r6 = x[21] + @ r9 = x[22] + @ r10= x[23] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[4] + @ r8 = x[5] + @ r11= x[6] + @ r12= x[7] + SUB r5, r5, r6 @ r5 = s0 = x[20] - x[21] + ADD r6, r5, r6, LSL #1 @ r6 = x[20] + x[21] -> x[20] + SUB r9, r9, r10 @ r9 = s1 = x[22] - x[23] + ADD r10,r9, r10,LSL #1 @ r10= x[22] + x[23] -> x[22] + SUB r8, r8, r7 @ r8 = s2 = x[ 5] - x[ 4] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 5] + x[ 4] -> x[21] + SUB r12,r12,r11 @ r12= s3 = x[ 7] - x[ 6] + ADD r11,r12,r11, LSL #1 @ r11= x[ 7] + x[ 6] -> x[23] + LDR r14,cPI2_8 + STMIA r4!,{r6,r7,r10,r11} + + SUB r5, r5, r9 @ r5 = s0 - s1 + ADD r9, r5, r9, LSL #1 @ r9 = s0 + s1 + SMULL r6, r5, r14,r5 @ (r6,r5) = (s0-s1)*cPI2_8 + SUB r12,r12,r8 @ r12= s3 - s2 + ADD r8, r12,r8, LSL #1 @ r8 = s3 + s2 + + SMULL r6, r8, r14,r8 @ (r6,r8) = (s3+s2)*cPI2_8 + MOV r5, r5, LSL #1 + SMULL r6, r9, r14,r9 @ (r6,r9) = (s0+s1)*cPI2_8 + MOV r8, r8, LSL #1 + SMULL r6, r12,r14,r12 @ (r6,r12) = (s3-s2)*cPI2_8 + MOV r9, r9, LSL #1 + MOV r12,r12,LSL #1 + STMIA r1!,{r5,r8,r9,r12} + + @ block3 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[24] + @ r6 = x[25] + @ r9 = x[25] + @ r10= x[26] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[8] + @ r8 = x[9] + @ r11= x[10] + @ r12= x[11] + SUB r5, r5, r6 @ r5 = s0 = x[24] - x[25] + ADD r6, r5, r6, LSL #1 @ r6 = x[24] + x[25] -> x[25] + SUB r9, r9, r10 @ r9 = s1 = x[26] - x[27] + ADD r10,r9, r10,LSL #1 @ r10= x[26] + x[27] -> x[26] + SUB r8, r8, r7 @ r8 = s2 = x[ 9] - x[ 8] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 9] + x[ 8] -> x[25] + SUB r12,r12,r11 @ r12= s3 = x[11] - x[10] + ADD r11,r12,r11, LSL #1 @ r11= x[11] + x[10] -> x[27] + STMIA r4!,{r6,r7,r10,r11} + + LDR r6,cPI3_8 + LDR r7,cPI1_8 + + @ XNPROD31( s0, s1, cPI1_8, cPI3_8, &x[ 8], &x[10] ) + @ x[8] = s0*cPI1_8 - s1*cPI3_8 x[10] = s1*cPI1_8 + s0*cPI3_8 + @ stall Xscale + SMULL r14,r11,r5, r6 @ (r14,r11) = s0*cPI3_8 + SMLAL r14,r11,r9, r7 @ (r14,r11) += s1*cPI1_8 + RSB r9, r9, #0 + SMULL r14,r5, r7, r5 @ (r14,r5) = s0*cPI1_8 + SMLAL r14,r5, r9, r6 @ (r14,r5) -= s1*cPI3_8 + MOV r11,r11,LSL #1 + MOV r5, r5, LSL #1 + + @ XPROD31 ( s2, s3, cPI3_8, cPI1_8, &x[ 9], &x[11] ) + @ x[9] = s2*cPI3_8 + s3*cPI1_8 x[11] = s3*cPI3_8 - s2*cPI1_8 + SMULL r14,r9, r8, r6 @ (r14,r9) = s2*cPI3_8 + SMLAL r14,r9, r12,r7 @ (r14,r9) += s3*cPI1_8 + RSB r8,r8,#0 + SMULL r14,r12,r6, r12 @ (r14,r12) = s3*cPI3_8 + SMLAL r14,r12,r8, r7 @ (r14,r12) -= s2*cPI1_8 + MOV r9, r9, LSL #1 + MOV r12,r12,LSL #1 + STMIA r1!,{r5,r9,r11,r12} + + @ block4 + LDMIA r4,{r5,r6,r10,r11} @ r5 = x[28] + @ r6 = x[29] + @ r10= x[30] + @ r11= x[31] + LDMIA r1,{r8,r9,r12,r14} @ r8 = x[12] + @ r9 = x[13] + @ r12= x[14] + @ r14= x[15] + SUB r5, r5, r6 @ r5 = s0 = x[28] - x[29] + ADD r6, r5, r6, LSL #1 @ r6 = x[28] + x[29] -> x[28] + SUB r7, r14,r12 @ r7 = s3 = x[15] - x[14] + ADD r12,r7, r12, LSL #1 @ r12= x[15] + x[14] -> x[31] + SUB r10,r10,r11 @ r10= s1 = x[30] - x[31] + ADD r11,r10,r11,LSL #1 @ r11= x[30] + x[31] -> x[30] + SUB r14, r8, r9 @ r14= s2 = x[12] - x[13] + ADD r9, r14, r9, LSL #1 @ r9 = x[12] + x[13] -> x[29] + STMIA r4!,{r6,r9,r11,r12} + STMIA r1!,{r5,r7,r10,r14} + + @ mdct_butterfly16 (1st version) + @ block 1 + SUB r1,r1,#16*4 + ADD r4,r1,#8*4 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[ 8] + @ r6 = x[ 9] + @ r9 = x[10] + @ r10= x[11] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[0] + @ r8 = x[1] + @ r11= x[2] + @ r12= x[3] + SUB r5, r5, r6 @ r5 = s0 = x[ 8] - x[ 9] + ADD r6, r5, r6, LSL #1 @ r6 = x[ 8] + x[ 9] -> x[ 8] + SUB r9, r9, r10 @ r9 = s1 = x[10] - x[11] + ADD r10,r9, r10,LSL #1 @ r10= x[10] + x[11] -> x[10] + SUB r8, r8, r7 @ r8 = s2 = x[ 1] - x[ 0] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 1] + x[ 0] -> x[ 9] + SUB r12,r12,r11 @ r12= s3 = x[ 3] - x[ 2] + ADD r11,r12,r11, LSL #1 @ r11= x[ 3] + x[ 2] -> x[11] + LDR r14,cPI2_8 + STMIA r4!,{r6,r7,r10,r11} + + SUB r5, r5, r9 @ r5 = s0 - s1 + ADD r9, r5, r9, LSL #1 @ r9 = s0 + s1 + SMULL r6, r5, r14,r5 @ (r6,r5) = (s0-s1)*cPI2_8 + SUB r12,r12,r8 @ r12= s3 - s2 + ADD r8, r12,r8, LSL #1 @ r8 = s3 + s2 + + SMULL r6, r8, r14,r8 @ (r6,r8) = (s3+s2)*cPI2_8 + MOV r5, r5, LSL #1 + SMULL r6, r9, r14,r9 @ (r6,r9) = (s0+s1)*cPI2_8 + MOV r8, r8, LSL #1 + SMULL r6, r12,r14,r12 @ (r6,r12) = (s3-s2)*cPI2_8 + MOV r9, r9, LSL #1 + MOV r12,r12,LSL #1 + STMIA r1!,{r5,r8,r9,r12} + + @ block4 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[12] + @ r6 = x[13] + @ r9 = x[14] + @ r10= x[15] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[ 4] + @ r8 = x[ 5] + @ r11= x[ 6] + @ r12= x[ 7] + SUB r14,r7, r8 @ r14= s0 = x[ 4] - x[ 5] + ADD r8, r14,r8, LSL #1 @ r8 = x[ 4] + x[ 5] -> x[13] + SUB r7, r12,r11 @ r7 = s1 = x[ 7] - x[ 6] + ADD r11,r7, r11, LSL #1 @ r11= x[ 7] + x[ 6] -> x[15] + SUB r5, r5, r6 @ r5 = s2 = x[12] - x[13] + ADD r6, r5, r6, LSL #1 @ r6 = x[12] + x[13] -> x[12] + SUB r12,r9, r10 @ r12= s3 = x[14] - x[15] + ADD r10,r12,r10,LSL #1 @ r10= x[14] + x[15] -> x[14] + STMIA r4!,{r6,r8,r10,r11} + STMIA r1!,{r5,r7,r12,r14} + + @ mdct_butterfly_8 + LDMDB r1,{r6,r7,r8,r9,r10,r11,r12,r14} + @ r6 = x[0] + @ r7 = x[1] + @ r8 = x[2] + @ r9 = x[3] + @ r10= x[4] + @ r11= x[5] + @ r12= x[6] + @ r14= x[7] + ADD r6, r6, r7 @ r6 = s0 = x[0] + x[1] + SUB r7, r6, r7, LSL #1 @ r7 = s1 = x[0] - x[1] + ADD r8, r8, r9 @ r8 = s2 = x[2] + x[3] + SUB r9, r8, r9, LSL #1 @ r9 = s3 = x[2] - x[3] + ADD r10,r10,r11 @ r10= s4 = x[4] + x[5] + SUB r11,r10,r11,LSL #1 @ r11= s5 = x[4] - x[5] + ADD r12,r12,r14 @ r12= s6 = x[6] + x[7] + SUB r14,r12,r14,LSL #1 @ r14= s7 = x[6] - x[7] + + ADD r2, r11,r9 @ r2 = x[0] = s5 + s3 + SUB r4, r2, r9, LSL #1 @ r4 = x[2] = s5 - s3 + SUB r3, r14,r7 @ r3 = x[1] = s7 - s1 + ADD r5, r3, r7, LSL #1 @ r5 = x[3] = s7 + s1 + SUB r10,r10,r6 @ r10= x[4] = s4 - s0 + SUB r11,r12,r8 @ r11= x[5] = s6 - s2 + ADD r12,r10,r6, LSL #1 @ r12= x[6] = s4 + s0 + ADD r14,r11,r8, LSL #1 @ r14= x[7] = s6 + s2 + STMDB r1,{r2,r3,r4,r5,r10,r11,r12,r14} + + @ mdct_butterfly_8 + LDMIA r1,{r6,r7,r8,r9,r10,r11,r12,r14} + @ r6 = x[0] + @ r7 = x[1] + @ r8 = x[2] + @ r9 = x[3] + @ r10= x[4] + @ r11= x[5] + @ r12= x[6] + @ r14= x[7] + ADD r6, r6, r7 @ r6 = s0 = x[0] + x[1] + SUB r7, r6, r7, LSL #1 @ r7 = s1 = x[0] - x[1] + ADD r8, r8, r9 @ r8 = s2 = x[2] + x[3] + SUB r9, r8, r9, LSL #1 @ r9 = s3 = x[2] - x[3] + ADD r10,r10,r11 @ r10= s4 = x[4] + x[5] + SUB r11,r10,r11,LSL #1 @ r11= s5 = x[4] - x[5] + ADD r12,r12,r14 @ r12= s6 = x[6] + x[7] + SUB r14,r12,r14,LSL #1 @ r14= s7 = x[6] - x[7] + + ADD r2, r11,r9 @ r2 = x[0] = s5 + s3 + SUB r4, r2, r9, LSL #1 @ r4 = x[2] = s5 - s3 + SUB r3, r14,r7 @ r3 = x[1] = s7 - s1 + ADD r5, r3, r7, LSL #1 @ r5 = x[3] = s7 + s1 + SUB r10,r10,r6 @ r10= x[4] = s4 - s0 + SUB r11,r12,r8 @ r11= x[5] = s6 - s2 + ADD r12,r10,r6, LSL #1 @ r12= x[6] = s4 + s0 + ADD r14,r11,r8, LSL #1 @ r14= x[7] = s6 + s2 + STMIA r1,{r2,r3,r4,r5,r10,r11,r12,r14} + + @ block 2 + ADD r1,r1,#16*4-8*4 + ADD r4,r1,#8*4 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[ 8] + @ r6 = x[ 9] + @ r9 = x[10] + @ r10= x[11] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[0] + @ r8 = x[1] + @ r11= x[2] + @ r12= x[3] + SUB r5, r5, r6 @ r5 = s0 = x[ 8] - x[ 9] + ADD r6, r5, r6, LSL #1 @ r6 = x[ 8] + x[ 9] -> x[ 8] + SUB r9, r9, r10 @ r9 = s1 = x[10] - x[11] + ADD r10,r9, r10,LSL #1 @ r10= x[10] + x[11] -> x[10] + SUB r8, r8, r7 @ r8 = s2 = x[ 1] - x[ 0] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 1] + x[ 0] -> x[ 9] + SUB r12,r12,r11 @ r12= s3 = x[ 3] - x[ 2] + ADD r11,r12,r11, LSL #1 @ r11= x[ 3] + x[ 2] -> x[11] + LDR r14,cPI2_8 + STMIA r4!,{r6,r7,r10,r11} + + SUB r5, r5, r9 @ r5 = s0 - s1 + ADD r9, r5, r9, LSL #1 @ r9 = s0 + s1 + SMULL r6, r5, r14,r5 @ (r6,r5) = (s0-s1)*cPI2_8 + SUB r12,r12,r8 @ r12= s3 - s2 + ADD r8, r12,r8, LSL #1 @ r8 = s3 + s2 + + SMULL r6, r8, r14,r8 @ (r6,r8) = (s3+s2)*cPI2_8 + MOV r5, r5, LSL #1 + SMULL r6, r9, r14,r9 @ (r6,r9) = (s0+s1)*cPI2_8 + MOV r8, r8, LSL #1 + SMULL r6, r12,r14,r12 @ (r6,r12) = (s3-s2)*cPI2_8 + MOV r9, r9, LSL #1 + MOV r12,r12,LSL #1 + STMIA r1!,{r5,r8,r9,r12} + + @ block4 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[12] + @ r6 = x[13] + @ r9 = x[14] + @ r10= x[15] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[ 4] + @ r8 = x[ 5] + @ r11= x[ 6] + @ r12= x[ 7] + SUB r5, r5, r6 @ r5 = s2 = x[12] - x[13] + ADD r6, r5, r6, LSL #1 @ r6 = x[12] + x[13] -> x[12] + SUB r9, r9, r10 @ r9 = s3 = x[14] - x[15] + ADD r10,r9, r10,LSL #1 @ r10= x[14] + x[15] -> x[14] + SUB r14,r7, r8 @ r14= s0 = x[ 4] - x[ 5] + ADD r8, r14,r8, LSL #1 @ r8 = x[ 4] + x[ 5] -> x[13] + SUB r7, r12,r11 @ r7 = s1 = x[ 7] - x[ 6] + ADD r11,r7, r11, LSL #1 @ r11= x[ 7] + x[ 6] -> x[15] + STMIA r4!,{r6,r8,r10,r11} + STMIA r1!,{r5,r7,r9,r14} + + @ mdct_butterfly_8 + LDMDB r1,{r6,r7,r8,r9,r10,r11,r12,r14} + @ r6 = x[0] + @ r7 = x[1] + @ r8 = x[2] + @ r9 = x[3] + @ r10= x[4] + @ r11= x[5] + @ r12= x[6] + @ r14= x[7] + ADD r6, r6, r7 @ r6 = s0 = x[0] + x[1] + SUB r7, r6, r7, LSL #1 @ r7 = s1 = x[0] - x[1] + ADD r8, r8, r9 @ r8 = s2 = x[2] + x[3] + SUB r9, r8, r9, LSL #1 @ r9 = s3 = x[2] - x[3] + ADD r10,r10,r11 @ r10= s4 = x[4] + x[5] + SUB r11,r10,r11,LSL #1 @ r11= s5 = x[4] - x[5] + ADD r12,r12,r14 @ r12= s6 = x[6] + x[7] + SUB r14,r12,r14,LSL #1 @ r14= s7 = x[6] - x[7] + + ADD r2, r11,r9 @ r2 = x[0] = s5 + s3 + SUB r4, r2, r9, LSL #1 @ r4 = x[2] = s5 - s3 + SUB r3, r14,r7 @ r3 = x[1] = s7 - s1 + ADD r5, r3, r7, LSL #1 @ r5 = x[3] = s7 + s1 + SUB r10,r10,r6 @ r10= x[4] = s4 - s0 + SUB r11,r12,r8 @ r11= x[5] = s6 - s2 + ADD r12,r10,r6, LSL #1 @ r12= x[6] = s4 + s0 + ADD r14,r11,r8, LSL #1 @ r14= x[7] = s6 + s2 + STMDB r1,{r2,r3,r4,r5,r10,r11,r12,r14} + + @ mdct_butterfly_8 + LDMIA r1,{r6,r7,r8,r9,r10,r11,r12,r14} + @ r6 = x[0] + @ r7 = x[1] + @ r8 = x[2] + @ r9 = x[3] + @ r10= x[4] + @ r11= x[5] + @ r12= x[6] + @ r14= x[7] + ADD r6, r6, r7 @ r6 = s0 = x[0] + x[1] + SUB r7, r6, r7, LSL #1 @ r7 = s1 = x[0] - x[1] + ADD r8, r8, r9 @ r8 = s2 = x[2] + x[3] + SUB r9, r8, r9, LSL #1 @ r9 = s3 = x[2] - x[3] + ADD r10,r10,r11 @ r10= s4 = x[4] + x[5] + SUB r11,r10,r11,LSL #1 @ r11= s5 = x[4] - x[5] + ADD r12,r12,r14 @ r12= s6 = x[6] + x[7] + SUB r14,r12,r14,LSL #1 @ r14= s7 = x[6] - x[7] + + ADD r2, r11,r9 @ r2 = x[0] = s5 + s3 + SUB r4, r2, r9, LSL #1 @ r4 = x[2] = s5 - s3 + SUB r3, r14,r7 @ r3 = x[1] = s7 - s1 + ADD r5, r3, r7, LSL #1 @ r5 = x[3] = s7 + s1 + SUB r10,r10,r6 @ r10= x[4] = s4 - s0 + SUB r11,r12,r8 @ r11= x[5] = s6 - s2 + ADD r12,r10,r6, LSL #1 @ r12= x[6] = s4 + s0 + ADD r14,r11,r8, LSL #1 @ r14= x[7] = s6 + s2 + STMIA r1,{r2,r3,r4,r5,r10,r11,r12,r14} + + ADD r1,r1,#8*4 + SUBS r0,r0,#64 + BGT mdct_bufferflies_loop3 + + LDMFD r13,{r0-r3} + +mdct_bitreverseARM: + @ r0 = points + @ r1 = in + @ r2 = step + @ r3 = shift + + MOV r4, #0 @ r4 = bit = 0 + ADD r5, r1, r0, LSL #1 @ r5 = w = x + (n>>1) + ADR r6, bitrev + SUB r5, r5, #8 +brev_lp: + LDRB r7, [r6, r4, LSR #6] + AND r8, r4, #0x3f + LDRB r8, [r6, r8] + ADD r4, r4, #1 @ bit++ + @ stall XScale + ORR r7, r7, r8, LSL #6 @ r7 = bitrev[bit] + MOV r7, r7, LSR r3 + ADD r9, r1, r7, LSL #2 @ r9 = xx = x + (b>>shift) + CMP r5, r9 @ if (w > xx) + LDR r10,[r5],#-8 @ r10 = w[0] w -= 2 + LDRGT r11,[r5,#12] @ r11 = w[1] + LDRGT r12,[r9] @ r12 = xx[0] + LDRGT r14,[r9,#4] @ r14 = xx[1] + STRGT r10,[r9] @ xx[0]= w[0] + STRGT r11,[r9,#4] @ xx[1]= w[1] + STRGT r12,[r5,#8] @ w[0] = xx[0] + STRGT r14,[r5,#12] @ w[1] = xx[1] + CMP r5,r1 + BGT brev_lp + + @ mdct_step7 + @ r0 = points + @ r1 = in + @ r2 = step + @ r3 = shift + + CMP r2, #4 @ r5 = T = (step>=4) ? + LDRGE r5, =sincos_lookup0 @ sincos_lookup0 + + LDRLT r5, =sincos_lookup1 @ sincos_lookup0 + + ADD r7, r1, r0, LSL #1 @ r7 = w1 = x + (n>>1) + ADDGE r5, r5, r2, LSL #1 @ (step>>1) + ADD r8, r5, #1024*4 @ r8 = Ttop +step7_loop1: + LDR r6, [r1] @ r6 = w0[0] + LDR r9, [r1,#4] @ r9 = w0[1] + LDR r10,[r7,#-8]! @ r10= w1[0] w1 -= 2 + LDR r11,[r7,#4] @ r11= w1[1] + LDR r14,[r5,#4] @ r14= T[1] + LDR r12,[r5],r2,LSL #2 @ r12= T[0] T += step + + ADD r6, r6, r10 @ r6 = s0 = w0[0] + w1[0] + SUB r10,r6, r10,LSL #1 @ r10= s1b= w0[0] - w1[0] + SUB r11,r11,r9 @ r11= s1 = w1[1] - w0[1] + ADD r9, r11,r9, LSL #1 @ r9 = s0b= w1[1] + w0[1] + + @ Can save 1 cycle by using SMULL SMLAL - at the cost of being + @ 1 off. + SMULL r0, r3, r6, r14 @ (r0,r3) = s0*T[1] + SMULL r0, r4, r11,r12 @ (r0,r4) += s1*T[0] = s2 + ADD r3, r3, r4 + SMULL r0, r14,r11,r14 @ (r0,r14) = s1*T[1] + SMULL r0, r12,r6, r12 @ (r0,r12) += s0*T[0] = s3 + SUB r14,r14,r12 + + @ r9 = s0b<<1 + @ r10= s1b<<1 + ADD r9, r3, r9, ASR #1 @ r9 = s0b + s2 + SUB r3, r9, r3, LSL #1 @ r3 = s0b - s2 + + SUB r12,r14,r10,ASR #1 @ r12= s3 - s1b + ADD r10,r14,r10,ASR #1 @ r10= s3 + s1b + STR r9, [r1],#4 + STR r10,[r1],#4 @ w0 += 2 + STR r3, [r7] + STR r12,[r7,#4] + + CMP r5,r8 + BLT step7_loop1 + +step7_loop2: + LDR r6, [r1] @ r6 = w0[0] + LDR r9, [r1,#4] @ r9 = w0[1] + LDR r10,[r7,#-8]! @ r10= w1[0] w1 -= 2 + LDR r11,[r7,#4] @ r11= w1[1] + LDR r14,[r5,-r2,LSL #2]! @ r12= T[1] T -= step + LDR r12,[r5,#4] @ r14= T[0] + + ADD r6, r6, r10 @ r6 = s0 = w0[0] + w1[0] + SUB r10,r6, r10,LSL #1 @ r10= s1b= w0[0] - w1[0] + SUB r11,r11,r9 @ r11= s1 = w1[1] - w0[1] + ADD r9, r11,r9, LSL #1 @ r9 = s0b= w1[1] + w0[1] + + @ Can save 1 cycle by using SMULL SMLAL - at the cost of being + @ 1 off. + SMULL r0, r3, r6, r14 @ (r0,r3) = s0*T[0] + SMULL r0, r4, r11,r12 @ (r0,r4) += s1*T[1] = s2 + ADD r3, r3, r4 + SMULL r0, r14,r11,r14 @ (r0,r14) = s1*T[0] + SMULL r0, r12,r6, r12 @ (r0,r12) += s0*T[1] = s3 + SUB r14,r14,r12 + + @ r9 = s0b<<1 + @ r10= s1b<<1 + ADD r9, r3, r9, ASR #1 @ r9 = s0b + s2 + SUB r3, r9, r3, LSL #1 @ r3 = s0b - s2 + + SUB r12,r14,r10,ASR #1 @ r12= s3 - s1b + ADD r10,r14,r10,ASR #1 @ r10= s3 + s1b + STR r9, [r1],#4 + STR r10,[r1],#4 @ w0 += 2 + STR r3, [r7] + STR r12,[r7,#4] + + CMP r1,r7 + BLT step7_loop2 + + LDMFD r13!,{r0-r3} + + @ r0 = points + @ r1 = in + @ r2 = step + @ r3 = shift + MOV r2, r2, ASR #2 @ r2 = step >>= 2 + CMP r2, #0 + CMPNE r2, #1 + BEQ mdct_end + + @ step > 1 (default case) + CMP r2, #4 @ r5 = T = (step>=4) ? + LDRGE r5, =sincos_lookup0 @ sincos_lookup0 + + LDRLT r5, =sincos_lookup1 @ sincos_lookup1 + ADD r7, r1, r0, LSL #1 @ r7 = iX = x + (n>>1) + ADDGE r5, r5, r2, LSL #1 @ (step>>1) +mdct_step8_default: + LDR r6, [r1],#4 @ r6 = s0 = x[0] + LDR r8, [r1],#4 @ r8 = -s1 = x[1] + LDR r12,[r5,#4] @ r12= T[1] + LDR r14,[r5],r2,LSL #2 @ r14= T[0] T += step + RSB r8, r8, #0 @ r8 = s1 + + @ XPROD31(s0, s1, T[0], T[1], x, x+1) + @ x[0] = s0 * T[0] + s1 * T[1] x[1] = s1 * T[0] - s0 * T[1] + SMULL r9, r10, r8, r12 @ (r9,r10) = s1 * T[1] + CMP r1, r7 + SMLAL r9, r10, r6, r14 @ (r9,r10) += s0 * T[0] + RSB r6, r6, #0 @ r6 = -s0 + SMULL r9, r11, r8, r14 @ (r9,r11) = s1 * T[0] + MOV r10,r10,LSL #1 + SMLAL r9, r11, r6, r12 @ (r9,r11) -= s0 * T[1] + STR r10,[r1,#-8] + MOV r11,r11,LSL #1 + STR r11,[r1,#-4] + BLT mdct_step8_default + +mdct_end: + MOV r0, r2 + LDMFD r13!,{r4-r11,PC} + +cPI1_8: + .word 0x7641af3d +cPI2_8: + .word 0x5a82799a +cPI3_8: + .word 0x30fbc54d +bitrev: + .byte 0 + .byte 32 + .byte 16 + .byte 48 + .byte 8 + .byte 40 + .byte 24 + .byte 56 + .byte 4 + .byte 36 + .byte 20 + .byte 52 + .byte 12 + .byte 44 + .byte 28 + .byte 60 + .byte 2 + .byte 34 + .byte 18 + .byte 50 + .byte 10 + .byte 42 + .byte 26 + .byte 58 + .byte 6 + .byte 38 + .byte 22 + .byte 54 + .byte 14 + .byte 46 + .byte 30 + .byte 62 + .byte 1 + .byte 33 + .byte 17 + .byte 49 + .byte 9 + .byte 41 + .byte 25 + .byte 57 + .byte 5 + .byte 37 + .byte 21 + .byte 53 + .byte 13 + .byte 45 + .byte 29 + .byte 61 + .byte 3 + .byte 35 + .byte 19 + .byte 51 + .byte 11 + .byte 43 + .byte 27 + .byte 59 + .byte 7 + .byte 39 + .byte 23 + .byte 55 + .byte 15 + .byte 47 + .byte 31 + .byte 63 diff --git a/android/jni/tremolo/mdctLARM.s b/android/jni/tremolo/mdctLARM.s new file mode 100644 index 00000000..4ff60011 --- /dev/null +++ b/android/jni/tremolo/mdctLARM.s @@ -0,0 +1,1167 @@ + .text + + @ low accuracy version + + .global mdct_backwardARM + .global mdct_shift_right + .global mdct_unroll_prelap + .global mdct_unroll_part2 + .global mdct_unroll_part3 + .global mdct_unroll_postlap + +mdct_unroll_prelap: + @ r0 = out + @ r1 = post + @ r2 = r + @ r3 = step + STMFD r13!,{r4-r7,r14} + MVN r4, #0x8000 + MOV r3, r3, LSL #1 + SUB r1, r2, r1 @ r1 = r - post + SUBS r1, r1, #16 @ r1 = r - post - 16 + BLT unroll_over +unroll_loop: + LDMDB r2!,{r5,r6,r7,r12} + + MOV r5, r5, ASR #9 @ r5 = (*--r)>>9 + MOV r6, r6, ASR #9 @ r6 = (*--r)>>9 + MOV r7, r7, ASR #9 @ r7 = (*--r)>>9 + MOV r12,r12,ASR #9 @ r12= (*--r)>>9 + + MOV r14,r12,ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r12,r4, r14,ASR #31 + STRH r12,[r0], r3 + + MOV r14,r7, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r7, r4, r14,ASR #31 + STRH r7, [r0], r3 + + MOV r14,r6, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r6, r4, r14,ASR #31 + STRH r6, [r0], r3 + + MOV r14,r5, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r5, r4, r14,ASR #31 + STRH r5, [r0], r3 + + SUBS r1, r1, #16 + BGE unroll_loop + +unroll_over: + ADDS r1, r1, #16 + BLE unroll_end +unroll_loop2: + LDR r5,[r2,#-4]! + @ stall + @ stall (Xscale) + MOV r5, r5, ASR #9 @ r5 = (*--r)>>9 + MOV r14,r5, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r5, r4, r14,ASR #31 + STRH r5, [r0], r3 + SUBS r1, r1, #4 + BGT unroll_loop2 +unroll_end: + LDMFD r13!,{r4-r7,PC} + +mdct_unroll_postlap: + @ r0 = out + @ r1 = post + @ r2 = l + @ r3 = step + STMFD r13!,{r4-r7,r14} + MVN r4, #0x8000 + MOV r3, r3, LSL #1 + SUB r1, r1, r2 @ r1 = post - l + MOV r1, r1, ASR #1 @ r1 = (post - l)>>1 + SUBS r1, r1, #16 @ r1 = ((post - l)>>1) - 4 + BLT unroll_over3 +unroll_loop3: + LDR r12,[r2],#8 + LDR r7, [r2],#8 + LDR r6, [r2],#8 + LDR r5, [r2],#8 + + RSB r12,r12,#0 + RSB r5, r5, #0 + RSB r6, r6, #0 + RSB r7, r7, #0 + + MOV r12, r12,ASR #9 @ r12= (-*l)>>9 + MOV r5, r5, ASR #9 @ r5 = (-*l)>>9 + MOV r6, r6, ASR #9 @ r6 = (-*l)>>9 + MOV r7, r7, ASR #9 @ r7 = (-*l)>>9 + + MOV r14,r12,ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r12,r4, r14,ASR #31 + STRH r12,[r0], r3 + + MOV r14,r7, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r7, r4, r14,ASR #31 + STRH r7, [r0], r3 + + MOV r14,r6, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r6, r4, r14,ASR #31 + STRH r6, [r0], r3 + + MOV r14,r5, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r5, r4, r14,ASR #31 + STRH r5, [r0], r3 + + SUBS r1, r1, #16 + BGE unroll_loop3 + +unroll_over3: + ADDS r1, r1, #16 + BLE unroll_over4 +unroll_loop4: + LDR r5,[r2], #8 + @ stall + @ stall (Xscale) + RSB r5, r5, #0 + MOV r5, r5, ASR #9 @ r5 = (-*l)>>9 + MOV r14,r5, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r5, r4, r14,ASR #31 + STRH r5, [r0], r3 + SUBS r1, r1, #4 + BGT unroll_loop4 +unroll_over4: + LDMFD r13!,{r4-r7,PC} + +mdct_unroll_part2: + @ r0 = out + @ r1 = post + @ r2 = l + @ r3 = r + @ <> = step + @ <> = wL + @ <> = wR + MOV r12,r13 + STMFD r13!,{r4,r6-r11,r14} + LDMFD r12,{r8,r9,r10} @ r8 = step + @ r9 = wL + @ r10= wR + MVN r4, #0x8000 + MOV r8, r8, LSL #1 + SUBS r1, r3, r1 @ r1 = (r - post) + BLE unroll_over5 +unroll_loop5: + LDR r12,[r2, #-8]! @ r12= *l (but l -= 2 first) + LDR r7, [r3, #-4]! @ r7 = *--r + LDRB r6, [r10,#-1]! @ r6 = *--wR + LDRB r11,[r9],#1 @ r11= *wL++ + + MOV r12, r12, ASR #8 + @ Can save a cycle here, at the cost of 1bit errors in rounding + MUL r11,r12,r11 @ r11 = *l * *wL++ + MOV r7, r7, ASR #8 + MLA r6, r7, r6, r11 @ r6 = *--r * *--wR + MOV r6, r6, ASR #9 + MOV r14,r6, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r6, r4, r14,ASR #31 + STRH r6, [r0], r8 + + SUBS r1, r1, #4 + BGT unroll_loop5 + +unroll_over5: + LDMFD r13!,{r4,r6-r11,PC} + +mdct_unroll_part3: + @ r0 = out + @ r1 = post + @ r2 = l + @ r3 = r + @ <> = step + @ <> = wL + @ <> = wR + MOV r12,r13 + STMFD r13!,{r4,r6-r11,r14} + LDMFD r12,{r8,r9,r10} @ r8 = step + @ r9 = wL + @ r10= wR + MVN r4, #0x8000 + MOV r8, r8, LSL #1 + SUBS r1, r1, r3 @ r1 = (post - r) + BLE unroll_over6 +unroll_loop6: + LDR r12,[r2],#8 @ r12= *l (but l += 2 first) + LDR r7, [r3],#4 @ r7 = *r++ + LDRB r11,[r9],#1 @ r11= *wL++ + LDRB r6, [r10,#-1]! @ r6 = *--wR + + @ Can save a cycle here, at the cost of 1bit errors in rounding + MOV r12,r12,ASR #8 + MUL r11,r12,r11 @ (r14,r11) = *l * *wL++ + MOV r7, r7, ASR #8 + MUL r6, r7, r6 @ (r14,r6) = *--r * *--wR + SUB r6, r6, r11 + MOV r6, r6, ASR #9 + MOV r14,r6, ASR #15 + TEQ r14,r14,ASR #31 @ if r14==0 || r14==-1 then in range + EORNE r6, r4, r14,ASR #31 + STRH r6, [r0], r8 + + SUBS r1, r1, #4 + BGT unroll_loop6 + +unroll_over6: + LDMFD r13!,{r4,r6-r11,PC} + +mdct_shift_right: + @ r0 = n + @ r1 = in + @ r2 = right + STMFD r13!,{r4-r11,r14} + + MOV r0, r0, LSR #2 @ n >>= 2 + ADD r1, r1, #4 + + SUBS r0, r0, #8 + BLT sr_less_than_8 +sr_loop: + LDR r3, [r1], #8 + LDR r4, [r1], #8 + LDR r5, [r1], #8 + LDR r6, [r1], #8 + LDR r7, [r1], #8 + LDR r8, [r1], #8 + LDR r12,[r1], #8 + LDR r14,[r1], #8 + SUBS r0, r0, #8 + STMIA r2!,{r3,r4,r5,r6,r7,r8,r12,r14} + BGE sr_loop +sr_less_than_8: + ADDS r0, r0, #8 + BEQ sr_end +sr_loop2: + LDR r3, [r1], #8 + SUBS r0, r0, #1 + STR r3, [r2], #4 + BGT sr_loop2 +sr_end: + LDMFD r13!,{r4-r11,PC} + +mdct_backwardARM: + @ r0 = n + @ r1 = in + STMFD r13!,{r4-r11,r14} + + MOV r2, #1<<4 @ r2 = 1<>1) + ADD r14,r1, r0 @ r14= in+(n>>2) + SUB r4, r4, #3*4 @ r4 = aX = in+n2-3 + LDR r5, =sincos_lookup0 @ r5 = T=sincos_lookup0 + +presymmetry_loop1: + LDR r7, [r4,#8] @ r6 = s2 = aX[2] + LDRB r11,[r5,#1] @ r11= T[1] + LDR r6, [r4],#-16 @ r6 = s0 = aX[0] + LDRB r10,[r5],r2 @ r10= T[0] T += step + MOV r6, r6, ASR #8 + MOV r7, r7, ASR #8 + + @ XPROD31(s0, s2, T[0], T[1], &aX[0], &ax[2]) + MUL r9, r6, r10 @ r9 = s0*T[0] + RSB r6, r6, #0 + MLA r9, r7, r11,r9 @ r9 += s2*T[1] + CMP r4, r14 + MUL r12,r7, r10 @ r12 = s2*T[0] + STR r9, [r4,#16] @ aX[0] = r9 + MLA r12,r6, r11,r12 @ r12 -= s0*T[1] + STR r12,[r4,#8+16] @ aX[2] = r12 + + BGE presymmetry_loop1 @ while (aX >= in+n4) + +presymmetry_loop2: + LDR r6, [r4],#-16 @ r6 = s0 = aX[0] + LDRB r10,[r5,#1] @ r10= T[1] + LDR r7, [r4,#16+8] @ r6 = s2 = aX[2] + LDRB r11,[r5],-r2 @ r11= T[0] T -= step + MOV r6, r6, ASR #8 + MOV r7, r7, ASR #8 + + @ XPROD31(s0, s2, T[1], T[0], &aX[0], &ax[2]) + MUL r9, r6, r10 @ r9 = s0*T[1] + RSB r6, r6, #0 + MLA r9, r7, r11,r9 @ r9 += s2*T[0] + CMP r4, r1 + MUL r12,r7, r10 @ r12 = s2*T[1] + STR r9, [r4,#16] @ aX[0] = r9 + MLA r12,r6, r11,r12 @ r12 -= s0*T[0] + STR r12,[r4,#8+16] @ aX[2] = r12 + + BGE presymmetry_loop2 @ while (aX >= in) + + @ r0 = n + @ r1 = in + @ r2 = step + @ r3 = shift + STMFD r13!,{r3} + LDR r5, =sincos_lookup0 @ r5 = T=sincos_lookup0 + ADD r4, r1, r0, LSL #1 @ r4 = aX = in+(n>>1) + SUB r4, r4, #4*4 @ r4 = aX = in+(n>>1)-4 + LDRB r11,[r5,#1] @ r11= T[1] + LDRB r10,[r5],r2 @ r10= T[0] T += step +presymmetry_loop3: + LDR r8, [r1],#16 @ r8 = ro0 = bX[0] + LDR r9, [r1,#8-16] @ r9 = ro2 = bX[2] + LDR r6, [r4],#-16 @ r6 = ri0 = aX[0] + LDR r7, [r4,#8+16] @ r7 = ri2 = aX[2] + MOV r8, r8, ASR #8 + MOV r9, r9, ASR #8 + MOV r6, r6, ASR #8 + + @ XNPROD31( ro2, ro0, T[1], T[0], &aX[0], &aX[2] ) + @ aX[0] = (ro2*T[1] - ro0*T[0])>>31 aX[2] = (ro0*T[1] + ro2*T[0])>>31 + MUL r12,r8, r11 @ r12 = ro0*T[1] + MOV r7, r7, ASR #8 + MLA r12,r9, r10,r12 @ r12 += ro2*T[0] + RSB r8, r8, #0 @ r8 = -ro0 + MUL r3, r9, r11 @ r3 = ro2*T[1] + LDRB r11,[r5,#1] @ r11= T[1] + MLA r3, r8, r10,r3 @ r3 -= ro0*T[0] + LDRB r10,[r5],r2 @ r10= T[0] T += step + STR r12,[r4,#16+8] + STR r3, [r4,#16] + + @ XNPROD31( ri2, ri0, T[0], T[1], &bX[0], &bX[2] ) + @ bX[0] = (ri2*T[0] - ri0*T[1])>>31 bX[2] = (ri0*T[0] + ri2*T[1])>>31 + MUL r12,r6, r10 @ r12 = ri0*T[0] + RSB r6, r6, #0 @ r6 = -ri0 + MLA r12,r7, r11,r12 @ r12 += ri2*T[1] + CMP r4, r1 + MUL r3, r7, r10 @ r3 = ri2*T[0] + STR r12,[r1,#8-16] + MLA r3, r6, r11,r3 @ r3 -= ri0*T[1] + STR r3, [r1,#-16] + + BGE presymmetry_loop3 + + SUB r1,r1,r0 @ r1 = in -= n>>2 (i.e. restore in) + + LDR r3,[r13] + STR r2,[r13,#-4]! + + @ mdct_butterflies + @ r0 = n = (points * 2) + @ r1 = in = x + @ r2 = i + @ r3 = shift + STMFD r13!,{r0-r1} + RSBS r4,r3,#6 @ r4 = stages = 7-shift then --stages + LDR r5,=sincos_lookup0 + BLE no_generics + MOV r14,#4 @ r14= 4 (i=0) + MOV r6, r14,LSL r3 @ r6 = (4<>i = POINTS + MOV r2, r14,LSR #2 @ r2 = (1<>1) + ADD r7,r1,r0,LSL #1 @ r7 = x1+4 = x + POINTS + ADD r12,r5,#1024 @ r12= sincos_lookup0+1024 + +mdct_bufferfly_generic_loop1: + LDMDB r7!,{r2,r3,r8,r11} @ r2 = x1[0] + @ r3 = x1[1] + @ r8 = x1[2] + @ r11= x1[3] x1 -= 4 + LDMDB r1!,{r4,r9,r10,r14} @ r4 = x2[0] + @ r9 = x2[1] + @ r10= x2[2] + @ r14= x2[3] x2 -= 4 + + SUB r2, r2, r3 @ r2 = s0 = x1[0] - x1[1] + ADD r3, r2, r3, LSL #1 @ r3 = x1[0] + x1[1] (-> x1[0]) + SUB r11,r11,r8 @ r11= s1 = x1[3] - x1[2] + ADD r8, r11,r8, LSL #1 @ r8 = x1[3] + x1[2] (-> x1[2]) + SUB r9, r9, r4 @ r9 = s2 = x2[1] - x2[0] + ADD r4, r9, r4, LSL #1 @ r4 = x2[1] + x2[0] (-> x1[1]) + SUB r14,r14,r10 @ r14= s3 = x2[3] - x2[2] + ADD r10,r14,r10,LSL #1 @ r10= x2[3] + x2[2] (-> x1[3]) + STMIA r7,{r3,r4,r8,r10} + + @ r0 = points + @ r1 = x2 + @ r2 = s0 + @ r3 free + @ r4 free + @ r5 = T + @ r6 = step + @ r7 = x1 + @ r8 free + @ r9 = s2 + @ r10 free + @ r11= s1 + @ r12= limit + @ r14= s3 + + LDRB r8, [r5,#1] @ r8 = T[1] + LDRB r10,[r5],r6 @ r10= T[0] T += step + MOV r2, r2, ASR #8 + MOV r11,r11,ASR #8 + MOV r9, r9, ASR #8 + MOV r14,r14,ASR #8 + + @ XPROD31(s1, s0, T[0], T[1], &x2[0], &x2[2]) + @ x2[0] = (s1*T[0] + s0*T[1])>>31 x2[2] = (s0*T[0] - s1*T[1])>>31 + @ stall Xscale + MUL r3, r2, r8 @ r3 = s0*T[1] + MLA r3, r11,r10,r3 @ r3 += s1*T[0] + RSB r11,r11,#0 + MUL r4, r8, r11 @ r4 = -s1*T[1] + MLA r4, r2, r10,r4 @ r4 += s0*T[0] = Value for x2[2] + MOV r2, r3 @ r2 = r3 = Value for x2[0] + + @ XPROD31(s2, s3, T[0], T[1], &x2[1], &x2[3]) + @ x2[1] = (s2*T[0] + s3*T[1])>>31 x2[3] = (s3*T[0] - s2*T[1])>>31 + MUL r3, r9, r10 @ r3 = s2*T[0] + MLA r3, r14,r8, r3 @ r3 += s3*T[1] = Value for x2[1] + RSB r9, r9, #0 + MUL r11,r14,r10 @ r11 = s3*T[0] + MLA r11,r9, r8, r11 @ r11 -= s2*T[1] = Value for x2[3] + CMP r5, r12 + + STMIA r1,{r2,r3,r4,r11} + + BLT mdct_bufferfly_generic_loop1 + + SUB r12,r12,#1024 +mdct_bufferfly_generic_loop2: + LDMDB r7!,{r2,r3,r9,r10} @ r2 = x1[0] + @ r3 = x1[1] + @ r9 = x1[2] + @ r10= x1[3] x1 -= 4 + LDMDB r1!,{r4,r8,r11,r14} @ r4 = x2[0] + @ r8 = x2[1] + @ r11= x2[2] + @ r14= x2[3] x2 -= 4 + + SUB r2, r2, r3 @ r2 = s0 = x1[0] - x1[1] + ADD r3, r2, r3, LSL #1 @ r3 = x1[0] + x1[1] (-> x1[0]) + SUB r9, r9,r10 @ r9 = s1 = x1[2] - x1[3] + ADD r10,r9,r10, LSL #1 @ r10= x1[2] + x1[3] (-> x1[2]) + SUB r4, r4, r8 @ r4 = s2 = x2[0] - x2[1] + ADD r8, r4, r8, LSL #1 @ r8 = x2[0] + x2[1] (-> x1[1]) + SUB r14,r14,r11 @ r14= s3 = x2[3] - x2[2] + ADD r11,r14,r11,LSL #1 @ r11= x2[3] + x2[2] (-> x1[3]) + STMIA r7,{r3,r8,r10,r11} + + @ r0 = points + @ r1 = x2 + @ r2 = s0 + @ r3 free + @ r4 = s2 + @ r5 = T + @ r6 = step + @ r7 = x1 + @ r8 free + @ r9 = s1 + @ r10 free + @ r11 free + @ r12= limit + @ r14= s3 + + LDRB r8, [r5,#1] @ r8 = T[1] + LDRB r10,[r5],-r6 @ r10= T[0] T -= step + MOV r2, r2, ASR #8 + MOV r9, r9, ASR #8 + MOV r4, r4, ASR #8 + MOV r14,r14,ASR #8 + + @ XNPROD31(s0, s1, T[0], T[1], &x2[0], &x2[2]) + @ x2[0] = (s0*T[0] - s1*T[1])>>31 x2[2] = (s1*T[0] + s0*T[1])>>31 + @ stall Xscale + MUL r11,r2, r8 @ r11 = s0*T[1] + MLA r11,r9, r10,r11 @ r11 += s1*T[0] + RSB r9, r9, #0 + MUL r2, r10,r2 @ r2 = s0*T[0] + MLA r2, r9, r8, r2 @ r2 += -s1*T[1] = Value for x2[0] + MOV r9, r11 @ r9 = r11 = Value for x2[2] + + @ XNPROD31(s3, s2, T[0], T[1], &x2[1], &x2[3]) + @ x2[1] = (s3*T[0] - s2*T[1])>>31 x2[3] = (s2*T[0] + s3*T[1])>>31 + MUL r11,r4, r10 @ r11 = s2*T[0] + MLA r11,r14,r8, r11 @ r11 += s3*T[1] = Value for x2[3] + RSB r4, r4, #0 + MUL r3, r14,r10 @ r3 = s3*T[0] + MLA r3, r4, r8, r3 @ r3 -= s2*T[1] = Value for x2[1] + CMP r5, r12 + + STMIA r1,{r2,r3,r9,r11} + + BGT mdct_bufferfly_generic_loop2 + + LDR r2,[r13],#4 @ unstack r2 + ADD r1, r1, r0, LSL #2 @ r1 = x+POINTS*j + @ stall Xscale + SUBS r2, r2, #1 @ r2-- (j++) + BGT mdct_butterflies_loop2 + + LDMFD r13!,{r4,r14} + + LDR r1,[r13,#4] + + SUBS r4, r4, #1 @ stages-- + MOV r14,r14,LSL #1 @ r14= 4< x[16] + SUB r9, r9, r10 @ r9 = s1 = x[18] - x[19] + ADD r10,r9, r10,LSL #1 @ r10= x[18] + x[19] -> x[18] + SUB r8, r8, r7 @ r8 = s2 = x[ 1] - x[ 0] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 1] + x[ 0] -> x[17] + SUB r12,r12,r11 @ r12= s3 = x[ 3] - x[ 2] + ADD r11,r12,r11, LSL #1 @ r11= x[ 3] + x[ 2] -> x[19] + STMIA r4!,{r6,r7,r10,r11} + + MOV r6,#0xed @ r6 =cPI1_8 + MOV r7,#0x62 @ r7 =cPI3_8 + + MOV r5, r5, ASR #8 + MOV r9, r9, ASR #8 + MOV r8, r8, ASR #8 + MOV r12,r12,ASR #8 + + @ XNPROD31( s0, s1, cPI3_8, cPI1_8, &x[ 0], &x[ 2] ) + @ x[0] = s0*cPI3_8 - s1*cPI1_8 x[2] = s1*cPI3_8 + s0*cPI1_8 + @ stall Xscale + MUL r11,r5, r6 @ r11 = s0*cPI1_8 + MLA r11,r9, r7, r11 @ r11 += s1*cPI3_8 + RSB r9, r9, #0 + MUL r5, r7, r5 @ r5 = s0*cPI3_8 + MLA r5, r9, r6, r5 @ r5 -= s1*cPI1_8 + + @ XPROD31 ( s2, s3, cPI1_8, cPI3_8, &x[ 1], &x[ 3] ) + @ x[1] = s2*cPI1_8 + s3*cPI3_8 x[3] = s3*cPI1_8 - s2*cPI3_8 + MUL r9, r8, r6 @ r9 = s2*cPI1_8 + MLA r9, r12,r7, r9 @ r9 += s3*cPI3_8 + RSB r8,r8,#0 + MUL r12,r6, r12 @ r12 = s3*cPI1_8 + MLA r12,r8, r7, r12 @ r12 -= s2*cPI3_8 + STMIA r1!,{r5,r9,r11,r12} + + @ block2 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[20] + @ r6 = x[21] + @ r9 = x[22] + @ r10= x[23] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[4] + @ r8 = x[5] + @ r11= x[6] + @ r12= x[7] + SUB r5, r5, r6 @ r5 = s0 = x[20] - x[21] + ADD r6, r5, r6, LSL #1 @ r6 = x[20] + x[21] -> x[20] + SUB r9, r9, r10 @ r9 = s1 = x[22] - x[23] + ADD r10,r9, r10,LSL #1 @ r10= x[22] + x[23] -> x[22] + SUB r8, r8, r7 @ r8 = s2 = x[ 5] - x[ 4] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 5] + x[ 4] -> x[21] + SUB r12,r12,r11 @ r12= s3 = x[ 7] - x[ 6] + ADD r11,r12,r11, LSL #1 @ r11= x[ 7] + x[ 6] -> x[23] + MOV r14,#0xb5 @ cPI2_8 + STMIA r4!,{r6,r7,r10,r11} + + SUB r5, r5, r9 @ r5 = s0 - s1 + ADD r9, r5, r9, LSL #1 @ r9 = s0 + s1 + MOV r5, r5, ASR #8 + MUL r5, r14,r5 @ r5 = (s0-s1)*cPI2_8 + SUB r12,r12,r8 @ r12= s3 - s2 + ADD r8, r12,r8, LSL #1 @ r8 = s3 + s2 + + MOV r8, r8, ASR #8 + MUL r8, r14,r8 @ r8 = (s3+s2)*cPI2_8 + MOV r9, r9, ASR #8 + MUL r9, r14,r9 @ r9 = (s0+s1)*cPI2_8 + MOV r12,r12,ASR #8 + MUL r12,r14,r12 @ r12 = (s3-s2)*cPI2_8 + STMIA r1!,{r5,r8,r9,r12} + + @ block3 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[24] + @ r6 = x[25] + @ r9 = x[25] + @ r10= x[26] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[8] + @ r8 = x[9] + @ r11= x[10] + @ r12= x[11] + SUB r5, r5, r6 @ r5 = s0 = x[24] - x[25] + ADD r6, r5, r6, LSL #1 @ r6 = x[24] + x[25] -> x[25] + SUB r9, r9, r10 @ r9 = s1 = x[26] - x[27] + ADD r10,r9, r10,LSL #1 @ r10= x[26] + x[27] -> x[26] + SUB r8, r8, r7 @ r8 = s2 = x[ 9] - x[ 8] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 9] + x[ 8] -> x[25] + SUB r12,r12,r11 @ r12= s3 = x[11] - x[10] + ADD r11,r12,r11, LSL #1 @ r11= x[11] + x[10] -> x[27] + STMIA r4!,{r6,r7,r10,r11} + + MOV r6,#0x62 @ r6 = cPI3_8 + MOV r7,#0xED @ r7 = cPI1_8 + + @ XNPROD31( s0, s1, cPI1_8, cPI3_8, &x[ 8], &x[10] ) + @ x[8] = s0*cPI1_8 - s1*cPI3_8 x[10] = s1*cPI1_8 + s0*cPI3_8 + @ stall Xscale + MOV r5, r5, ASR #8 + MUL r11,r5, r6 @ r11 = s0*cPI3_8 + MOV r9, r9, ASR #8 + MLA r11,r9, r7, r11 @ r11 += s1*cPI1_8 + RSB r9, r9, #0 + MUL r5, r7, r5 @ r5 = s0*cPI1_8 + MLA r5, r9, r6, r5 @ r5 -= s1*cPI3_8 + + @ XPROD31 ( s2, s3, cPI3_8, cPI1_8, &x[ 9], &x[11] ) + @ x[9] = s2*cPI3_8 + s3*cPI1_8 x[11] = s3*cPI3_8 - s2*cPI1_8 + MOV r8, r8, ASR #8 + MUL r9, r8, r6 @ r9 = s2*cPI3_8 + MOV r12,r12,ASR #8 + MLA r9, r12,r7, r9 @ r9 += s3*cPI1_8 + RSB r8,r8,#0 + MUL r12,r6, r12 @ r12 = s3*cPI3_8 + MLA r12,r8, r7, r12 @ r12 -= s2*cPI1_8 + STMIA r1!,{r5,r9,r11,r12} + + @ block4 + LDMIA r4,{r5,r6,r10,r11} @ r5 = x[28] + @ r6 = x[29] + @ r10= x[30] + @ r11= x[31] + LDMIA r1,{r8,r9,r12,r14} @ r8 = x[12] + @ r9 = x[13] + @ r12= x[14] + @ r14= x[15] + SUB r5, r5, r6 @ r5 = s0 = x[28] - x[29] + ADD r6, r5, r6, LSL #1 @ r6 = x[28] + x[29] -> x[28] + SUB r7, r14,r12 @ r7 = s3 = x[15] - x[14] + ADD r12,r7, r12, LSL #1 @ r12= x[15] + x[14] -> x[31] + SUB r10,r10,r11 @ r10= s1 = x[30] - x[31] + ADD r11,r10,r11,LSL #1 @ r11= x[30] + x[31] -> x[30] + SUB r14, r8, r9 @ r14= s2 = x[12] - x[13] + ADD r9, r14, r9, LSL #1 @ r9 = x[12] + x[13] -> x[29] + STMIA r4!,{r6,r9,r11,r12} + STMIA r1!,{r5,r7,r10,r14} + + @ mdct_butterfly16 (1st version) + @ block 1 + SUB r1,r1,#16*4 + ADD r4,r1,#8*4 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[ 8] + @ r6 = x[ 9] + @ r9 = x[10] + @ r10= x[11] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[0] + @ r8 = x[1] + @ r11= x[2] + @ r12= x[3] + SUB r5, r5, r6 @ r5 = s0 = x[ 8] - x[ 9] + ADD r6, r5, r6, LSL #1 @ r6 = x[ 8] + x[ 9] -> x[ 8] + SUB r9, r9, r10 @ r9 = s1 = x[10] - x[11] + ADD r10,r9, r10,LSL #1 @ r10= x[10] + x[11] -> x[10] + SUB r8, r8, r7 @ r8 = s2 = x[ 1] - x[ 0] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 1] + x[ 0] -> x[ 9] + SUB r12,r12,r11 @ r12= s3 = x[ 3] - x[ 2] + ADD r11,r12,r11, LSL #1 @ r11= x[ 3] + x[ 2] -> x[11] + MOV r14,#0xB5 @ r14= cPI2_8 + STMIA r4!,{r6,r7,r10,r11} + + SUB r5, r5, r9 @ r5 = s0 - s1 + ADD r9, r5, r9, LSL #1 @ r9 = s0 + s1 + MOV r5, r5, ASR #8 + MUL r5, r14,r5 @ r5 = (s0-s1)*cPI2_8 + SUB r12,r12,r8 @ r12= s3 - s2 + ADD r8, r12,r8, LSL #1 @ r8 = s3 + s2 + + MOV r8, r8, ASR #8 + MUL r8, r14,r8 @ r8 = (s3+s2)*cPI2_8 + MOV r9, r9, ASR #8 + MUL r9, r14,r9 @ r9 = (s0+s1)*cPI2_8 + MOV r12,r12,ASR #8 + MUL r12,r14,r12 @ r12 = (s3-s2)*cPI2_8 + STMIA r1!,{r5,r8,r9,r12} + + @ block2 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[12] + @ r6 = x[13] + @ r9 = x[14] + @ r10= x[15] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[ 4] + @ r8 = x[ 5] + @ r11= x[ 6] + @ r12= x[ 7] + SUB r14,r7, r8 @ r14= s0 = x[ 4] - x[ 5] + ADD r8, r14,r8, LSL #1 @ r8 = x[ 4] + x[ 5] -> x[13] + SUB r7, r12,r11 @ r7 = s1 = x[ 7] - x[ 6] + ADD r11,r7, r11, LSL #1 @ r11= x[ 7] + x[ 6] -> x[15] + SUB r5, r5, r6 @ r5 = s2 = x[12] - x[13] + ADD r6, r5, r6, LSL #1 @ r6 = x[12] + x[13] -> x[12] + SUB r12,r9, r10 @ r12= s3 = x[14] - x[15] + ADD r10,r12,r10,LSL #1 @ r10= x[14] + x[15] -> x[14] + STMIA r4!,{r6,r8,r10,r11} + STMIA r1!,{r5,r7,r12,r14} + + @ mdct_butterfly_8 + LDMDB r1,{r6,r7,r8,r9,r10,r11,r12,r14} + @ r6 = x[0] + @ r7 = x[1] + @ r8 = x[2] + @ r9 = x[3] + @ r10= x[4] + @ r11= x[5] + @ r12= x[6] + @ r14= x[7] + ADD r6, r6, r7 @ r6 = s0 = x[0] + x[1] + SUB r7, r6, r7, LSL #1 @ r7 = s1 = x[0] - x[1] + ADD r8, r8, r9 @ r8 = s2 = x[2] + x[3] + SUB r9, r8, r9, LSL #1 @ r9 = s3 = x[2] - x[3] + ADD r10,r10,r11 @ r10= s4 = x[4] + x[5] + SUB r11,r10,r11,LSL #1 @ r11= s5 = x[4] - x[5] + ADD r12,r12,r14 @ r12= s6 = x[6] + x[7] + SUB r14,r12,r14,LSL #1 @ r14= s7 = x[6] - x[7] + + ADD r2, r11,r9 @ r2 = x[0] = s5 + s3 + SUB r4, r2, r9, LSL #1 @ r4 = x[2] = s5 - s3 + SUB r3, r14,r7 @ r3 = x[1] = s7 - s1 + ADD r5, r3, r7, LSL #1 @ r5 = x[3] = s7 + s1 + SUB r10,r10,r6 @ r10= x[4] = s4 - s0 + SUB r11,r12,r8 @ r11= x[5] = s6 - s2 + ADD r12,r10,r6, LSL #1 @ r12= x[6] = s4 + s0 + ADD r14,r11,r8, LSL #1 @ r14= x[7] = s6 + s2 + STMDB r1,{r2,r3,r4,r5,r10,r11,r12,r14} + + @ mdct_butterfly_8 + LDMIA r1,{r6,r7,r8,r9,r10,r11,r12,r14} + @ r6 = x[0] + @ r7 = x[1] + @ r8 = x[2] + @ r9 = x[3] + @ r10= x[4] + @ r11= x[5] + @ r12= x[6] + @ r14= x[7] + ADD r6, r6, r7 @ r6 = s0 = x[0] + x[1] + SUB r7, r6, r7, LSL #1 @ r7 = s1 = x[0] - x[1] + ADD r8, r8, r9 @ r8 = s2 = x[2] + x[3] + SUB r9, r8, r9, LSL #1 @ r9 = s3 = x[2] - x[3] + ADD r10,r10,r11 @ r10= s4 = x[4] + x[5] + SUB r11,r10,r11,LSL #1 @ r11= s5 = x[4] - x[5] + ADD r12,r12,r14 @ r12= s6 = x[6] + x[7] + SUB r14,r12,r14,LSL #1 @ r14= s7 = x[6] - x[7] + + ADD r2, r11,r9 @ r2 = x[0] = s5 + s3 + SUB r4, r2, r9, LSL #1 @ r4 = x[2] = s5 - s3 + SUB r3, r14,r7 @ r3 = x[1] = s7 - s1 + ADD r5, r3, r7, LSL #1 @ r5 = x[3] = s7 + s1 + SUB r10,r10,r6 @ r10= x[4] = s4 - s0 + SUB r11,r12,r8 @ r11= x[5] = s6 - s2 + ADD r12,r10,r6, LSL #1 @ r12= x[6] = s4 + s0 + ADD r14,r11,r8, LSL #1 @ r14= x[7] = s6 + s2 + STMIA r1,{r2,r3,r4,r5,r10,r11,r12,r14} + + @ mdct_butterfly16 (2nd version) + @ block 1 + ADD r1,r1,#16*4-8*4 + ADD r4,r1,#8*4 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[ 8] + @ r6 = x[ 9] + @ r9 = x[10] + @ r10= x[11] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[0] + @ r8 = x[1] + @ r11= x[2] + @ r12= x[3] + SUB r5, r5, r6 @ r5 = s0 = x[ 8] - x[ 9] + ADD r6, r5, r6, LSL #1 @ r6 = x[ 8] + x[ 9] -> x[ 8] + SUB r9, r9, r10 @ r9 = s1 = x[10] - x[11] + ADD r10,r9, r10,LSL #1 @ r10= x[10] + x[11] -> x[10] + SUB r8, r8, r7 @ r8 = s2 = x[ 1] - x[ 0] + ADD r7, r8, r7, LSL #1 @ r7 = x[ 1] + x[ 0] -> x[ 9] + SUB r12,r12,r11 @ r12= s3 = x[ 3] - x[ 2] + ADD r11,r12,r11, LSL #1 @ r11= x[ 3] + x[ 2] -> x[11] + MOV r14,#0xb5 @ r14= cPI2_8 + STMIA r4!,{r6,r7,r10,r11} + + SUB r5, r5, r9 @ r5 = s0 - s1 + ADD r9, r5, r9, LSL #1 @ r9 = s0 + s1 + MOV r5, r5, ASR #8 + MUL r5, r14,r5 @ r5 = (s0-s1)*cPI2_8 + SUB r12,r12,r8 @ r12= s3 - s2 + ADD r8, r12,r8, LSL #1 @ r8 = s3 + s2 + + MOV r8, r8, ASR #8 + MUL r8, r14,r8 @ r8 = (s3+s2)*cPI2_8 + MOV r9, r9, ASR #8 + MUL r9, r14,r9 @ r9 = (s0+s1)*cPI2_8 + MOV r12,r12,ASR #8 + MUL r12,r14,r12 @ r12 = (s3-s2)*cPI2_8 + STMIA r1!,{r5,r8,r9,r12} + + @ block2 + LDMIA r4,{r5,r6,r9,r10} @ r5 = x[12] + @ r6 = x[13] + @ r9 = x[14] + @ r10= x[15] + LDMIA r1,{r7,r8,r11,r12} @ r7 = x[ 4] + @ r8 = x[ 5] + @ r11= x[ 6] + @ r12= x[ 7] + SUB r5, r5, r6 @ r5 = s2 = x[12] - x[13] + ADD r6, r5, r6, LSL #1 @ r6 = x[12] + x[13] -> x[12] + SUB r9, r9, r10 @ r9 = s3 = x[14] - x[15] + ADD r10,r9, r10,LSL #1 @ r10= x[14] + x[15] -> x[14] + SUB r14,r7, r8 @ r14= s0 = x[ 4] - x[ 5] + ADD r8, r14,r8, LSL #1 @ r8 = x[ 4] + x[ 5] -> x[13] + SUB r7, r12,r11 @ r7 = s1 = x[ 7] - x[ 6] + ADD r11,r7, r11, LSL #1 @ r11= x[ 7] + x[ 6] -> x[15] + STMIA r4!,{r6,r8,r10,r11} + STMIA r1!,{r5,r7,r9,r14} + + @ mdct_butterfly_8 + LDMDB r1,{r6,r7,r8,r9,r10,r11,r12,r14} + @ r6 = x[0] + @ r7 = x[1] + @ r8 = x[2] + @ r9 = x[3] + @ r10= x[4] + @ r11= x[5] + @ r12= x[6] + @ r14= x[7] + ADD r6, r6, r7 @ r6 = s0 = x[0] + x[1] + SUB r7, r6, r7, LSL #1 @ r7 = s1 = x[0] - x[1] + ADD r8, r8, r9 @ r8 = s2 = x[2] + x[3] + SUB r9, r8, r9, LSL #1 @ r9 = s3 = x[2] - x[3] + ADD r10,r10,r11 @ r10= s4 = x[4] + x[5] + SUB r11,r10,r11,LSL #1 @ r11= s5 = x[4] - x[5] + ADD r12,r12,r14 @ r12= s6 = x[6] + x[7] + SUB r14,r12,r14,LSL #1 @ r14= s7 = x[6] - x[7] + + ADD r2, r11,r9 @ r2 = x[0] = s5 + s3 + SUB r4, r2, r9, LSL #1 @ r4 = x[2] = s5 - s3 + SUB r3, r14,r7 @ r3 = x[1] = s7 - s1 + ADD r5, r3, r7, LSL #1 @ r5 = x[3] = s7 + s1 + SUB r10,r10,r6 @ r10= x[4] = s4 - s0 + SUB r11,r12,r8 @ r11= x[5] = s6 - s2 + ADD r12,r10,r6, LSL #1 @ r12= x[6] = s4 + s0 + ADD r14,r11,r8, LSL #1 @ r14= x[7] = s6 + s2 + STMDB r1,{r2,r3,r4,r5,r10,r11,r12,r14} + + @ mdct_butterfly_8 + LDMIA r1,{r6,r7,r8,r9,r10,r11,r12,r14} + @ r6 = x[0] + @ r7 = x[1] + @ r8 = x[2] + @ r9 = x[3] + @ r10= x[4] + @ r11= x[5] + @ r12= x[6] + @ r14= x[7] + ADD r6, r6, r7 @ r6 = s0 = x[0] + x[1] + SUB r7, r6, r7, LSL #1 @ r7 = s1 = x[0] - x[1] + ADD r8, r8, r9 @ r8 = s2 = x[2] + x[3] + SUB r9, r8, r9, LSL #1 @ r9 = s3 = x[2] - x[3] + ADD r10,r10,r11 @ r10= s4 = x[4] + x[5] + SUB r11,r10,r11,LSL #1 @ r11= s5 = x[4] - x[5] + ADD r12,r12,r14 @ r12= s6 = x[6] + x[7] + SUB r14,r12,r14,LSL #1 @ r14= s7 = x[6] - x[7] + + ADD r2, r11,r9 @ r2 = x[0] = s5 + s3 + SUB r4, r2, r9, LSL #1 @ r4 = x[2] = s5 - s3 + SUB r3, r14,r7 @ r3 = x[1] = s7 - s1 + ADD r5, r3, r7, LSL #1 @ r5 = x[3] = s7 + s1 + SUB r10,r10,r6 @ r10= x[4] = s4 - s0 + SUB r11,r12,r8 @ r11= x[5] = s6 - s2 + ADD r12,r10,r6, LSL #1 @ r12= x[6] = s4 + s0 + ADD r14,r11,r8, LSL #1 @ r14= x[7] = s6 + s2 + STMIA r1,{r2,r3,r4,r5,r10,r11,r12,r14} + + ADD r1,r1,#8*4 + SUBS r0,r0,#64 + BGT mdct_bufferflies_loop3 + + LDMFD r13,{r0-r3} + +mdct_bitreverseARM: + @ r0 = points + @ r1 = in + @ r2 = step + @ r3 = shift + + MOV r4, #0 @ r4 = bit = 0 + ADD r5, r1, r0, LSL #1 @ r5 = w = x + (n>>1) + ADR r6, bitrev + SUB r5, r5, #8 +brev_lp: + LDRB r7, [r6, r4, LSR #6] + AND r8, r4, #0x3f + LDRB r8, [r6, r8] + ADD r4, r4, #1 @ bit++ + @ stall XScale + ORR r7, r7, r8, LSL #6 @ r7 = bitrev[bit] + MOV r7, r7, LSR r3 + ADD r9, r1, r7, LSL #2 @ r9 = xx = x + (b>>shift) + CMP r5, r9 @ if (w > xx) + LDR r10,[r5],#-8 @ r10 = w[0] w -= 2 + LDRGT r11,[r5,#12] @ r11 = w[1] + LDRGT r12,[r9] @ r12 = xx[0] + LDRGT r14,[r9,#4] @ r14 = xx[1] + STRGT r10,[r9] @ xx[0]= w[0] + STRGT r11,[r9,#4] @ xx[1]= w[1] + STRGT r12,[r5,#8] @ w[0] = xx[0] + STRGT r14,[r5,#12] @ w[1] = xx[1] + CMP r5,r1 + BGT brev_lp + + @ mdct_step7 + @ r0 = points + @ r1 = in + @ r2 = step + @ r3 = shift + + CMP r2, #4 @ r5 = T = (step>=4) ? + LDRGE r5, =sincos_lookup0 @ sincos_lookup0 + + LDRLT r5, =sincos_lookup1 @ sincos_lookup0 + + ADD r7, r1, r0, LSL #1 @ r7 = w1 = x + (n>>1) + ADDGE r5, r5, r2, LSR #1 @ (step>>1) + ADD r8, r5, #1024 @ r8 = Ttop +step7_loop1: + LDR r6, [r1] @ r6 = w0[0] + LDR r9, [r1,#4] @ r9 = w0[1] + LDR r10,[r7,#-8]! @ r10= w1[0] w1 -= 2 + LDR r11,[r7,#4] @ r11= w1[1] + LDRB r14,[r5,#1] @ r14= T[1] + LDRB r12,[r5],r2 @ r12= T[0] T += step + + ADD r6, r6, r10 @ r6 = s0 = w0[0] + w1[0] + SUB r10,r6, r10,LSL #1 @ r10= s1b= w0[0] - w1[0] + SUB r11,r11,r9 @ r11= s1 = w1[1] - w0[1] + ADD r9, r11,r9, LSL #1 @ r9 = s0b= w1[1] + w0[1] + + MOV r6, r6, ASR #9 + MUL r3, r6, r14 @ r3 = s0*T[1] + MOV r11,r11,ASR #9 + MUL r4, r11,r12 @ r4 += s1*T[0] = s2 + ADD r3, r3, r4 + MUL r14,r11,r14 @ r14 = s1*T[1] + MUL r12,r6, r12 @ r12 += s0*T[0] = s3 + SUB r14,r14,r12 + + @ r9 = s0b<<1 + @ r10= s1b<<1 + ADD r9, r3, r9, ASR #1 @ r9 = s0b + s2 + SUB r3, r9, r3, LSL #1 @ r3 = s0b - s2 + + SUB r12,r14,r10,ASR #1 @ r12= s3 - s1b + ADD r10,r14,r10,ASR #1 @ r10= s3 + s1b + STR r9, [r1],#4 + STR r10,[r1],#4 @ w0 += 2 + STR r3, [r7] + STR r12,[r7,#4] + + CMP r5,r8 + BLT step7_loop1 + +step7_loop2: + LDR r6, [r1] @ r6 = w0[0] + LDR r9, [r1,#4] @ r9 = w0[1] + LDR r10,[r7,#-8]! @ r10= w1[0] w1 -= 2 + LDR r11,[r7,#4] @ r11= w1[1] + LDRB r14,[r5,-r2]! @ r12= T[1] T -= step + LDRB r12,[r5,#1] @ r14= T[0] + + ADD r6, r6, r10 @ r6 = s0 = w0[0] + w1[0] + SUB r10,r6, r10,LSL #1 @ r10= s1b= w0[0] - w1[0] + SUB r11,r11,r9 @ r11= s1 = w1[1] - w0[1] + ADD r9, r11,r9, LSL #1 @ r9 = s0b= w1[1] + w0[1] + + MOV r6, r6, ASR #9 + MUL r3, r6, r14 @ r3 = s0*T[0] + MOV r11,r11,ASR #9 + MUL r4, r11,r12 @ r4 += s1*T[1] = s2 + ADD r3, r3, r4 + MUL r14,r11,r14 @ r14 = s1*T[0] + MUL r12,r6, r12 @ r12 += s0*T[1] = s3 + SUB r14,r14,r12 + + @ r9 = s0b<<1 + @ r10= s1b<<1 + ADD r9, r3, r9, ASR #1 @ r9 = s0b + s2 + SUB r3, r9, r3, LSL #1 @ r3 = s0b - s2 + + SUB r12,r14,r10,ASR #1 @ r12= s3 - s1b + ADD r10,r14,r10,ASR #1 @ r10= s3 + s1b + STR r9, [r1],#4 + STR r10,[r1],#4 @ w0 += 2 + STR r3, [r7] + STR r12,[r7,#4] + + CMP r1,r7 + BLT step7_loop2 + + LDMFD r13!,{r0-r3} + + @ r0 = points + @ r1 = in + @ r2 = step + @ r3 = shift + MOV r2, r2, ASR #2 @ r2 = step >>= 2 + CMP r2, #0 + CMPNE r2, #1 + BEQ mdct_end + + @ step > 1 (default case) + CMP r2, #4 @ r5 = T = (step>=4) ? + LDRGE r5, =sincos_lookup0 @ sincos_lookup0 + + LDRLT r5, =sincos_lookup1 @ sincos_lookup1 + ADD r7, r1, r0, LSL #1 @ r7 = iX = x + (n>>1) + ADDGE r5, r5, r2, LSR #1 @ (step>>1) +mdct_step8_default: + LDR r6, [r1],#4 @ r6 = s0 = x[0] + LDR r8, [r1],#4 @ r8 = -s1 = x[1] + LDRB r12,[r5,#1] @ r12= T[1] + LDRB r14,[r5],r2 @ r14= T[0] T += step + RSB r8, r8, #0 @ r8 = s1 + + @ XPROD31(s0, s1, T[0], T[1], x, x+1) + @ x[0] = s0 * T[0] + s1 * T[1] x[1] = s1 * T[0] - s0 * T[1] + MOV r6, r6, ASR #8 + MOV r8, r8, ASR #8 + MUL r10,r8, r12 @ r10 = s1 * T[1] + CMP r1, r7 + MLA r10,r6, r14,r10 @ r10 += s0 * T[0] + RSB r6, r6, #0 @ r6 = -s0 + MUL r11,r8, r14 @ r11 = s1 * T[0] + MLA r11,r6, r12,r11 @ r11 -= s0 * T[1] + STR r10,[r1,#-8] + STR r11,[r1,#-4] + BLT mdct_step8_default + +mdct_end: + MOV r0, r2 + LDMFD r13!,{r4-r11,PC} + +bitrev: + .byte 0 + .byte 32 + .byte 16 + .byte 48 + .byte 8 + .byte 40 + .byte 24 + .byte 56 + .byte 4 + .byte 36 + .byte 20 + .byte 52 + .byte 12 + .byte 44 + .byte 28 + .byte 60 + .byte 2 + .byte 34 + .byte 18 + .byte 50 + .byte 10 + .byte 42 + .byte 26 + .byte 58 + .byte 6 + .byte 38 + .byte 22 + .byte 54 + .byte 14 + .byte 46 + .byte 30 + .byte 62 + .byte 1 + .byte 33 + .byte 17 + .byte 49 + .byte 9 + .byte 41 + .byte 25 + .byte 57 + .byte 5 + .byte 37 + .byte 21 + .byte 53 + .byte 13 + .byte 45 + .byte 29 + .byte 61 + .byte 3 + .byte 35 + .byte 19 + .byte 51 + .byte 11 + .byte 43 + .byte 27 + .byte 59 + .byte 7 + .byte 39 + .byte 23 + .byte 55 + .byte 15 + .byte 47 + .byte 31 + .byte 63 diff --git a/android/jni/tremolo/mdct_lookup.h b/android/jni/tremolo/mdct_lookup.h new file mode 100644 index 00000000..b0a06772 --- /dev/null +++ b/android/jni/tremolo/mdct_lookup.h @@ -0,0 +1,539 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: sin,cos lookup tables + + ********************************************************************/ + +#include "os_types.h" + +/* {sin(2*i*PI/4096), cos(2*i*PI/4096)}, with i = 0 to 512 */ +LOOKUP_T sincos_lookup0[1026] = { + X(0x00000000), X(0x7fffffff), X(0x003243f5), X(0x7ffff621), + X(0x006487e3), X(0x7fffd886), X(0x0096cbc1), X(0x7fffa72c), + X(0x00c90f88), X(0x7fff6216), X(0x00fb5330), X(0x7fff0943), + X(0x012d96b1), X(0x7ffe9cb2), X(0x015fda03), X(0x7ffe1c65), + X(0x01921d20), X(0x7ffd885a), X(0x01c45ffe), X(0x7ffce093), + X(0x01f6a297), X(0x7ffc250f), X(0x0228e4e2), X(0x7ffb55ce), + X(0x025b26d7), X(0x7ffa72d1), X(0x028d6870), X(0x7ff97c18), + X(0x02bfa9a4), X(0x7ff871a2), X(0x02f1ea6c), X(0x7ff75370), + X(0x03242abf), X(0x7ff62182), X(0x03566a96), X(0x7ff4dbd9), + X(0x0388a9ea), X(0x7ff38274), X(0x03bae8b2), X(0x7ff21553), + X(0x03ed26e6), X(0x7ff09478), X(0x041f6480), X(0x7feeffe1), + X(0x0451a177), X(0x7fed5791), X(0x0483ddc3), X(0x7feb9b85), + X(0x04b6195d), X(0x7fe9cbc0), X(0x04e8543e), X(0x7fe7e841), + X(0x051a8e5c), X(0x7fe5f108), X(0x054cc7b1), X(0x7fe3e616), + X(0x057f0035), X(0x7fe1c76b), X(0x05b137df), X(0x7fdf9508), + X(0x05e36ea9), X(0x7fdd4eec), X(0x0615a48b), X(0x7fdaf519), + X(0x0647d97c), X(0x7fd8878e), X(0x067a0d76), X(0x7fd6064c), + X(0x06ac406f), X(0x7fd37153), X(0x06de7262), X(0x7fd0c8a3), + X(0x0710a345), X(0x7fce0c3e), X(0x0742d311), X(0x7fcb3c23), + X(0x077501be), X(0x7fc85854), X(0x07a72f45), X(0x7fc560cf), + X(0x07d95b9e), X(0x7fc25596), X(0x080b86c2), X(0x7fbf36aa), + X(0x083db0a7), X(0x7fbc040a), X(0x086fd947), X(0x7fb8bdb8), + X(0x08a2009a), X(0x7fb563b3), X(0x08d42699), X(0x7fb1f5fc), + X(0x09064b3a), X(0x7fae7495), X(0x09386e78), X(0x7faadf7c), + X(0x096a9049), X(0x7fa736b4), X(0x099cb0a7), X(0x7fa37a3c), + X(0x09cecf89), X(0x7f9faa15), X(0x0a00ece8), X(0x7f9bc640), + X(0x0a3308bd), X(0x7f97cebd), X(0x0a6522fe), X(0x7f93c38c), + X(0x0a973ba5), X(0x7f8fa4b0), X(0x0ac952aa), X(0x7f8b7227), + X(0x0afb6805), X(0x7f872bf3), X(0x0b2d7baf), X(0x7f82d214), + X(0x0b5f8d9f), X(0x7f7e648c), X(0x0b919dcf), X(0x7f79e35a), + X(0x0bc3ac35), X(0x7f754e80), X(0x0bf5b8cb), X(0x7f70a5fe), + X(0x0c27c389), X(0x7f6be9d4), X(0x0c59cc68), X(0x7f671a05), + X(0x0c8bd35e), X(0x7f62368f), X(0x0cbdd865), X(0x7f5d3f75), + X(0x0cefdb76), X(0x7f5834b7), X(0x0d21dc87), X(0x7f531655), + X(0x0d53db92), X(0x7f4de451), X(0x0d85d88f), X(0x7f489eaa), + X(0x0db7d376), X(0x7f434563), X(0x0de9cc40), X(0x7f3dd87c), + X(0x0e1bc2e4), X(0x7f3857f6), X(0x0e4db75b), X(0x7f32c3d1), + X(0x0e7fa99e), X(0x7f2d1c0e), X(0x0eb199a4), X(0x7f2760af), + X(0x0ee38766), X(0x7f2191b4), X(0x0f1572dc), X(0x7f1baf1e), + X(0x0f475bff), X(0x7f15b8ee), X(0x0f7942c7), X(0x7f0faf25), + X(0x0fab272b), X(0x7f0991c4), X(0x0fdd0926), X(0x7f0360cb), + X(0x100ee8ad), X(0x7efd1c3c), X(0x1040c5bb), X(0x7ef6c418), + X(0x1072a048), X(0x7ef05860), X(0x10a4784b), X(0x7ee9d914), + X(0x10d64dbd), X(0x7ee34636), X(0x11082096), X(0x7edc9fc6), + X(0x1139f0cf), X(0x7ed5e5c6), X(0x116bbe60), X(0x7ecf1837), + X(0x119d8941), X(0x7ec8371a), X(0x11cf516a), X(0x7ec14270), + X(0x120116d5), X(0x7eba3a39), X(0x1232d979), X(0x7eb31e78), + X(0x1264994e), X(0x7eabef2c), X(0x1296564d), X(0x7ea4ac58), + X(0x12c8106f), X(0x7e9d55fc), X(0x12f9c7aa), X(0x7e95ec1a), + X(0x132b7bf9), X(0x7e8e6eb2), X(0x135d2d53), X(0x7e86ddc6), + X(0x138edbb1), X(0x7e7f3957), X(0x13c0870a), X(0x7e778166), + X(0x13f22f58), X(0x7e6fb5f4), X(0x1423d492), X(0x7e67d703), + X(0x145576b1), X(0x7e5fe493), X(0x148715ae), X(0x7e57dea7), + X(0x14b8b17f), X(0x7e4fc53e), X(0x14ea4a1f), X(0x7e47985b), + X(0x151bdf86), X(0x7e3f57ff), X(0x154d71aa), X(0x7e37042a), + X(0x157f0086), X(0x7e2e9cdf), X(0x15b08c12), X(0x7e26221f), + X(0x15e21445), X(0x7e1d93ea), X(0x16139918), X(0x7e14f242), + X(0x16451a83), X(0x7e0c3d29), X(0x1676987f), X(0x7e0374a0), + X(0x16a81305), X(0x7dfa98a8), X(0x16d98a0c), X(0x7df1a942), + X(0x170afd8d), X(0x7de8a670), X(0x173c6d80), X(0x7ddf9034), + X(0x176dd9de), X(0x7dd6668f), X(0x179f429f), X(0x7dcd2981), + X(0x17d0a7bc), X(0x7dc3d90d), X(0x1802092c), X(0x7dba7534), + X(0x183366e9), X(0x7db0fdf8), X(0x1864c0ea), X(0x7da77359), + X(0x18961728), X(0x7d9dd55a), X(0x18c7699b), X(0x7d9423fc), + X(0x18f8b83c), X(0x7d8a5f40), X(0x192a0304), X(0x7d808728), + X(0x195b49ea), X(0x7d769bb5), X(0x198c8ce7), X(0x7d6c9ce9), + X(0x19bdcbf3), X(0x7d628ac6), X(0x19ef0707), X(0x7d58654d), + X(0x1a203e1b), X(0x7d4e2c7f), X(0x1a517128), X(0x7d43e05e), + X(0x1a82a026), X(0x7d3980ec), X(0x1ab3cb0d), X(0x7d2f0e2b), + X(0x1ae4f1d6), X(0x7d24881b), X(0x1b161479), X(0x7d19eebf), + X(0x1b4732ef), X(0x7d0f4218), X(0x1b784d30), X(0x7d048228), + X(0x1ba96335), X(0x7cf9aef0), X(0x1bda74f6), X(0x7ceec873), + X(0x1c0b826a), X(0x7ce3ceb2), X(0x1c3c8b8c), X(0x7cd8c1ae), + X(0x1c6d9053), X(0x7ccda169), X(0x1c9e90b8), X(0x7cc26de5), + X(0x1ccf8cb3), X(0x7cb72724), X(0x1d00843d), X(0x7cabcd28), + X(0x1d31774d), X(0x7ca05ff1), X(0x1d6265dd), X(0x7c94df83), + X(0x1d934fe5), X(0x7c894bde), X(0x1dc4355e), X(0x7c7da505), + X(0x1df5163f), X(0x7c71eaf9), X(0x1e25f282), X(0x7c661dbc), + X(0x1e56ca1e), X(0x7c5a3d50), X(0x1e879d0d), X(0x7c4e49b7), + X(0x1eb86b46), X(0x7c4242f2), X(0x1ee934c3), X(0x7c362904), + X(0x1f19f97b), X(0x7c29fbee), X(0x1f4ab968), X(0x7c1dbbb3), + X(0x1f7b7481), X(0x7c116853), X(0x1fac2abf), X(0x7c0501d2), + X(0x1fdcdc1b), X(0x7bf88830), X(0x200d888d), X(0x7bebfb70), + X(0x203e300d), X(0x7bdf5b94), X(0x206ed295), X(0x7bd2a89e), + X(0x209f701c), X(0x7bc5e290), X(0x20d0089c), X(0x7bb9096b), + X(0x21009c0c), X(0x7bac1d31), X(0x21312a65), X(0x7b9f1de6), + X(0x2161b3a0), X(0x7b920b89), X(0x219237b5), X(0x7b84e61f), + X(0x21c2b69c), X(0x7b77ada8), X(0x21f3304f), X(0x7b6a6227), + X(0x2223a4c5), X(0x7b5d039e), X(0x225413f8), X(0x7b4f920e), + X(0x22847de0), X(0x7b420d7a), X(0x22b4e274), X(0x7b3475e5), + X(0x22e541af), X(0x7b26cb4f), X(0x23159b88), X(0x7b190dbc), + X(0x2345eff8), X(0x7b0b3d2c), X(0x23763ef7), X(0x7afd59a4), + X(0x23a6887f), X(0x7aef6323), X(0x23d6cc87), X(0x7ae159ae), + X(0x24070b08), X(0x7ad33d45), X(0x243743fa), X(0x7ac50dec), + X(0x24677758), X(0x7ab6cba4), X(0x2497a517), X(0x7aa8766f), + X(0x24c7cd33), X(0x7a9a0e50), X(0x24f7efa2), X(0x7a8b9348), + X(0x25280c5e), X(0x7a7d055b), X(0x2558235f), X(0x7a6e648a), + X(0x2588349d), X(0x7a5fb0d8), X(0x25b84012), X(0x7a50ea47), + X(0x25e845b6), X(0x7a4210d8), X(0x26184581), X(0x7a332490), + X(0x26483f6c), X(0x7a24256f), X(0x26783370), X(0x7a151378), + X(0x26a82186), X(0x7a05eead), X(0x26d809a5), X(0x79f6b711), + X(0x2707ebc7), X(0x79e76ca7), X(0x2737c7e3), X(0x79d80f6f), + X(0x27679df4), X(0x79c89f6e), X(0x27976df1), X(0x79b91ca4), + X(0x27c737d3), X(0x79a98715), X(0x27f6fb92), X(0x7999dec4), + X(0x2826b928), X(0x798a23b1), X(0x2856708d), X(0x797a55e0), + X(0x288621b9), X(0x796a7554), X(0x28b5cca5), X(0x795a820e), + X(0x28e5714b), X(0x794a7c12), X(0x29150fa1), X(0x793a6361), + X(0x2944a7a2), X(0x792a37fe), X(0x29743946), X(0x7919f9ec), + X(0x29a3c485), X(0x7909a92d), X(0x29d34958), X(0x78f945c3), + X(0x2a02c7b8), X(0x78e8cfb2), X(0x2a323f9e), X(0x78d846fb), + X(0x2a61b101), X(0x78c7aba2), X(0x2a911bdc), X(0x78b6fda8), + X(0x2ac08026), X(0x78a63d11), X(0x2aefddd8), X(0x789569df), + X(0x2b1f34eb), X(0x78848414), X(0x2b4e8558), X(0x78738bb3), + X(0x2b7dcf17), X(0x786280bf), X(0x2bad1221), X(0x7851633b), + X(0x2bdc4e6f), X(0x78403329), X(0x2c0b83fa), X(0x782ef08b), + X(0x2c3ab2b9), X(0x781d9b65), X(0x2c69daa6), X(0x780c33b8), + X(0x2c98fbba), X(0x77fab989), X(0x2cc815ee), X(0x77e92cd9), + X(0x2cf72939), X(0x77d78daa), X(0x2d263596), X(0x77c5dc01), + X(0x2d553afc), X(0x77b417df), X(0x2d843964), X(0x77a24148), + X(0x2db330c7), X(0x7790583e), X(0x2de2211e), X(0x777e5cc3), + X(0x2e110a62), X(0x776c4edb), X(0x2e3fec8b), X(0x775a2e89), + X(0x2e6ec792), X(0x7747fbce), X(0x2e9d9b70), X(0x7735b6af), + X(0x2ecc681e), X(0x77235f2d), X(0x2efb2d95), X(0x7710f54c), + X(0x2f29ebcc), X(0x76fe790e), X(0x2f58a2be), X(0x76ebea77), + X(0x2f875262), X(0x76d94989), X(0x2fb5fab2), X(0x76c69647), + X(0x2fe49ba7), X(0x76b3d0b4), X(0x30133539), X(0x76a0f8d2), + X(0x3041c761), X(0x768e0ea6), X(0x30705217), X(0x767b1231), + X(0x309ed556), X(0x76680376), X(0x30cd5115), X(0x7654e279), + X(0x30fbc54d), X(0x7641af3d), X(0x312a31f8), X(0x762e69c4), + X(0x3158970e), X(0x761b1211), X(0x3186f487), X(0x7607a828), + X(0x31b54a5e), X(0x75f42c0b), X(0x31e39889), X(0x75e09dbd), + X(0x3211df04), X(0x75ccfd42), X(0x32401dc6), X(0x75b94a9c), + X(0x326e54c7), X(0x75a585cf), X(0x329c8402), X(0x7591aedd), + X(0x32caab6f), X(0x757dc5ca), X(0x32f8cb07), X(0x7569ca99), + X(0x3326e2c3), X(0x7555bd4c), X(0x3354f29b), X(0x75419de7), + X(0x3382fa88), X(0x752d6c6c), X(0x33b0fa84), X(0x751928e0), + X(0x33def287), X(0x7504d345), X(0x340ce28b), X(0x74f06b9e), + X(0x343aca87), X(0x74dbf1ef), X(0x3468aa76), X(0x74c7663a), + X(0x34968250), X(0x74b2c884), X(0x34c4520d), X(0x749e18cd), + X(0x34f219a8), X(0x7489571c), X(0x351fd918), X(0x74748371), + X(0x354d9057), X(0x745f9dd1), X(0x357b3f5d), X(0x744aa63f), + X(0x35a8e625), X(0x74359cbd), X(0x35d684a6), X(0x74208150), + X(0x36041ad9), X(0x740b53fb), X(0x3631a8b8), X(0x73f614c0), + X(0x365f2e3b), X(0x73e0c3a3), X(0x368cab5c), X(0x73cb60a8), + X(0x36ba2014), X(0x73b5ebd1), X(0x36e78c5b), X(0x73a06522), + X(0x3714f02a), X(0x738acc9e), X(0x37424b7b), X(0x73752249), + X(0x376f9e46), X(0x735f6626), X(0x379ce885), X(0x73499838), + X(0x37ca2a30), X(0x7333b883), X(0x37f76341), X(0x731dc70a), + X(0x382493b0), X(0x7307c3d0), X(0x3851bb77), X(0x72f1aed9), + X(0x387eda8e), X(0x72db8828), X(0x38abf0ef), X(0x72c54fc1), + X(0x38d8fe93), X(0x72af05a7), X(0x39060373), X(0x7298a9dd), + X(0x3932ff87), X(0x72823c67), X(0x395ff2c9), X(0x726bbd48), + X(0x398cdd32), X(0x72552c85), X(0x39b9bebc), X(0x723e8a20), + X(0x39e6975e), X(0x7227d61c), X(0x3a136712), X(0x7211107e), + X(0x3a402dd2), X(0x71fa3949), X(0x3a6ceb96), X(0x71e35080), + X(0x3a99a057), X(0x71cc5626), X(0x3ac64c0f), X(0x71b54a41), + X(0x3af2eeb7), X(0x719e2cd2), X(0x3b1f8848), X(0x7186fdde), + X(0x3b4c18ba), X(0x716fbd68), X(0x3b78a007), X(0x71586b74), + X(0x3ba51e29), X(0x71410805), X(0x3bd19318), X(0x7129931f), + X(0x3bfdfecd), X(0x71120cc5), X(0x3c2a6142), X(0x70fa74fc), + X(0x3c56ba70), X(0x70e2cbc6), X(0x3c830a50), X(0x70cb1128), + X(0x3caf50da), X(0x70b34525), X(0x3cdb8e09), X(0x709b67c0), + X(0x3d07c1d6), X(0x708378ff), X(0x3d33ec39), X(0x706b78e3), + X(0x3d600d2c), X(0x70536771), X(0x3d8c24a8), X(0x703b44ad), + X(0x3db832a6), X(0x7023109a), X(0x3de4371f), X(0x700acb3c), + X(0x3e10320d), X(0x6ff27497), X(0x3e3c2369), X(0x6fda0cae), + X(0x3e680b2c), X(0x6fc19385), X(0x3e93e950), X(0x6fa90921), + X(0x3ebfbdcd), X(0x6f906d84), X(0x3eeb889c), X(0x6f77c0b3), + X(0x3f1749b8), X(0x6f5f02b2), X(0x3f430119), X(0x6f463383), + X(0x3f6eaeb8), X(0x6f2d532c), X(0x3f9a5290), X(0x6f1461b0), + X(0x3fc5ec98), X(0x6efb5f12), X(0x3ff17cca), X(0x6ee24b57), + X(0x401d0321), X(0x6ec92683), X(0x40487f94), X(0x6eaff099), + X(0x4073f21d), X(0x6e96a99d), X(0x409f5ab6), X(0x6e7d5193), + X(0x40cab958), X(0x6e63e87f), X(0x40f60dfb), X(0x6e4a6e66), + X(0x4121589b), X(0x6e30e34a), X(0x414c992f), X(0x6e174730), + X(0x4177cfb1), X(0x6dfd9a1c), X(0x41a2fc1a), X(0x6de3dc11), + X(0x41ce1e65), X(0x6dca0d14), X(0x41f93689), X(0x6db02d29), + X(0x42244481), X(0x6d963c54), X(0x424f4845), X(0x6d7c3a98), + X(0x427a41d0), X(0x6d6227fa), X(0x42a5311b), X(0x6d48047e), + X(0x42d0161e), X(0x6d2dd027), X(0x42faf0d4), X(0x6d138afb), + X(0x4325c135), X(0x6cf934fc), X(0x4350873c), X(0x6cdece2f), + X(0x437b42e1), X(0x6cc45698), X(0x43a5f41e), X(0x6ca9ce3b), + X(0x43d09aed), X(0x6c8f351c), X(0x43fb3746), X(0x6c748b3f), + X(0x4425c923), X(0x6c59d0a9), X(0x4450507e), X(0x6c3f055d), + X(0x447acd50), X(0x6c242960), X(0x44a53f93), X(0x6c093cb6), + X(0x44cfa740), X(0x6bee3f62), X(0x44fa0450), X(0x6bd3316a), + X(0x452456bd), X(0x6bb812d1), X(0x454e9e80), X(0x6b9ce39b), + X(0x4578db93), X(0x6b81a3cd), X(0x45a30df0), X(0x6b66536b), + X(0x45cd358f), X(0x6b4af279), X(0x45f7526b), X(0x6b2f80fb), + X(0x4621647d), X(0x6b13fef5), X(0x464b6bbe), X(0x6af86c6c), + X(0x46756828), X(0x6adcc964), X(0x469f59b4), X(0x6ac115e2), + X(0x46c9405c), X(0x6aa551e9), X(0x46f31c1a), X(0x6a897d7d), + X(0x471cece7), X(0x6a6d98a4), X(0x4746b2bc), X(0x6a51a361), + X(0x47706d93), X(0x6a359db9), X(0x479a1d67), X(0x6a1987b0), + X(0x47c3c22f), X(0x69fd614a), X(0x47ed5be6), X(0x69e12a8c), + X(0x4816ea86), X(0x69c4e37a), X(0x48406e08), X(0x69a88c19), + X(0x4869e665), X(0x698c246c), X(0x48935397), X(0x696fac78), + X(0x48bcb599), X(0x69532442), X(0x48e60c62), X(0x69368bce), + X(0x490f57ee), X(0x6919e320), X(0x49389836), X(0x68fd2a3d), + X(0x4961cd33), X(0x68e06129), X(0x498af6df), X(0x68c387e9), + X(0x49b41533), X(0x68a69e81), X(0x49dd282a), X(0x6889a4f6), + X(0x4a062fbd), X(0x686c9b4b), X(0x4a2f2be6), X(0x684f8186), + X(0x4a581c9e), X(0x683257ab), X(0x4a8101de), X(0x68151dbe), + X(0x4aa9dba2), X(0x67f7d3c5), X(0x4ad2a9e2), X(0x67da79c3), + X(0x4afb6c98), X(0x67bd0fbd), X(0x4b2423be), X(0x679f95b7), + X(0x4b4ccf4d), X(0x67820bb7), X(0x4b756f40), X(0x676471c0), + X(0x4b9e0390), X(0x6746c7d8), X(0x4bc68c36), X(0x67290e02), + X(0x4bef092d), X(0x670b4444), X(0x4c177a6e), X(0x66ed6aa1), + X(0x4c3fdff4), X(0x66cf8120), X(0x4c6839b7), X(0x66b187c3), + X(0x4c9087b1), X(0x66937e91), X(0x4cb8c9dd), X(0x6675658c), + X(0x4ce10034), X(0x66573cbb), X(0x4d092ab0), X(0x66390422), + X(0x4d31494b), X(0x661abbc5), X(0x4d595bfe), X(0x65fc63a9), + X(0x4d8162c4), X(0x65ddfbd3), X(0x4da95d96), X(0x65bf8447), + X(0x4dd14c6e), X(0x65a0fd0b), X(0x4df92f46), X(0x65826622), + X(0x4e210617), X(0x6563bf92), X(0x4e48d0dd), X(0x6545095f), + X(0x4e708f8f), X(0x6526438f), X(0x4e984229), X(0x65076e25), + X(0x4ebfe8a5), X(0x64e88926), X(0x4ee782fb), X(0x64c99498), + X(0x4f0f1126), X(0x64aa907f), X(0x4f369320), X(0x648b7ce0), + X(0x4f5e08e3), X(0x646c59bf), X(0x4f857269), X(0x644d2722), + X(0x4faccfab), X(0x642de50d), X(0x4fd420a4), X(0x640e9386), + X(0x4ffb654d), X(0x63ef3290), X(0x50229da1), X(0x63cfc231), + X(0x5049c999), X(0x63b0426d), X(0x5070e92f), X(0x6390b34a), + X(0x5097fc5e), X(0x637114cc), X(0x50bf031f), X(0x635166f9), + X(0x50e5fd6d), X(0x6331a9d4), X(0x510ceb40), X(0x6311dd64), + X(0x5133cc94), X(0x62f201ac), X(0x515aa162), X(0x62d216b3), + X(0x518169a5), X(0x62b21c7b), X(0x51a82555), X(0x6292130c), + X(0x51ced46e), X(0x6271fa69), X(0x51f576ea), X(0x6251d298), + X(0x521c0cc2), X(0x62319b9d), X(0x524295f0), X(0x6211557e), + X(0x5269126e), X(0x61f1003f), X(0x528f8238), X(0x61d09be5), + X(0x52b5e546), X(0x61b02876), X(0x52dc3b92), X(0x618fa5f7), + X(0x53028518), X(0x616f146c), X(0x5328c1d0), X(0x614e73da), + X(0x534ef1b5), X(0x612dc447), X(0x537514c2), X(0x610d05b7), + X(0x539b2af0), X(0x60ec3830), X(0x53c13439), X(0x60cb5bb7), + X(0x53e73097), X(0x60aa7050), X(0x540d2005), X(0x60897601), + X(0x5433027d), X(0x60686ccf), X(0x5458d7f9), X(0x604754bf), + X(0x547ea073), X(0x60262dd6), X(0x54a45be6), X(0x6004f819), + X(0x54ca0a4b), X(0x5fe3b38d), X(0x54efab9c), X(0x5fc26038), + X(0x55153fd4), X(0x5fa0fe1f), X(0x553ac6ee), X(0x5f7f8d46), + X(0x556040e2), X(0x5f5e0db3), X(0x5585adad), X(0x5f3c7f6b), + X(0x55ab0d46), X(0x5f1ae274), X(0x55d05faa), X(0x5ef936d1), + X(0x55f5a4d2), X(0x5ed77c8a), X(0x561adcb9), X(0x5eb5b3a2), + X(0x56400758), X(0x5e93dc1f), X(0x566524aa), X(0x5e71f606), + X(0x568a34a9), X(0x5e50015d), X(0x56af3750), X(0x5e2dfe29), + X(0x56d42c99), X(0x5e0bec6e), X(0x56f9147e), X(0x5de9cc33), + X(0x571deefa), X(0x5dc79d7c), X(0x5742bc06), X(0x5da5604f), + X(0x57677b9d), X(0x5d8314b1), X(0x578c2dba), X(0x5d60baa7), + X(0x57b0d256), X(0x5d3e5237), X(0x57d5696d), X(0x5d1bdb65), + X(0x57f9f2f8), X(0x5cf95638), X(0x581e6ef1), X(0x5cd6c2b5), + X(0x5842dd54), X(0x5cb420e0), X(0x58673e1b), X(0x5c9170bf), + X(0x588b9140), X(0x5c6eb258), X(0x58afd6bd), X(0x5c4be5b0), + X(0x58d40e8c), X(0x5c290acc), X(0x58f838a9), X(0x5c0621b2), + X(0x591c550e), X(0x5be32a67), X(0x594063b5), X(0x5bc024f0), + X(0x59646498), X(0x5b9d1154), X(0x598857b2), X(0x5b79ef96), + X(0x59ac3cfd), X(0x5b56bfbd), X(0x59d01475), X(0x5b3381ce), + X(0x59f3de12), X(0x5b1035cf), X(0x5a1799d1), X(0x5aecdbc5), + X(0x5a3b47ab), X(0x5ac973b5), X(0x5a5ee79a), X(0x5aa5fda5), + X(0x5a82799a), X(0x5a82799a) + }; + + /* {sin((2*i+1)*PI/4096), cos((2*i+1)*PI/4096)}, with i = 0 to 511 */ +LOOKUP_T sincos_lookup1[1024] = { + X(0x001921fb), X(0x7ffffd88), X(0x004b65ee), X(0x7fffe9cb), + X(0x007da9d4), X(0x7fffc251), X(0x00afeda8), X(0x7fff8719), + X(0x00e23160), X(0x7fff3824), X(0x011474f6), X(0x7ffed572), + X(0x0146b860), X(0x7ffe5f03), X(0x0178fb99), X(0x7ffdd4d7), + X(0x01ab3e97), X(0x7ffd36ee), X(0x01dd8154), X(0x7ffc8549), + X(0x020fc3c6), X(0x7ffbbfe6), X(0x024205e8), X(0x7ffae6c7), + X(0x027447b0), X(0x7ff9f9ec), X(0x02a68917), X(0x7ff8f954), + X(0x02d8ca16), X(0x7ff7e500), X(0x030b0aa4), X(0x7ff6bcf0), + X(0x033d4abb), X(0x7ff58125), X(0x036f8a51), X(0x7ff4319d), + X(0x03a1c960), X(0x7ff2ce5b), X(0x03d407df), X(0x7ff1575d), + X(0x040645c7), X(0x7fefcca4), X(0x04388310), X(0x7fee2e30), + X(0x046abfb3), X(0x7fec7c02), X(0x049cfba7), X(0x7feab61a), + X(0x04cf36e5), X(0x7fe8dc78), X(0x05017165), X(0x7fe6ef1c), + X(0x0533ab20), X(0x7fe4ee06), X(0x0565e40d), X(0x7fe2d938), + X(0x05981c26), X(0x7fe0b0b1), X(0x05ca5361), X(0x7fde7471), + X(0x05fc89b8), X(0x7fdc247a), X(0x062ebf22), X(0x7fd9c0ca), + X(0x0660f398), X(0x7fd74964), X(0x06932713), X(0x7fd4be46), + X(0x06c5598a), X(0x7fd21f72), X(0x06f78af6), X(0x7fcf6ce8), + X(0x0729bb4e), X(0x7fcca6a7), X(0x075bea8c), X(0x7fc9ccb2), + X(0x078e18a7), X(0x7fc6df08), X(0x07c04598), X(0x7fc3dda9), + X(0x07f27157), X(0x7fc0c896), X(0x08249bdd), X(0x7fbd9fd0), + X(0x0856c520), X(0x7fba6357), X(0x0888ed1b), X(0x7fb7132b), + X(0x08bb13c5), X(0x7fb3af4e), X(0x08ed3916), X(0x7fb037bf), + X(0x091f5d06), X(0x7facac7f), X(0x09517f8f), X(0x7fa90d8e), + X(0x0983a0a7), X(0x7fa55aee), X(0x09b5c048), X(0x7fa1949e), + X(0x09e7de6a), X(0x7f9dbaa0), X(0x0a19fb04), X(0x7f99ccf4), + X(0x0a4c1610), X(0x7f95cb9a), X(0x0a7e2f85), X(0x7f91b694), + X(0x0ab0475c), X(0x7f8d8de1), X(0x0ae25d8d), X(0x7f895182), + X(0x0b147211), X(0x7f850179), X(0x0b4684df), X(0x7f809dc5), + X(0x0b7895f0), X(0x7f7c2668), X(0x0baaa53b), X(0x7f779b62), + X(0x0bdcb2bb), X(0x7f72fcb4), X(0x0c0ebe66), X(0x7f6e4a5e), + X(0x0c40c835), X(0x7f698461), X(0x0c72d020), X(0x7f64aabf), + X(0x0ca4d620), X(0x7f5fbd77), X(0x0cd6da2d), X(0x7f5abc8a), + X(0x0d08dc3f), X(0x7f55a7fa), X(0x0d3adc4e), X(0x7f507fc7), + X(0x0d6cda53), X(0x7f4b43f2), X(0x0d9ed646), X(0x7f45f47b), + X(0x0dd0d01f), X(0x7f409164), X(0x0e02c7d7), X(0x7f3b1aad), + X(0x0e34bd66), X(0x7f359057), X(0x0e66b0c3), X(0x7f2ff263), + X(0x0e98a1e9), X(0x7f2a40d2), X(0x0eca90ce), X(0x7f247ba5), + X(0x0efc7d6b), X(0x7f1ea2dc), X(0x0f2e67b8), X(0x7f18b679), + X(0x0f604faf), X(0x7f12b67c), X(0x0f923546), X(0x7f0ca2e7), + X(0x0fc41876), X(0x7f067bba), X(0x0ff5f938), X(0x7f0040f6), + X(0x1027d784), X(0x7ef9f29d), X(0x1059b352), X(0x7ef390ae), + X(0x108b8c9b), X(0x7eed1b2c), X(0x10bd6356), X(0x7ee69217), + X(0x10ef377d), X(0x7edff570), X(0x11210907), X(0x7ed94538), + X(0x1152d7ed), X(0x7ed28171), X(0x1184a427), X(0x7ecbaa1a), + X(0x11b66dad), X(0x7ec4bf36), X(0x11e83478), X(0x7ebdc0c6), + X(0x1219f880), X(0x7eb6aeca), X(0x124bb9be), X(0x7eaf8943), + X(0x127d7829), X(0x7ea85033), X(0x12af33ba), X(0x7ea1039b), + X(0x12e0ec6a), X(0x7e99a37c), X(0x1312a230), X(0x7e922fd6), + X(0x13445505), X(0x7e8aa8ac), X(0x137604e2), X(0x7e830dff), + X(0x13a7b1bf), X(0x7e7b5fce), X(0x13d95b93), X(0x7e739e1d), + X(0x140b0258), X(0x7e6bc8eb), X(0x143ca605), X(0x7e63e03b), + X(0x146e4694), X(0x7e5be40c), X(0x149fe3fc), X(0x7e53d462), + X(0x14d17e36), X(0x7e4bb13c), X(0x1503153a), X(0x7e437a9c), + X(0x1534a901), X(0x7e3b3083), X(0x15663982), X(0x7e32d2f4), + X(0x1597c6b7), X(0x7e2a61ed), X(0x15c95097), X(0x7e21dd73), + X(0x15fad71b), X(0x7e194584), X(0x162c5a3b), X(0x7e109a24), + X(0x165dd9f0), X(0x7e07db52), X(0x168f5632), X(0x7dff0911), + X(0x16c0cef9), X(0x7df62362), X(0x16f2443e), X(0x7ded2a47), + X(0x1723b5f9), X(0x7de41dc0), X(0x17552422), X(0x7ddafdce), + X(0x17868eb3), X(0x7dd1ca75), X(0x17b7f5a3), X(0x7dc883b4), + X(0x17e958ea), X(0x7dbf298d), X(0x181ab881), X(0x7db5bc02), + X(0x184c1461), X(0x7dac3b15), X(0x187d6c82), X(0x7da2a6c6), + X(0x18aec0db), X(0x7d98ff17), X(0x18e01167), X(0x7d8f4409), + X(0x19115e1c), X(0x7d85759f), X(0x1942a6f3), X(0x7d7b93da), + X(0x1973ebe6), X(0x7d719eba), X(0x19a52ceb), X(0x7d679642), + X(0x19d669fc), X(0x7d5d7a74), X(0x1a07a311), X(0x7d534b50), + X(0x1a38d823), X(0x7d4908d9), X(0x1a6a0929), X(0x7d3eb30f), + X(0x1a9b361d), X(0x7d3449f5), X(0x1acc5ef6), X(0x7d29cd8c), + X(0x1afd83ad), X(0x7d1f3dd6), X(0x1b2ea43a), X(0x7d149ad5), + X(0x1b5fc097), X(0x7d09e489), X(0x1b90d8bb), X(0x7cff1af5), + X(0x1bc1ec9e), X(0x7cf43e1a), X(0x1bf2fc3a), X(0x7ce94dfb), + X(0x1c240786), X(0x7cde4a98), X(0x1c550e7c), X(0x7cd333f3), + X(0x1c861113), X(0x7cc80a0f), X(0x1cb70f43), X(0x7cbcccec), + X(0x1ce80906), X(0x7cb17c8d), X(0x1d18fe54), X(0x7ca618f3), + X(0x1d49ef26), X(0x7c9aa221), X(0x1d7adb73), X(0x7c8f1817), + X(0x1dabc334), X(0x7c837ad8), X(0x1ddca662), X(0x7c77ca65), + X(0x1e0d84f5), X(0x7c6c06c0), X(0x1e3e5ee5), X(0x7c602fec), + X(0x1e6f342c), X(0x7c5445e9), X(0x1ea004c1), X(0x7c4848ba), + X(0x1ed0d09d), X(0x7c3c3860), X(0x1f0197b8), X(0x7c3014de), + X(0x1f325a0b), X(0x7c23de35), X(0x1f63178f), X(0x7c179467), + X(0x1f93d03c), X(0x7c0b3777), X(0x1fc4840a), X(0x7bfec765), + X(0x1ff532f2), X(0x7bf24434), X(0x2025dcec), X(0x7be5ade6), + X(0x205681f1), X(0x7bd9047c), X(0x208721f9), X(0x7bcc47fa), + X(0x20b7bcfe), X(0x7bbf7860), X(0x20e852f6), X(0x7bb295b0), + X(0x2118e3dc), X(0x7ba59fee), X(0x21496fa7), X(0x7b989719), + X(0x2179f64f), X(0x7b8b7b36), X(0x21aa77cf), X(0x7b7e4c45), + X(0x21daf41d), X(0x7b710a49), X(0x220b6b32), X(0x7b63b543), + X(0x223bdd08), X(0x7b564d36), X(0x226c4996), X(0x7b48d225), + X(0x229cb0d5), X(0x7b3b4410), X(0x22cd12bd), X(0x7b2da2fa), + X(0x22fd6f48), X(0x7b1feee5), X(0x232dc66d), X(0x7b1227d3), + X(0x235e1826), X(0x7b044dc7), X(0x238e646a), X(0x7af660c2), + X(0x23beab33), X(0x7ae860c7), X(0x23eeec78), X(0x7ada4dd8), + X(0x241f2833), X(0x7acc27f7), X(0x244f5e5c), X(0x7abdef25), + X(0x247f8eec), X(0x7aafa367), X(0x24afb9da), X(0x7aa144bc), + X(0x24dfdf20), X(0x7a92d329), X(0x250ffeb7), X(0x7a844eae), + X(0x25401896), X(0x7a75b74f), X(0x25702cb7), X(0x7a670d0d), + X(0x25a03b11), X(0x7a584feb), X(0x25d0439f), X(0x7a497feb), + X(0x26004657), X(0x7a3a9d0f), X(0x26304333), X(0x7a2ba75a), + X(0x26603a2c), X(0x7a1c9ece), X(0x26902b39), X(0x7a0d836d), + X(0x26c01655), X(0x79fe5539), X(0x26effb76), X(0x79ef1436), + X(0x271fda96), X(0x79dfc064), X(0x274fb3ae), X(0x79d059c8), + X(0x277f86b5), X(0x79c0e062), X(0x27af53a6), X(0x79b15435), + X(0x27df1a77), X(0x79a1b545), X(0x280edb23), X(0x79920392), + X(0x283e95a1), X(0x79823f20), X(0x286e49ea), X(0x797267f2), + X(0x289df7f8), X(0x79627e08), X(0x28cd9fc1), X(0x79528167), + X(0x28fd4140), X(0x79427210), X(0x292cdc6d), X(0x79325006), + X(0x295c7140), X(0x79221b4b), X(0x298bffb2), X(0x7911d3e2), + X(0x29bb87bc), X(0x790179cd), X(0x29eb0957), X(0x78f10d0f), + X(0x2a1a847b), X(0x78e08dab), X(0x2a49f920), X(0x78cffba3), + X(0x2a796740), X(0x78bf56f9), X(0x2aa8ced3), X(0x78ae9fb0), + X(0x2ad82fd2), X(0x789dd5cb), X(0x2b078a36), X(0x788cf94c), + X(0x2b36ddf7), X(0x787c0a36), X(0x2b662b0e), X(0x786b088c), + X(0x2b957173), X(0x7859f44f), X(0x2bc4b120), X(0x7848cd83), + X(0x2bf3ea0d), X(0x7837942b), X(0x2c231c33), X(0x78264849), + X(0x2c52478a), X(0x7814e9df), X(0x2c816c0c), X(0x780378f1), + X(0x2cb089b1), X(0x77f1f581), X(0x2cdfa071), X(0x77e05f91), + X(0x2d0eb046), X(0x77ceb725), X(0x2d3db928), X(0x77bcfc3f), + X(0x2d6cbb10), X(0x77ab2ee2), X(0x2d9bb5f6), X(0x77994f11), + X(0x2dcaa9d5), X(0x77875cce), X(0x2df996a3), X(0x7775581d), + X(0x2e287c5a), X(0x776340ff), X(0x2e575af3), X(0x77511778), + X(0x2e863267), X(0x773edb8b), X(0x2eb502ae), X(0x772c8d3a), + X(0x2ee3cbc1), X(0x771a2c88), X(0x2f128d99), X(0x7707b979), + X(0x2f41482e), X(0x76f5340e), X(0x2f6ffb7a), X(0x76e29c4b), + X(0x2f9ea775), X(0x76cff232), X(0x2fcd4c19), X(0x76bd35c7), + X(0x2ffbe95d), X(0x76aa670d), X(0x302a7f3a), X(0x76978605), + X(0x30590dab), X(0x768492b4), X(0x308794a6), X(0x76718d1c), + X(0x30b61426), X(0x765e7540), X(0x30e48c22), X(0x764b4b23), + X(0x3112fc95), X(0x76380ec8), X(0x31416576), X(0x7624c031), + X(0x316fc6be), X(0x76115f63), X(0x319e2067), X(0x75fdec60), + X(0x31cc7269), X(0x75ea672a), X(0x31fabcbd), X(0x75d6cfc5), + X(0x3228ff5c), X(0x75c32634), X(0x32573a3f), X(0x75af6a7b), + X(0x32856d5e), X(0x759b9c9b), X(0x32b398b3), X(0x7587bc98), + X(0x32e1bc36), X(0x7573ca75), X(0x330fd7e1), X(0x755fc635), + X(0x333debab), X(0x754bafdc), X(0x336bf78f), X(0x7537876c), + X(0x3399fb85), X(0x75234ce8), X(0x33c7f785), X(0x750f0054), + X(0x33f5eb89), X(0x74faa1b3), X(0x3423d78a), X(0x74e63108), + X(0x3451bb81), X(0x74d1ae55), X(0x347f9766), X(0x74bd199f), + X(0x34ad6b32), X(0x74a872e8), X(0x34db36df), X(0x7493ba34), + X(0x3508fa66), X(0x747eef85), X(0x3536b5be), X(0x746a12df), + X(0x356468e2), X(0x74552446), X(0x359213c9), X(0x744023bc), + X(0x35bfb66e), X(0x742b1144), X(0x35ed50c9), X(0x7415ece2), + X(0x361ae2d3), X(0x7400b69a), X(0x36486c86), X(0x73eb6e6e), + X(0x3675edd9), X(0x73d61461), X(0x36a366c6), X(0x73c0a878), + X(0x36d0d746), X(0x73ab2ab4), X(0x36fe3f52), X(0x73959b1b), + X(0x372b9ee3), X(0x737ff9ae), X(0x3758f5f2), X(0x736a4671), + X(0x37864477), X(0x73548168), X(0x37b38a6d), X(0x733eaa96), + X(0x37e0c7cc), X(0x7328c1ff), X(0x380dfc8d), X(0x7312c7a5), + X(0x383b28a9), X(0x72fcbb8c), X(0x38684c19), X(0x72e69db7), + X(0x389566d6), X(0x72d06e2b), X(0x38c278d9), X(0x72ba2cea), + X(0x38ef821c), X(0x72a3d9f7), X(0x391c8297), X(0x728d7557), + X(0x39497a43), X(0x7276ff0d), X(0x39766919), X(0x7260771b), + X(0x39a34f13), X(0x7249dd86), X(0x39d02c2a), X(0x72333251), + X(0x39fd0056), X(0x721c7580), X(0x3a29cb91), X(0x7205a716), + X(0x3a568dd4), X(0x71eec716), X(0x3a834717), X(0x71d7d585), + X(0x3aaff755), X(0x71c0d265), X(0x3adc9e86), X(0x71a9bdba), + X(0x3b093ca3), X(0x71929789), X(0x3b35d1a5), X(0x717b5fd3), + X(0x3b625d86), X(0x7164169d), X(0x3b8ee03e), X(0x714cbbeb), + X(0x3bbb59c7), X(0x71354fc0), X(0x3be7ca1a), X(0x711dd220), + X(0x3c143130), X(0x7106430e), X(0x3c408f03), X(0x70eea28e), + X(0x3c6ce38a), X(0x70d6f0a4), X(0x3c992ec0), X(0x70bf2d53), + X(0x3cc5709e), X(0x70a7589f), X(0x3cf1a91c), X(0x708f728b), + X(0x3d1dd835), X(0x70777b1c), X(0x3d49fde1), X(0x705f7255), + X(0x3d761a19), X(0x70475839), X(0x3da22cd7), X(0x702f2ccd), + X(0x3dce3614), X(0x7016f014), X(0x3dfa35c8), X(0x6ffea212), + X(0x3e262bee), X(0x6fe642ca), X(0x3e52187f), X(0x6fcdd241), + X(0x3e7dfb73), X(0x6fb5507a), X(0x3ea9d4c3), X(0x6f9cbd79), + X(0x3ed5a46b), X(0x6f841942), X(0x3f016a61), X(0x6f6b63d8), + X(0x3f2d26a0), X(0x6f529d40), X(0x3f58d921), X(0x6f39c57d), + X(0x3f8481dd), X(0x6f20dc92), X(0x3fb020ce), X(0x6f07e285), + X(0x3fdbb5ec), X(0x6eeed758), X(0x40074132), X(0x6ed5bb10), + X(0x4032c297), X(0x6ebc8db0), X(0x405e3a16), X(0x6ea34f3d), + X(0x4089a7a8), X(0x6e89ffb9), X(0x40b50b46), X(0x6e709f2a), + X(0x40e064ea), X(0x6e572d93), X(0x410bb48c), X(0x6e3daaf8), + X(0x4136fa27), X(0x6e24175c), X(0x416235b2), X(0x6e0a72c5), + X(0x418d6729), X(0x6df0bd35), X(0x41b88e84), X(0x6dd6f6b1), + X(0x41e3abbc), X(0x6dbd1f3c), X(0x420ebecb), X(0x6da336dc), + X(0x4239c7aa), X(0x6d893d93), X(0x4264c653), X(0x6d6f3365), + X(0x428fbabe), X(0x6d551858), X(0x42baa4e6), X(0x6d3aec6e), + X(0x42e584c3), X(0x6d20afac), X(0x43105a50), X(0x6d066215), + X(0x433b2585), X(0x6cec03af), X(0x4365e65b), X(0x6cd1947c), + X(0x43909ccd), X(0x6cb71482), X(0x43bb48d4), X(0x6c9c83c3), + X(0x43e5ea68), X(0x6c81e245), X(0x44108184), X(0x6c67300b), + X(0x443b0e21), X(0x6c4c6d1a), X(0x44659039), X(0x6c319975), + X(0x449007c4), X(0x6c16b521), X(0x44ba74bd), X(0x6bfbc021), + X(0x44e4d71c), X(0x6be0ba7b), X(0x450f2edb), X(0x6bc5a431), + X(0x45397bf4), X(0x6baa7d49), X(0x4563be60), X(0x6b8f45c7), + X(0x458df619), X(0x6b73fdae), X(0x45b82318), X(0x6b58a503), + X(0x45e24556), X(0x6b3d3bcb), X(0x460c5cce), X(0x6b21c208), + X(0x46366978), X(0x6b0637c1), X(0x46606b4e), X(0x6aea9cf8), + X(0x468a624a), X(0x6acef1b2), X(0x46b44e65), X(0x6ab335f4), + X(0x46de2f99), X(0x6a9769c1), X(0x470805df), X(0x6a7b8d1e), + X(0x4731d131), X(0x6a5fa010), X(0x475b9188), X(0x6a43a29a), + X(0x478546de), X(0x6a2794c1), X(0x47aef12c), X(0x6a0b7689), + X(0x47d8906d), X(0x69ef47f6), X(0x48022499), X(0x69d3090e), + X(0x482badab), X(0x69b6b9d3), X(0x48552b9b), X(0x699a5a4c), + X(0x487e9e64), X(0x697dea7b), X(0x48a805ff), X(0x69616a65), + X(0x48d16265), X(0x6944da10), X(0x48fab391), X(0x6928397e), + X(0x4923f97b), X(0x690b88b5), X(0x494d341e), X(0x68eec7b9), + X(0x49766373), X(0x68d1f68f), X(0x499f8774), X(0x68b5153a), + X(0x49c8a01b), X(0x689823bf), X(0x49f1ad61), X(0x687b2224), + X(0x4a1aaf3f), X(0x685e106c), X(0x4a43a5b0), X(0x6840ee9b), + X(0x4a6c90ad), X(0x6823bcb7), X(0x4a957030), X(0x68067ac3), + X(0x4abe4433), X(0x67e928c5), X(0x4ae70caf), X(0x67cbc6c0), + X(0x4b0fc99d), X(0x67ae54ba), X(0x4b387af9), X(0x6790d2b6), + X(0x4b6120bb), X(0x677340ba), X(0x4b89badd), X(0x67559eca), + X(0x4bb24958), X(0x6737ecea), X(0x4bdacc28), X(0x671a2b20), + X(0x4c034345), X(0x66fc596f), X(0x4c2baea9), X(0x66de77dc), + X(0x4c540e4e), X(0x66c0866d), X(0x4c7c622d), X(0x66a28524), + X(0x4ca4aa41), X(0x66847408), X(0x4ccce684), X(0x6666531d), + X(0x4cf516ee), X(0x66482267), X(0x4d1d3b7a), X(0x6629e1ec), + X(0x4d455422), X(0x660b91af), X(0x4d6d60df), X(0x65ed31b5), + X(0x4d9561ac), X(0x65cec204), X(0x4dbd5682), X(0x65b0429f), + X(0x4de53f5a), X(0x6591b38c), X(0x4e0d1c30), X(0x657314cf), + X(0x4e34ecfc), X(0x6554666d), X(0x4e5cb1b9), X(0x6535a86b), + X(0x4e846a60), X(0x6516dacd), X(0x4eac16eb), X(0x64f7fd98), + X(0x4ed3b755), X(0x64d910d1), X(0x4efb4b96), X(0x64ba147d), + X(0x4f22d3aa), X(0x649b08a0), X(0x4f4a4f89), X(0x647bed3f), + X(0x4f71bf2e), X(0x645cc260), X(0x4f992293), X(0x643d8806), + X(0x4fc079b1), X(0x641e3e38), X(0x4fe7c483), X(0x63fee4f8), + X(0x500f0302), X(0x63df7c4d), X(0x50363529), X(0x63c0043b), + X(0x505d5af1), X(0x63a07cc7), X(0x50847454), X(0x6380e5f6), + X(0x50ab814d), X(0x63613fcd), X(0x50d281d5), X(0x63418a50), + X(0x50f975e6), X(0x6321c585), X(0x51205d7b), X(0x6301f171), + X(0x5147388c), X(0x62e20e17), X(0x516e0715), X(0x62c21b7e), + X(0x5194c910), X(0x62a219aa), X(0x51bb7e75), X(0x628208a1), + X(0x51e22740), X(0x6261e866), X(0x5208c36a), X(0x6241b8ff), + X(0x522f52ee), X(0x62217a72), X(0x5255d5c5), X(0x62012cc2), + X(0x527c4bea), X(0x61e0cff5), X(0x52a2b556), X(0x61c06410), + X(0x52c91204), X(0x619fe918), X(0x52ef61ee), X(0x617f5f12), + X(0x5315a50e), X(0x615ec603), X(0x533bdb5d), X(0x613e1df0), + X(0x536204d7), X(0x611d66de), X(0x53882175), X(0x60fca0d2), + X(0x53ae3131), X(0x60dbcbd1), X(0x53d43406), X(0x60bae7e1), + X(0x53fa29ed), X(0x6099f505), X(0x542012e1), X(0x6078f344), + X(0x5445eedb), X(0x6057e2a2), X(0x546bbdd7), X(0x6036c325), + X(0x54917fce), X(0x601594d1), X(0x54b734ba), X(0x5ff457ad), + X(0x54dcdc96), X(0x5fd30bbc), X(0x5502775c), X(0x5fb1b104), + X(0x55280505), X(0x5f90478a), X(0x554d858d), X(0x5f6ecf53), + X(0x5572f8ed), X(0x5f4d4865), X(0x55985f20), X(0x5f2bb2c5), + X(0x55bdb81f), X(0x5f0a0e77), X(0x55e303e6), X(0x5ee85b82), + X(0x5608426e), X(0x5ec699e9), X(0x562d73b2), X(0x5ea4c9b3), + X(0x565297ab), X(0x5e82eae5), X(0x5677ae54), X(0x5e60fd84), + X(0x569cb7a8), X(0x5e3f0194), X(0x56c1b3a1), X(0x5e1cf71c), + X(0x56e6a239), X(0x5dfade20), X(0x570b8369), X(0x5dd8b6a7), + X(0x5730572e), X(0x5db680b4), X(0x57551d80), X(0x5d943c4e), + X(0x5779d65b), X(0x5d71e979), X(0x579e81b8), X(0x5d4f883b), + X(0x57c31f92), X(0x5d2d189a), X(0x57e7afe4), X(0x5d0a9a9a), + X(0x580c32a7), X(0x5ce80e41), X(0x5830a7d6), X(0x5cc57394), + X(0x58550f6c), X(0x5ca2ca99), X(0x58796962), X(0x5c801354), + X(0x589db5b3), X(0x5c5d4dcc), X(0x58c1f45b), X(0x5c3a7a05), + X(0x58e62552), X(0x5c179806), X(0x590a4893), X(0x5bf4a7d2), + X(0x592e5e19), X(0x5bd1a971), X(0x595265df), X(0x5bae9ce7), + X(0x59765fde), X(0x5b8b8239), X(0x599a4c12), X(0x5b68596d), + X(0x59be2a74), X(0x5b452288), X(0x59e1faff), X(0x5b21dd90), + X(0x5a05bdae), X(0x5afe8a8b), X(0x5a29727b), X(0x5adb297d), + X(0x5a4d1960), X(0x5ab7ba6c), X(0x5a70b258), X(0x5a943d5e), +}; diff --git a/android/jni/tremolo/misc.c b/android/jni/tremolo/misc.c new file mode 100644 index 00000000..66bf523d --- /dev/null +++ b/android/jni/tremolo/misc.c @@ -0,0 +1,208 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * by the XIPHOPHORUS Company http://www.xiph.org/ * + * * + ********************************************************************/ + +#define HEAD_ALIGN 64 +#include +#include +#include +#define MISC_C +#include "misc.h" +#include + +static void **pointers=NULL; +static long *insertlist=NULL; /* We can't embed this in the pointer list; + a pointer can have any value... */ + +static char **files=NULL; +static long *file_bytes=NULL; +static int filecount=0; + +static int ptop=0; +static int palloced=0; +static int pinsert=0; + +typedef struct { + char *file; + long line; + long ptr; + long bytes; +} head; + +long global_bytes=0; +long start_time=-1; + +static void *_insert(void *ptr,long bytes,char *file,long line){ + ((head *)ptr)->file=file; + ((head *)ptr)->line=line; + ((head *)ptr)->ptr=pinsert; + ((head *)ptr)->bytes=bytes-HEAD_ALIGN; + + if(pinsert>=palloced){ + palloced+=64; + if(pointers){ + pointers=(void **)realloc(pointers,sizeof(void **)*palloced); + insertlist=(long *)realloc(insertlist,sizeof(long *)*palloced); + }else{ + pointers=(void **)malloc(sizeof(void **)*palloced); + insertlist=(long *)malloc(sizeof(long *)*palloced); + } + } + + pointers[pinsert]=ptr; + + if(pinsert==ptop) + pinsert=++ptop; + else + pinsert=insertlist[pinsert]; + +#ifdef _VDBG_GRAPHFILE + { + FILE *out; + struct timeval tv; + static struct timezone tz; + int i; + char buffer[80]; + gettimeofday(&tv,&tz); + + for(i=0;ifile; + long bytes =((head *)ptr)->bytes; + int i; + + gettimeofday(&tv,&tz); + fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000), + global_bytes); + fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000), + global_bytes-((head *)ptr)->bytes); + fclose(out); + + for(i=0;ibytes; + + insert=((head *)ptr)->ptr; + insertlist[insert]=pinsert; + pinsert=insert; + + if(pointers[insert]==NULL){ + fprintf(stderr,"DEBUGGING MALLOC ERROR: freeing previously freed memory\n"); + fprintf(stderr,"\t%s %ld\n",((head *)ptr)->file,((head *)ptr)->line); + } + + if(global_bytes<0){ + fprintf(stderr,"DEBUGGING MALLOC ERROR: freeing unmalloced memory\n"); + } + + pointers[insert]=NULL; +} + +void _VDBG_dump(void){ + int i; + for(i=0;ifile,ptr->line); + } + +} + +extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line){ + bytes+=HEAD_ALIGN; + if(ptr){ + ptr-=HEAD_ALIGN; + _ripremove(ptr); + ptr=realloc(ptr,bytes); + }else{ + ptr=malloc(bytes); + memset(ptr,0,bytes); + } + return _insert(ptr,bytes,file,line); +} + +extern void _VDBG_free(void *ptr,char *file,long line){ + if(ptr){ + ptr-=HEAD_ALIGN; + _ripremove(ptr); + free(ptr); + } +} + diff --git a/android/jni/tremolo/misc.h b/android/jni/tremolo/misc.h new file mode 100644 index 00000000..d0a522a3 --- /dev/null +++ b/android/jni/tremolo/misc.h @@ -0,0 +1,192 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: miscellaneous math and prototypes + + ********************************************************************/ + +#ifndef _V_RANDOM_H_ +#define _V_RANDOM_H_ +#include "ivorbiscodec.h" +#include "os_types.h" + +/*#define _VDBG_GRAPHFILE "_0.m"*/ + + +#ifdef _VDBG_GRAPHFILE +extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line); +extern void _VDBG_free(void *ptr,char *file,long line); + +#undef _ogg_malloc +#undef _ogg_calloc +#undef _ogg_realloc +#undef _ogg_free + +#define _ogg_malloc(x) _VDBG_malloc(NULL,(x),__FILE__,__LINE__) +#define _ogg_calloc(x,y) _VDBG_malloc(NULL,(x)*(y),__FILE__,__LINE__) +#define _ogg_realloc(x,y) _VDBG_malloc((x),(y),__FILE__,__LINE__) +#define _ogg_free(x) _VDBG_free((x),__FILE__,__LINE__) +#endif + +#include "asm_arm.h" + +#ifndef _V_WIDE_MATH +#define _V_WIDE_MATH + +#ifndef _LOW_ACCURACY_ +/* 64 bit multiply */ + +#include + +#if BYTE_ORDER==LITTLE_ENDIAN +union magic { + struct { + ogg_int32_t lo; + ogg_int32_t hi; + } halves; + ogg_int64_t whole; +}; +#endif + +#if BYTE_ORDER==BIG_ENDIAN +union magic { + struct { + ogg_int32_t hi; + ogg_int32_t lo; + } halves; + ogg_int64_t whole; +}; +#endif + +static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) { + union magic magic; + magic.whole = (ogg_int64_t)x * y; + return magic.halves.hi; +} + +static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) { + return MULT32(x,y)<<1; +} + +static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) { + union magic magic; + magic.whole = (ogg_int64_t)x * y; + return ((ogg_uint32_t)(magic.halves.lo)>>15) | ((magic.halves.hi)<<17); +} + +#else +/* 32 bit multiply, more portable but less accurate */ + +/* + * Note: Precision is biased towards the first argument therefore ordering + * is important. Shift values were chosen for the best sound quality after + * many listening tests. + */ + +/* + * For MULT32 and MULT31: The second argument is always a lookup table + * value already preshifted from 31 to 8 bits. We therefore take the + * opportunity to save on text space and use unsigned char for those + * tables in this case. + */ + +static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) { + return (x >> 9) * y; /* y preshifted >>23 */ +} + +static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) { + return (x >> 8) * y; /* y preshifted >>23 */ +} + +static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) { + return (x >> 6) * y; /* y preshifted >>9 */ +} + +#endif + +/* + * This should be used as a memory barrier, forcing all cached values in + * registers to wr writen back to memory. Might or might not be beneficial + * depending on the architecture and compiler. + */ +#define MB() + +/* + * The XPROD functions are meant to optimize the cross products found all + * over the place in mdct.c by forcing memory operation ordering to avoid + * unnecessary register reloads as soon as memory is being written to. + * However this is only beneficial on CPUs with a sane number of general + * purpose registers which exclude the Intel x86. On Intel, better let the + * compiler actually reload registers directly from original memory by using + * macros. + */ + +#ifdef __i386__ + +#define XPROD32(_a, _b, _t, _v, _x, _y) \ + { *(_x)=MULT32(_a,_t)+MULT32(_b,_v); \ + *(_y)=MULT32(_b,_t)-MULT32(_a,_v); } +#define XPROD31(_a, _b, _t, _v, _x, _y) \ + { *(_x)=MULT31(_a,_t)+MULT31(_b,_v); \ + *(_y)=MULT31(_b,_t)-MULT31(_a,_v); } +#define XNPROD31(_a, _b, _t, _v, _x, _y) \ + { *(_x)=MULT31(_a,_t)-MULT31(_b,_v); \ + *(_y)=MULT31(_b,_t)+MULT31(_a,_v); } + +#else + +static inline void XPROD32(ogg_int32_t a, ogg_int32_t b, + ogg_int32_t t, ogg_int32_t v, + ogg_int32_t *x, ogg_int32_t *y) +{ + *x = MULT32(a, t) + MULT32(b, v); + *y = MULT32(b, t) - MULT32(a, v); +} + +static inline void XPROD31(ogg_int32_t a, ogg_int32_t b, + ogg_int32_t t, ogg_int32_t v, + ogg_int32_t *x, ogg_int32_t *y) +{ + *x = MULT31(a, t) + MULT31(b, v); + *y = MULT31(b, t) - MULT31(a, v); +} + +static inline void XNPROD31(ogg_int32_t a, ogg_int32_t b, + ogg_int32_t t, ogg_int32_t v, + ogg_int32_t *x, ogg_int32_t *y) +{ + *x = MULT31(a, t) - MULT31(b, v); + *y = MULT31(b, t) + MULT31(a, v); +} + +#endif + +#endif + +#ifndef _V_CLIP_MATH +#define _V_CLIP_MATH + +static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) { + int ret=x; + ret-= ((x<=32767)-1)&(x-32767); + ret-= ((x>=-32768)-1)&(x+32768); + return(ret); +} + +#endif + +#endif + + + + diff --git a/android/jni/tremolo/ogg.h b/android/jni/tremolo/ogg.h new file mode 100644 index 00000000..9342e4be --- /dev/null +++ b/android/jni/tremolo/ogg.h @@ -0,0 +1,215 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: subsumed libogg includes + + ********************************************************************/ +#ifndef _OGG_H +#define _OGG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "os_types.h" + +#ifndef ONLY_C +#define ARM_LITTLE_ENDIAN +#endif + +typedef struct ogg_buffer_state{ + struct ogg_buffer *unused_buffers; + struct ogg_reference *unused_references; + int outstanding; + int shutdown; +} ogg_buffer_state; + +typedef struct ogg_buffer { + unsigned char *data; + long size; + int refcount; + + union { + ogg_buffer_state *owner; + struct ogg_buffer *next; + } ptr; +} ogg_buffer; + +typedef struct ogg_reference { + ogg_buffer *buffer; + long begin; + long length; + + struct ogg_reference *next; +} ogg_reference; + +typedef struct oggpack_buffer { +#ifdef ARM_LITTLE_ENDIAN + int bitsLeftInSegment; + ogg_uint32_t *ptr; + long bitsLeftInWord; +#else + int headbit; + unsigned char *headptr; + long headend; +#endif /* ARM_LITTLE_ENDIAN */ + /* memory management */ + ogg_reference *head; + ogg_reference *tail; + + /* render the byte/bit counter API constant time */ + long count; /* doesn't count the tail */ +} oggpack_buffer; + +typedef struct oggbyte_buffer { + ogg_reference *baseref; + + ogg_reference *ref; + unsigned char *ptr; + long pos; + long end; +} oggbyte_buffer; + +typedef struct ogg_sync_state { + /* decode memory management pool */ + ogg_buffer_state *bufferpool; + + /* stream buffers */ + ogg_reference *fifo_head; + ogg_reference *fifo_tail; + long fifo_fill; + + /* stream sync management */ + int unsynced; + int headerbytes; + int bodybytes; + +} ogg_sync_state; + +typedef struct ogg_stream_state { + ogg_reference *header_head; + ogg_reference *header_tail; + ogg_reference *body_head; + ogg_reference *body_tail; + + int e_o_s; /* set when we have buffered the last + packet in the logical bitstream */ + int b_o_s; /* set after we've written the initial page + of a logical bitstream */ + long serialno; + long pageno; + ogg_int64_t packetno; /* sequence number for decode; the framing + knows where there's a hole in the data, + but we need coupling so that the codec + (which is in a seperate abstraction + layer) also knows about the gap */ + ogg_int64_t granulepos; + + int lacing_fill; + ogg_uint32_t body_fill; + + /* decode-side state data */ + int holeflag; + int spanflag; + int clearflag; + int laceptr; + ogg_uint32_t body_fill_next; + +} ogg_stream_state; + +typedef struct { + ogg_reference *packet; + long bytes; + long b_o_s; + long e_o_s; + ogg_int64_t granulepos; + ogg_int64_t packetno; /* sequence number for decode; the framing + knows where there's a hole in the data, + but we need coupling so that the codec + (which is in a seperate abstraction + layer) also knows about the gap */ +} ogg_packet; + +typedef struct { + ogg_reference *header; + int header_len; + ogg_reference *body; + long body_len; +} ogg_page; + +/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/ + +extern void oggpack_readinit(oggpack_buffer *b,ogg_reference *r); +extern long oggpack_look(oggpack_buffer *b,int bits); +extern void oggpack_adv(oggpack_buffer *b,int bits); +extern long oggpack_read(oggpack_buffer *b,int bits); +extern long oggpack_bytes(oggpack_buffer *b); +extern long oggpack_bits(oggpack_buffer *b); +extern int oggpack_eop(oggpack_buffer *b); + +/* Ogg BITSTREAM PRIMITIVES: decoding **************************/ + +extern ogg_sync_state *ogg_sync_create(void); +extern int ogg_sync_destroy(ogg_sync_state *oy); +extern int ogg_sync_reset(ogg_sync_state *oy); + +extern unsigned char *ogg_sync_bufferin(ogg_sync_state *oy, long size); +extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes); +extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og); +extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og); +extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og); +extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op); +extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op); + +/* Ogg BITSTREAM PRIMITIVES: general ***************************/ + +extern ogg_stream_state *ogg_stream_create(int serialno); +extern int ogg_stream_destroy(ogg_stream_state *os); +extern int ogg_stream_reset(ogg_stream_state *os); +extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno); +extern int ogg_stream_eos(ogg_stream_state *os); + +extern int ogg_page_checksum_set(ogg_page *og); + +extern int ogg_page_version(ogg_page *og); +extern int ogg_page_continued(ogg_page *og); +extern int ogg_page_bos(ogg_page *og); +extern int ogg_page_eos(ogg_page *og); +extern ogg_int64_t ogg_page_granulepos(ogg_page *og); +extern ogg_uint32_t ogg_page_serialno(ogg_page *og); +extern ogg_uint32_t ogg_page_pageno(ogg_page *og); +extern int ogg_page_packets(ogg_page *og); +extern int ogg_page_getbuffer(ogg_page *og, unsigned char **buffer); + +extern int ogg_packet_release(ogg_packet *op); +extern int ogg_page_release(ogg_page *og); + +extern void ogg_page_dup(ogg_page *d, ogg_page *s); + +/* Ogg BITSTREAM PRIMITIVES: return codes ***************************/ + +#define OGG_SUCCESS 0 + +#define OGG_HOLE -10 +#define OGG_SPAN -11 +#define OGG_EVERSION -12 +#define OGG_ESERIAL -13 +#define OGG_EINVAL -14 +#define OGG_EEOS -15 + + +#ifdef __cplusplus +} +#endif + +#endif /* _OGG_H */ diff --git a/android/jni/tremolo/os.h b/android/jni/tremolo/os.h new file mode 100644 index 00000000..65a4992f --- /dev/null +++ b/android/jni/tremolo/os.h @@ -0,0 +1,62 @@ +#ifndef _OS_H +#define _OS_H +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: #ifdef jail to whip a few platforms into the UNIX ideal. + + ********************************************************************/ + +#include +#include "os_types.h" + +#ifndef _V_IFDEFJAIL_H_ +# define _V_IFDEFJAIL_H_ + +# ifdef __GNUC__ +# define STIN static __inline__ +# elif _WIN32 +# define STIN static __inline +# endif +#else +# define STIN static +#endif + +#ifndef M_PI +# define M_PI (3.1415926536f) +#endif + +#ifdef _WIN32 +# include +# define rint(x) (floor((x)+0.5f)) +# define NO_FLOAT_MATH_LIB +# define FAST_HYPOT(a, b) sqrt((a)*(a) + (b)*(b)) +#endif + +#ifdef HAVE_ALLOCA_H +# include +#endif + +#ifdef USE_MEMORY_H +# include +#endif + +#ifndef min +# define min(x,y) ((x)>(y)?(y):(x)) +#endif + +#ifndef max +# define max(x,y) ((x)<(y)?(y):(x)) +#endif + +#endif /* _OS_H */ diff --git a/android/jni/tremolo/os_types.h b/android/jni/tremolo/os_types.h new file mode 100644 index 00000000..24fe1641 --- /dev/null +++ b/android/jni/tremolo/os_types.h @@ -0,0 +1,101 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: #ifdef jail to whip a few platforms into the UNIX ideal. + + ********************************************************************/ +#ifndef _OS_TYPES_H +#define _OS_TYPES_H + +#ifdef _LOW_ACCURACY_ +# define X(n) (((((n)>>22)+1)>>1) - ((((n)>>22)+1)>>9)) +# define LOOKUP_T const unsigned char +#else +# define X(n) (n) +# define LOOKUP_T const ogg_int32_t +#endif + +/* make it easy on the folks that want to compile the libs with a + different malloc than stdlib */ +#define _ogg_malloc malloc +#define _ogg_calloc calloc +#define _ogg_realloc realloc +#define _ogg_free free + +#if defined (_WIN32_WCE) + + typedef unsigned short ogg_uint16_t; + typedef short ogg_int16_t; + typedef int ogg_int32_t; + typedef unsigned int ogg_uint32_t; + typedef long long ogg_int64_t; + +#elif defined(_WIN32) + +# ifndef __GNUC__ + /* MSVC/Borland */ + typedef __int64 ogg_int64_t; + typedef __int32 ogg_int32_t; + typedef unsigned __int32 ogg_uint32_t; + typedef __int16 ogg_int16_t; + typedef unsigned __int16 ogg_uint16_t; +# else + /* Cygwin */ + #include <_G_config.h> + typedef _G_int64_t ogg_int64_t; + typedef _G_int32_t ogg_int32_t; + typedef _G_uint32_t ogg_uint32_t; + typedef _G_int16_t ogg_int16_t; + typedef _G_uint16_t ogg_uint16_t; +# endif + +#elif defined(__MACOS__) + +# include + typedef SInt16 ogg_int16_t; + typedef UInt16 ogg_uint16_t; + typedef SInt32 ogg_int32_t; + typedef UInt32 ogg_uint32_t; + typedef SInt64 ogg_int64_t; + +#elif defined(__MACOSX__) /* MacOS X Framework build */ + +# include + typedef int16_t ogg_int16_t; + typedef u_int16_t ogg_uint16_t; + typedef int32_t ogg_int32_t; + typedef u_int32_t ogg_uint32_t; + typedef int64_t ogg_int64_t; + +#elif defined(__BEOS__) + + /* Be */ +# include + +#elif defined (__EMX__) + + /* OS/2 GCC */ + typedef short ogg_int16_t; + typedef unsigned short ogg_uint16_t; + typedef int ogg_int32_t; + typedef unsigned int ogg_uint32_t; + typedef long long ogg_int64_t; + +#else + +# include +# include "config_types.h" + +#endif + +#endif /* _OS_TYPES_H */ diff --git a/android/jni/tremolo/profile.c b/android/jni/tremolo/profile.c new file mode 100644 index 00000000..3c07d8c8 --- /dev/null +++ b/android/jni/tremolo/profile.c @@ -0,0 +1,110 @@ +/* + * Dead simple processor sampling profiling code. + * + */ + +#include +#include +#include "windows.h" + +static int *Profile_table = NULL; +static int Profile_table_size = 0; +static int Profile_table_granularity = 0; +static DWORD (*ProfileFn)(void *); +static void *ProfileArgs; +static volatile HANDLE threadToProfile = NULL; +static volatile HANDLE thread = NULL; +static volatile int die = 0; +static volatile int taskDone = 0; + +void Profile_dump() +{ + FILE *file; + + die = 1; + while (die) + { + Sleep(1); + } + + file = fopen("profile", "wb"); + if(file == NULL) + { + Output("Failed to open profile output"); + return; + } + Output("Dumping profile..."); + + fputc('P', file); + fputc('R', file); + fputc('0', file); + fputc('F', file); + + fwrite(&Profile_table_granularity, 4, 1, file); + fwrite(Profile_table, 4, Profile_table_size>>2, file); + fclose(file); +} + +static DWORD ticker(LPVOID dummy) +{ + CONTEXT context; + int offset; + + memset(&context, 0, sizeof(CONTEXT)); + { + while (!die) + { + Sleep(10); + context.ContextFlags = CONTEXT_FULL; + if (GetThreadContext(thread, &context)) + { + offset = context.Pc & ~0xF0000000; + + offset >>= Profile_table_granularity+2; + if (offset >= (Profile_table_size>>2)) + { + offset = 0; + } + } + else + { + offset = 0; + } + Profile_table[offset]++; + } + } + die = 0; +} + +void Profile_init(int size, + int granularity) +{ + HANDLE myThread; + + Profile_table_granularity = granularity; + Profile_table_size = (size+(1<>granularity; + Profile_table = (int *)malloc(Profile_table_size); + if (Profile_table == NULL) + { + Output("Failed to get memory for Profile table\n"); + exit(EXIT_FAILURE); + } + memset(Profile_table, 0, Profile_table_size); + + thread = (HANDLE)GetCurrentThreadId(); + + Output("Commencing profiling"); + myThread = CreateThread(NULL, /* Security Attributes */ + 0, + &ticker, + NULL, + 0, + NULL); + if (myThread == NULL) + { + Output("Profiler failed to start"); + exit(EXIT_FAILURE); + } + + SetThreadPriority(myThread, THREAD_PRIORITY_ABOVE_NORMAL); +} diff --git a/android/jni/tremolo/res012.c b/android/jni/tremolo/res012.c new file mode 100644 index 00000000..fffda8e8 --- /dev/null +++ b/android/jni/tremolo/res012.c @@ -0,0 +1,225 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: residue backend 0, 1 and 2 implementation + + ********************************************************************/ + +#include +#include +#include +#include "ogg.h" +#include "ivorbiscodec.h" +#include "codec_internal.h" +#include "codebook.h" +#include "misc.h" +#include "os.h" + +void res_clear_info(vorbis_info_residue *info){ + if(info){ + if(info->stagemasks)_ogg_free(info->stagemasks); + if(info->stagebooks)_ogg_free(info->stagebooks); + memset(info,0,sizeof(*info)); + } +} + + +/* vorbis_info is for range checking */ +int res_unpack(vorbis_info_residue *info, + vorbis_info *vi,oggpack_buffer *opb){ + int j,k; + codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; + memset(info,0,sizeof(*info)); + + info->type=oggpack_read(opb,16); + if(info->type>2 || info->type<0)goto errout; + info->begin=oggpack_read(opb,24); + info->end=oggpack_read(opb,24); + info->grouping=oggpack_read(opb,24)+1; + info->partitions=oggpack_read(opb,6)+1; + info->groupbook=oggpack_read(opb,8); + if(info->groupbook>=ci->books)goto errout; + + info->stagemasks=_ogg_malloc(info->partitions*sizeof(*info->stagemasks)); + info->stagebooks=_ogg_malloc(info->partitions*8*sizeof(*info->stagebooks)); + + for(j=0;jpartitions;j++){ + int cascade=oggpack_read(opb,3); + if(oggpack_read(opb,1)) + cascade|=(oggpack_read(opb,5)<<3); + info->stagemasks[j]=cascade; + } + + for(j=0;jpartitions;j++){ + for(k=0;k<8;k++){ + if((info->stagemasks[j]>>k)&1){ + unsigned char book=oggpack_read(opb,8); + if(book>=ci->books)goto errout; + info->stagebooks[j*8+k]=book; + if(k+1>info->stages)info->stages=k+1; + }else + info->stagebooks[j*8+k]=0xff; + } + } + + if(oggpack_eop(opb))goto errout; + + return 0; + errout: + res_clear_info(info); + return 1; +} + +int res_inverse(vorbis_dsp_state *vd,vorbis_info_residue *info, + ogg_int32_t **in,int *nonzero,int ch){ + + int i,j,k,s,used=0; + codec_setup_info *ci=(codec_setup_info *)vd->vi->codec_setup; + codebook *phrasebook=ci->book_param+info->groupbook; + int samples_per_partition=info->grouping; + int partitions_per_word=phrasebook->dim; + int pcmend=ci->blocksizes[vd->W]; + + if(info->type<2){ + int max=pcmend>>1; + int end=(info->endend:max); + int n=end-info->begin; + + if(n>0){ + int partvals=n/samples_per_partition; + int partwords=(partvals+partitions_per_word-1)/partitions_per_word; + + for(i=0;istages;s++){ + + for(i=0;i=0;k--) + partword[0][i+k]=partword[0][i+k+1]*info->partitions; + + for(j=1;j=0;k--) + partword[j][i+k]=partword[j-1][i+k]; + + for(j=0;jopb); + if(temp==-1)goto eopbreak; + + /* this can be done quickly in assembly due to the quotient + always being at most six bits */ + for(k=0;kbegin+i*samples_per_partition; + if(info->stagemasks[(int)partword[j][i]]&(1<book_param+ + info->stagebooks[(partword[j][i]<<3)+s]; + if(info->type){ + if(vorbis_book_decodev_add(stagebook,in[j]+offset,&vd->opb, + samples_per_partition,-8)==-1) + goto eopbreak; + }else{ + if(vorbis_book_decodevs_add(stagebook,in[j]+offset,&vd->opb, + samples_per_partition,-8)==-1) + goto eopbreak; + } + } + } + } + } + } + } + }else{ + int max=(pcmend*ch)>>1; + int end=(info->endend:max); + int n=end-info->begin; + + if(n>0){ + int partvals=n/samples_per_partition; + int partwords=(partvals+partitions_per_word-1)/partitions_per_word; + + char *partword= + (char *)alloca(partwords*partitions_per_word*sizeof(*partword)); + int beginoff=info->begin/ch; + + for(i=0;istages;s++){ + for(i=0;i=0;k--) + partword[i+k]=partword[i+k+1]*info->partitions; + + /* fetch the partition word */ + temp=vorbis_book_decode(phrasebook,&vd->opb); + if(temp==-1)goto eopbreak; + + /* this can be done quickly in assembly due to the quotient + always being at most six bits */ + for(k=0;kstagemasks[(int)partword[i]]&(1<book_param+ + info->stagebooks[(partword[i]<<3)+s]; + if(vorbis_book_decodevv_add(stagebook,in, + i*samples_per_partition+beginoff,ch, + &vd->opb, + samples_per_partition,-8)==-1) + goto eopbreak; + } + } + } + } + } + errout: + eopbreak: + + return 0; +} + diff --git a/android/jni/tremolo/speed.s b/android/jni/tremolo/speed.s new file mode 100644 index 00000000..520a899a --- /dev/null +++ b/android/jni/tremolo/speed.s @@ -0,0 +1,120 @@ + .text + + .global stmiaTest + .global strTest + .global smullTest + +stmiaTest: + STMFD r13!,{r4-r12,r14} + + @ r0 = start + @ r1 = size + @ r2 = loops +stmiaTestLoop2: + MOV r3,r0 + MOV r4,r1 +stmiaTestLoop: + STMIA r3!,{r6,r7,r8,r9,r10,r11,r12,r14} + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + + SUBS r4,r4,#8*4 + BGT stmiaTestLoop + + SUBS r2,r2,#1 + BGT stmiaTestLoop2 + + + LDMFD r13!,{r4-r12,PC} + +strTest: + STMFD r13!,{r4-r12,r14} + + @ r0 = start + @ r1 = size + @ r2 = loops +strTestLoop2: + MOV r3,r0 + MOV r4,r1 +strTestLoop: + STR r6,[r3],#4 + STR r7,[r3],#4 + STR r8,[r3],#4 + STR r9,[r3],#4 + STR r10,[r3],#4 + STR r11,[r3],#4 + STR r12,[r3],#4 + STR r14,[r3],#4 + @STMIA r3!,{r6,r7,r8,r9,r10,r11,r12,r14} + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + MOV r6,#0 + + SUBS r4,r4,#8*4 + BGT strTestLoop + + SUBS r2,r2,#1 + BGT strTestLoop2 + + LDMFD r13!,{r4-r12,PC} + +smullTest: + STMFD r13!,{r4-r12,r14} + + @ r0 = start + @ r1 = size + @ r2 = loops +smullTestLoop2: + MVN r7,#0xAA000000 + MVN r8,#0xAA000000 + MOV r3,r0 + MOV r4,r1 +smullTestLoop: + SMULL r14,r12,r7,r8 + MOV r6,#0 + SMLAL r14,r12,r7,r8 + MOV r6,#0 + SMULL r14,r11,r7,r8 + MOV r6,#0 + SMLAL r14,r11,r7,r8 + + SUBS r4,r4,#8*4 + BGT smullTestLoop + + SUBS r2,r2,#1 + BGT smullTestLoop2 + + LDMFD r13!,{r4-r12,PC} diff --git a/android/jni/tremolo/testtremor.c b/android/jni/tremolo/testtremor.c new file mode 100644 index 00000000..f6d3c525 --- /dev/null +++ b/android/jni/tremolo/testtremor.c @@ -0,0 +1,423 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: simple example decoder using vorbisidec + + ********************************************************************/ + +/* Takes a vorbis bitstream from stdin and writes raw stereo PCM to + stdout using vorbisfile. Using vorbisfile is much simpler than + dealing with libvorbis. */ + +#include +#include +#include +#include "ivorbiscodec.h" +#include "ivorbisfile.h" +#include "time.h" +#include "windows.h" + +#define PROFILE + +#ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */ +#include +#include +#endif + +char pcmout[4096]; /* take 4k out of the data segment, not the stack */ +char ref[4096]; /* take 4k out of the data segment, not the stack */ +char text[4096]; + +void Output(const char *fmt, ...) +{ +#ifdef _WIN32_WCE + va_list ap; + char *t = text; + WCHAR uni[4096]; + WCHAR *u = uni; + + va_start(ap,fmt); + vsprintf(text, fmt, ap); + va_end(ap); + + while (*t != 0) + { + *u++ = (WCHAR)(*t++); + } + *u++ = 0; + OutputDebugString(uni); +#else + vfprintf(stderr, fmt, ap); +#endif +} + +typedef struct +{ + FILE *in; + FILE *out; + FILE *refin; + FILE *refout; + int max_samples; +} TestParams; + +static DWORD run_test(void *tp) +{ + TestParams *params = (TestParams *)tp; + FILE *in = params->in; + FILE *out = params->out; + FILE *refin = params->refin; + FILE *refout = params->refout; + int max_samples = params->max_samples; + OggVorbis_File vf; + int eof=0; + int current_section; + int maxdiff = 0; + int countdiffs = 0; + int samples = 0; + + if(ov_open(in, &vf, NULL, 0) < 0) { + Output("Input does not appear to be an Ogg bitstream.\n"); + exit(1); + } + + /* Throw the comments plus a few lines about the bitstream we're + decoding */ + { + char **ptr=ov_comment(&vf,-1)->user_comments; + vorbis_info *vi=ov_info(&vf,-1); + if (out != NULL) + { + while(*ptr){ + Output("%s\n",*ptr); + ++ptr; + } + Output("\nBitstream is %d channel, %ldHz\n",vi->channels,vi->rate); + Output("\nDecoded length: %ld samples\n", + (long)ov_pcm_total(&vf,-1)); + Output("Encoded by: %s\n\n",ov_comment(&vf,-1)->vendor); + } + } + + while((!eof) && (max_samples > 0)){ + long ret=ov_read(&vf,pcmout,sizeof(pcmout),¤t_section); + if (ret == 0) { + /* EOF */ + eof=1; + } else if (ret < 0) { + /* error in the stream. Not a problem, just reporting it in + case we (the app) cares. In this case, we don't. */ + } else { + /* we don't bother dealing with sample rate changes, etc, but + you'll have to*/ + if (out != NULL) + { + fwrite(pcmout,1,ret,out); + } + max_samples -= ret>>1; + if (refout != NULL) + { + fwrite(pcmout,1,ret,refout); + samples += ret>>1; + Output("%d", samples); + } + if (refin != NULL) + { + int i, diff; + + fread(ref,1,ret,refin); + for (i=0; i<(ret>>1);i++) + { + diff = ((short *)pcmout)[i] - ((short *)ref)[i]; + if (diff != 0) + { + if (diff < 0) + diff = -diff; + if (diff > maxdiff) + maxdiff = diff; + countdiffs++; + if (countdiffs < 50) + { + Output("samples differ: %x vs %x\n", + ((unsigned short *)pcmout)[i], + ((unsigned short *)ref)[i]); + } + else if ((countdiffs % 100) == 0) + { + Output("%d differences, maximum = %d\n", + countdiffs, maxdiff); + } + } + } + } + } + } + + /* cleanup */ + ov_clear(&vf); + + return 0; +} + +static int filetimetoms(FILETIME *time) +{ + unsigned long long l; + + l = ((unsigned long long)time->dwLowDateTime) + (((unsigned long long)time->dwHighDateTime)<<32); + + return (int)(l/10000); +} + +char speedblock[32768]; +void speedtest() +{ + int readtime; + FILETIME userStartTime, userStopTime; + FILETIME kernelStartTime, kernelStopTime; + FILETIME exitStartTime, exitStopTime; + FILETIME creationStartTime, creationStopTime; + + Output("Speed test: STMIA speed\n"); + + GetThreadTimes(GetCurrentThread(), + &creationStartTime, + &exitStartTime, + &kernelStartTime, + &userStartTime); + stmiaTest(speedblock, 32768, 65536); + GetThreadTimes(GetCurrentThread(), + &creationStopTime, + &exitStopTime, + &kernelStopTime, + &userStopTime); + readtime = filetimetoms(&userStopTime)-filetimetoms(&userStartTime); + Output("Speed test complete: Timing=%g\n", + ((double)readtime)/1000); + + Output("Speed test: STR speed\n"); + + GetThreadTimes(GetCurrentThread(), + &creationStartTime, + &exitStartTime, + &kernelStartTime, + &userStartTime); + strTest(speedblock, 32768, 65536); + GetThreadTimes(GetCurrentThread(), + &creationStopTime, + &exitStopTime, + &kernelStopTime, + &userStopTime); + readtime = filetimetoms(&userStopTime)-filetimetoms(&userStartTime); + Output("Speed test complete: Timing=%g\n", + ((double)readtime)/1000); + + Output("Speed test: SMULL speed\n"); + + GetThreadTimes(GetCurrentThread(), + &creationStartTime, + &exitStartTime, + &kernelStartTime, + &userStartTime); + smullTest(speedblock, 32768, 65536); + GetThreadTimes(GetCurrentThread(), + &creationStopTime, + &exitStopTime, + &kernelStopTime, + &userStopTime); + readtime = filetimetoms(&userStopTime)-filetimetoms(&userStartTime); + Output("Speed test complete: Timing=%g\n", + ((double)readtime)/1000); +} + +int main(int argc, char *argv[]){ + FILE *in; + FILE *out = NULL; + FILE *refin = NULL; + FILE *refout = NULL; + int dectime, readtime; + FILETIME userStartTime, userStopTime; + FILETIME kernelStartTime, kernelStopTime; + FILETIME exitStartTime, exitStopTime; + FILETIME creationStartTime, creationStopTime; + TestParams params; + + if (argc < 2) + { + Output("Syntax: testtremor []\n"); + exit(EXIT_FAILURE); + } + +#ifdef PROFILE + in = fopen(argv[1], "rb"); + if (in == NULL) + { + Output("Failed to open '%s' for input\n", argv[1]); + exit(EXIT_FAILURE); + } + + params.in = in; + params.out = NULL; + params.refin = NULL; + params.refout = NULL; + params.max_samples = 0x7FFFFFFF; + Profile_init(184000, 4); + run_test(¶ms); + Profile_dump(); +#else + in = fopen(argv[1], "rb"); + if (in == NULL) + { + Output("Failed to open '%s' for input\n", argv[1]); + exit(EXIT_FAILURE); + } + + if (argc >= 3) + { + out = fopen(argv[2], "wb"); + if (out == NULL) + { + Output("Failed to open '%s' for output\n", argv[2]); + exit(EXIT_FAILURE); + } + } + + if (argc >= 4) + { + refin = fopen(argv[3], "rb"); + if (refin == NULL) + { + Output("Can't find reference file. Creating instead.\n"); + refout = fopen(argv[3], "wb"); + if (refout == NULL) + { + Output("Failed to open '%s' as output reference file\n", argv[3]); + exit(EXIT_FAILURE); + } + } + } + + Output("First test: Decode correctness\n"); + params.in = in; + params.out = out; + params.refin = refin; + params.refout = refout; + params.max_samples = 1*1024*1024; + run_test(¶ms); + Output("First test complete\n"); + if (out != NULL) + fclose(out); + if (refin != NULL) + fclose(refin); + if (refout != NULL) + fclose(refout); + Output("Second test: Decode speed\n"); + in = fopen(argv[1], "rb"); + if (in == NULL) + { + Output("Failed to open '%s' for input\n", argv[1]); + exit(EXIT_FAILURE); + } + GetThreadTimes(GetCurrentThread(), + &creationStartTime, + &exitStartTime, + &kernelStartTime, + &userStartTime); + params.in = in; + params.out = NULL; + params.refin = NULL; + params.refout = NULL; + params.max_samples = 0x7FFFFFFF; + run_test(¶ms); + GetThreadTimes(GetCurrentThread(), + &creationStopTime, + &exitStopTime, + &kernelStopTime, + &userStopTime); + + dectime = filetimetoms(&userStopTime)-filetimetoms(&userStartTime); + Output("Second test complete: Timing=%g\n", + ((double)dectime)/1000); + Output("Third test: File read speed\n"); + + in = fopen(argv[1], "rb"); + if (in == NULL) + { + Output("Failed to open '%s' for input\n", argv[1]); + exit(EXIT_FAILURE); + } + GetThreadTimes(GetCurrentThread(), + &creationStartTime, + &exitStartTime, + &kernelStartTime, + &userStartTime); + while (!feof(in)) + { + fread(pcmout,1,4096,in); + } + GetThreadTimes(GetCurrentThread(), + &creationStopTime, + &exitStopTime, + &kernelStopTime, + &userStopTime); + readtime = filetimetoms(&userStopTime)-filetimetoms(&userStartTime); + Output("Third test complete: Timing=%g\n", + ((double)readtime)/1000); + Output("Adjusted decode time: Timing=%g\n", + ((double)(dectime-readtime))/1000); +#endif + Output("Done.\n"); + return(0); +} + +#ifdef _WIN32_WCE + +#define TESTFILE 0 + +int WinMain(HINSTANCE h,HINSTANCE i,LPWSTR l,int n) +{ +#if TESTFILE == 9 + char *argv[] = { "testtremor", + "\\Storage Card\\Tremolo\\infile9.ogg", + "\\Storage Card\\Tremolo\\output9.pcm", +#ifdef _LOW_ACCURACY_ + "\\Storage Card\\Tremolo\\outputL9.ref", +#else + "\\Storage Card\\Tremolo\\output9.ref", +#endif /* _LOW_ACCURACY_ */ + NULL }; +#endif +#if TESTFILE == 2 + char *argv[] = { "testtremor", + "\\Storage Card\\Tremolo\\infile2.ogg", + "\\Storage Card\\Tremolo\\output2.pcm", +#ifdef _LOW_ACCURACY_ + "\\Storage Card\\Tremolo\\outputL2.ref", +#else + "\\Storage Card\\Tremolo\\output2.ref", +#endif /* _LOW_ACCURACY_ */ + NULL }; +#endif +#if TESTFILE == 0 + char *argv[] = { "testtremor", + "\\Storage Card\\Tremolo\\infile.ogg", + "\\Storage Card\\Tremolo\\output.pcm", +#ifdef _LOW_ACCURACY_ + "\\Storage Card\\Tremolo\\outputL.ref", +#else + "\\Storage Card\\Tremolo\\output.ref", +#endif /* _LOW_ACCURACY_ */ + NULL }; +#endif + return main(4, argv); +} +#endif + diff --git a/android/jni/tremolo/vorbisfile.c b/android/jni/tremolo/vorbisfile.c new file mode 100644 index 00000000..aafc3087 --- /dev/null +++ b/android/jni/tremolo/vorbisfile.c @@ -0,0 +1,1589 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: stdio-based convenience library for opening/seeking/decoding + last mod: $Id: vorbisfile.c,v 1.6.2.5 2003/11/20 06:16:17 xiphmont Exp $ + + ********************************************************************/ + +#include +#include +#include +#include +#include + +#include "codec_internal.h" +#include "ivorbisfile.h" + +#include "os.h" +#include "misc.h" + +#define NOTOPEN 0 +#define PARTOPEN 1 +#define OPENED 2 +#define STREAMSET 3 /* serialno and link set, but not to current link */ +#define LINKSET 4 /* serialno and link set to current link */ +#define INITSET 5 + +/* A 'chained bitstream' is a Vorbis bitstream that contains more than + one logical bitstream arranged end to end (the only form of Ogg + multiplexing allowed in a Vorbis bitstream; grouping [parallel + multiplexing] is not allowed in Vorbis) */ + +/* A Vorbis file can be played beginning to end (streamed) without + worrying ahead of time about chaining (see decoder_example.c). If + we have the whole file, however, and want random access + (seeking/scrubbing) or desire to know the total length/time of a + file, we need to account for the possibility of chaining. */ + +/* We can handle things a number of ways; we can determine the entire + bitstream structure right off the bat, or find pieces on demand. + This example determines and caches structure for the entire + bitstream, but builds a virtual decoder on the fly when moving + between links in the chain. */ + +/* There are also different ways to implement seeking. Enough + information exists in an Ogg bitstream to seek to + sample-granularity positions in the output. Or, one can seek by + picking some portion of the stream roughly in the desired area if + we only want coarse navigation through the stream. */ + +/************************************************************************* + * Many, many internal helpers. The intention is not to be confusing; + * rampant duplication and monolithic function implementation would be + * harder to understand anyway. The high level functions are last. Begin + * grokking near the end of the file */ + + +/* read a little more data from the file/pipe into the ogg_sync framer */ +static long _get_data(OggVorbis_File *vf){ + errno=0; + if(vf->datasource){ + unsigned char *buffer=ogg_sync_bufferin(vf->oy,CHUNKSIZE); + long bytes=(vf->callbacks.read_func)(buffer,1,CHUNKSIZE,vf->datasource); + if(bytes>0)ogg_sync_wrote(vf->oy,bytes); + if(bytes==0 && errno)return -1; + return bytes; + }else + return 0; +} + +/* save a tiny smidge of verbosity to make the code more readable */ +static void _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){ + if(vf->datasource){ + (vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET); + vf->offset=offset; + ogg_sync_reset(vf->oy); + }else{ + /* shouldn't happen unless someone writes a broken callback */ + return; + } +} + +/* The read/seek functions track absolute position within the stream */ + +/* from the head of the stream, get the next page. boundary specifies + if the function is allowed to fetch more data from the stream (and + how much) or only use internally buffered data. + + boundary: -1) unbounded search + 0) read no additional data; use cached only + n) search for a new page beginning for n bytes + + return: <0) did not find a page (OV_FALSE, OV_EOF, OV_EREAD) + n) found a page at absolute offset n + + produces a refcounted page */ + +static ogg_int64_t _get_next_page(OggVorbis_File *vf,ogg_page *og, + ogg_int64_t boundary){ + if(boundary>0)boundary+=vf->offset; + while(1){ + long more; + + if(boundary>0 && vf->offset>=boundary)return OV_FALSE; + more=ogg_sync_pageseek(vf->oy,og); + + if(more<0){ + /* skipped n bytes */ + vf->offset-=more; + }else{ + if(more==0){ + /* send more paramedics */ + if(!boundary)return OV_FALSE; + { + long ret=_get_data(vf); + if(ret==0)return OV_EOF; + if(ret<0)return OV_EREAD; + } + }else{ + /* got a page. Return the offset at the page beginning, + advance the internal offset past the page end */ + ogg_int64_t ret=vf->offset; + vf->offset+=more; + return ret; + + } + } + } +} + +/* find the latest page beginning before the current stream cursor + position. Much dirtier than the above as Ogg doesn't have any + backward search linkage. no 'readp' as it will certainly have to + read. */ +/* returns offset or OV_EREAD, OV_FAULT and produces a refcounted page */ + +static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_page *og){ + ogg_int64_t begin=vf->offset; + ogg_int64_t end=begin; + ogg_int64_t ret; + ogg_int64_t offset=-1; + + while(offset==-1){ + begin-=CHUNKSIZE; + if(begin<0) + begin=0; + _seek_helper(vf,begin); + while(vf->offsetoffset); + if(ret==OV_EREAD)return OV_EREAD; + if(ret<0){ + break; + }else{ + offset=ret; + } + } + } + + /* we have the offset. Actually snork and hold the page now */ + _seek_helper(vf,offset); + ret=_get_next_page(vf,og,CHUNKSIZE); + if(ret<0) + /* this shouldn't be possible */ + return OV_EFAULT; + + return offset; +} + +/* finds each bitstream link one at a time using a bisection search + (has to begin by knowing the offset of the lb's initial page). + Recurses for each link so it can alloc the link storage after + finding them all, then unroll and fill the cache at the same time */ +static int _bisect_forward_serialno(OggVorbis_File *vf, + ogg_int64_t begin, + ogg_int64_t searched, + ogg_int64_t end, + ogg_uint32_t currentno, + long m){ + ogg_int64_t endsearched=end; + ogg_int64_t next=end; + ogg_page og={0,0,0,0}; + ogg_int64_t ret; + + /* the below guards against garbage seperating the last and + first pages of two links. */ + while(searched=0)next=ret; + }else{ + searched=ret+og.header_len+og.body_len; + } + ogg_page_release(&og); + } + + _seek_helper(vf,next); + ret=_get_next_page(vf,&og,-1); + if(ret==OV_EREAD)return OV_EREAD; + + if(searched>=end || ret<0){ + ogg_page_release(&og); + vf->links=m+1; + vf->offsets=_ogg_malloc((vf->links+1)*sizeof(*vf->offsets)); + vf->serialnos=_ogg_malloc(vf->links*sizeof(*vf->serialnos)); + vf->offsets[m+1]=searched; + }else{ + ret=_bisect_forward_serialno(vf,next,vf->offset, + end,ogg_page_serialno(&og),m+1); + ogg_page_release(&og); + if(ret==OV_EREAD)return OV_EREAD; + } + + vf->offsets[m]=begin; + vf->serialnos[m]=currentno; + return 0; +} + +static int _decode_clear(OggVorbis_File *vf){ + if(vf->ready_state==INITSET){ + vorbis_dsp_destroy(vf->vd); + vf->vd=0; + vf->ready_state=STREAMSET; + } + + if(vf->ready_state>=STREAMSET){ + vorbis_info_clear(&vf->vi); + vorbis_comment_clear(&vf->vc); + vf->ready_state=OPENED; + } + return 0; +} + +/* uses the local ogg_stream storage in vf; this is important for + non-streaming input sources */ +/* consumes the page that's passed in (if any) */ +/* state is LINKSET upon successful return */ + +static int _fetch_headers(OggVorbis_File *vf, + vorbis_info *vi, + vorbis_comment *vc, + ogg_uint32_t *serialno, + ogg_page *og_ptr){ + ogg_page og={0,0,0,0}; + ogg_packet op={0,0,0,0,0,0}; + int i,ret; + + if(vf->ready_state>OPENED)_decode_clear(vf); + + if(!og_ptr){ + ogg_int64_t llret=_get_next_page(vf,&og,CHUNKSIZE); + if(llret==OV_EREAD)return OV_EREAD; + if(llret<0)return OV_ENOTVORBIS; + og_ptr=&og; + } + + ogg_stream_reset_serialno(vf->os,ogg_page_serialno(og_ptr)); + if(serialno)*serialno=vf->os->serialno; + + /* extract the initial header from the first page and verify that the + Ogg bitstream is in fact Vorbis data */ + + vorbis_info_init(vi); + vorbis_comment_init(vc); + + i=0; + while(i<3){ + ogg_stream_pagein(vf->os,og_ptr); + while(i<3){ + int result=ogg_stream_packetout(vf->os,&op); + if(result==0)break; + if(result==-1){ + ret=OV_EBADHEADER; + goto bail_header; + } + if((ret=vorbis_dsp_headerin(vi,vc,&op))){ + goto bail_header; + } + i++; + } + if(i<3) + if(_get_next_page(vf,og_ptr,CHUNKSIZE)<0){ + ret=OV_EBADHEADER; + goto bail_header; + } + } + + ogg_packet_release(&op); + ogg_page_release(&og); + vf->ready_state=LINKSET; + return 0; + + bail_header: + ogg_packet_release(&op); + ogg_page_release(&og); + vorbis_info_clear(vi); + vorbis_comment_clear(vc); + vf->ready_state=OPENED; + + return ret; +} + +/* we no longer preload all vorbis_info (and the associated + codec_setup) structs. Call this to seek and fetch the info from + the bitstream, if needed */ +static int _set_link_number(OggVorbis_File *vf,int link){ + if(link != vf->current_link) _decode_clear(vf); + if(vf->ready_stateoffsets[link]); + ogg_stream_reset_serialno(vf->os,vf->serialnos[link]); + vf->current_serialno=vf->serialnos[link]; + vf->current_link=link; + return _fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,NULL); + } + return 0; +} + +static int _set_link_number_preserve_pos(OggVorbis_File *vf,int link){ + ogg_int64_t pos=vf->offset; + int ret=_set_link_number(vf,link); + if(ret)return ret; + _seek_helper(vf,pos); + if(posoffsets[link] || pos>=vf->offsets[link+1]) + vf->ready_state=STREAMSET; + return 0; +} + +/* last step of the OggVorbis_File initialization; get all the offset + positions. Only called by the seekable initialization (local + stream storage is hacked slightly; pay attention to how that's + done) */ + +/* this is void and does not propogate errors up because we want to be + able to open and use damaged bitstreams as well as we can. Just + watch out for missing information for links in the OggVorbis_File + struct */ +static void _prefetch_all_offsets(OggVorbis_File *vf, ogg_int64_t dataoffset){ + ogg_page og={0,0,0,0}; + int i; + ogg_int64_t ret; + + vf->dataoffsets=_ogg_malloc(vf->links*sizeof(*vf->dataoffsets)); + vf->pcmlengths=_ogg_malloc(vf->links*2*sizeof(*vf->pcmlengths)); + + for(i=0;ilinks;i++){ + if(i==0){ + /* we already grabbed the initial header earlier. Just set the offset */ + vf->dataoffsets[i]=dataoffset; + _seek_helper(vf,dataoffset); + + }else{ + + /* seek to the location of the initial header */ + + _seek_helper(vf,vf->offsets[i]); + if(_fetch_headers(vf,&vf->vi,&vf->vc,NULL,NULL)<0){ + vf->dataoffsets[i]=-1; + }else{ + vf->dataoffsets[i]=vf->offset; + } + } + + /* fetch beginning PCM offset */ + + if(vf->dataoffsets[i]!=-1){ + ogg_int64_t accumulated=0,pos; + long lastblock=-1; + int result; + + ogg_stream_reset_serialno(vf->os,vf->serialnos[i]); + + while(1){ + ogg_packet op={0,0,0,0,0,0}; + + ret=_get_next_page(vf,&og,-1); + if(ret<0) + /* this should not be possible unless the file is + truncated/mangled */ + break; + + if(ogg_page_serialno(&og)!=vf->serialnos[i]) + break; + + pos=ogg_page_granulepos(&og); + + /* count blocksizes of all frames in the page */ + ogg_stream_pagein(vf->os,&og); + while((result=ogg_stream_packetout(vf->os,&op))){ + if(result>0){ /* ignore holes */ + long thisblock=vorbis_packet_blocksize(&vf->vi,&op); + if(lastblock!=-1) + accumulated+=(lastblock+thisblock)>>2; + lastblock=thisblock; + } + } + ogg_packet_release(&op); + + if(pos!=-1){ + /* pcm offset of last packet on the first audio page */ + accumulated= pos-accumulated; + break; + } + } + + /* less than zero? This is a stream with samples trimmed off + the beginning, a normal occurrence; set the offset to zero */ + if(accumulated<0)accumulated=0; + + vf->pcmlengths[i*2]=accumulated; + } + + /* get the PCM length of this link. To do this, + get the last page of the stream */ + { + ogg_int64_t end=vf->offsets[i+1]; + _seek_helper(vf,end); + + while(1){ + ret=_get_prev_page(vf,&og); + if(ret<0){ + /* this should not be possible */ + vorbis_info_clear(&vf->vi); + vorbis_comment_clear(&vf->vc); + break; + } + if(ogg_page_granulepos(&og)!=-1){ + vf->pcmlengths[i*2+1]=ogg_page_granulepos(&og)-vf->pcmlengths[i*2]; + break; + } + vf->offset=ret; + } + } + } + ogg_page_release(&og); +} + +static int _make_decode_ready(OggVorbis_File *vf){ + int i; + switch(vf->ready_state){ + case OPENED: + case STREAMSET: + for(i=0;ilinks;i++) + if(vf->offsets[i+1]>=vf->offset)break; + if(i==vf->links)return -1; + i=_set_link_number_preserve_pos(vf,i); + if(i)return i; + /* fall through */ + case LINKSET: + vf->vd=vorbis_dsp_create(&vf->vi); + vf->ready_state=INITSET; + vf->bittrack=0; + vf->samptrack=0; + case INITSET: + return 0; + default: + return -1; + } + +} + +static int _open_seekable2(OggVorbis_File *vf){ + ogg_uint32_t serialno=vf->current_serialno; + ogg_uint32_t tempserialno; + ogg_int64_t dataoffset=vf->offset, end; + ogg_page og={0,0,0,0}; + + /* we're partially open and have a first link header state in + storage in vf */ + /* we can seek, so set out learning all about this file */ + (vf->callbacks.seek_func)(vf->datasource,0,SEEK_END); + vf->offset=vf->end=(vf->callbacks.tell_func)(vf->datasource); + + /* We get the offset for the last page of the physical bitstream. + Most OggVorbis files will contain a single logical bitstream */ + end=_get_prev_page(vf,&og); + if(end<0)return end; + + /* more than one logical bitstream? */ + tempserialno=ogg_page_serialno(&og); + ogg_page_release(&og); + + if(tempserialno!=serialno){ + + /* Chained bitstream. Bisect-search each logical bitstream + section. Do so based on serial number only */ + if(_bisect_forward_serialno(vf,0,0,end+1,serialno,0)<0)return OV_EREAD; + + }else{ + + /* Only one logical bitstream */ + if(_bisect_forward_serialno(vf,0,end,end+1,serialno,0))return OV_EREAD; + + } + + /* the initial header memory is referenced by vf after; don't free it */ + _prefetch_all_offsets(vf,dataoffset); + return ov_raw_seek(vf,0); +} + +/* fetch and process a packet. Handles the case where we're at a + bitstream boundary and dumps the decoding machine. If the decoding + machine is unloaded, it loads it. It also keeps pcm_offset up to + date (seek and read both use this. seek uses a special hack with + readp). + + return: <0) error, OV_HOLE (lost packet) or OV_EOF + 0) need more data (only if readp==0) + 1) got a packet +*/ + +static int _fetch_and_process_packet(OggVorbis_File *vf, + int readp, + int spanp){ + ogg_page og={0,0,0,0}; + ogg_packet op={0,0,0,0,0,0}; + int ret=0; + + /* handle one packet. Try to fetch it from current stream state */ + /* extract packets from page */ + while(1){ + + /* process a packet if we can. If the machine isn't loaded, + neither is a page */ + if(vf->ready_state==INITSET){ + while(1) { + int result=ogg_stream_packetout(vf->os,&op); + ogg_int64_t granulepos; + + if(result<0){ + ret=OV_HOLE; /* hole in the data. */ + goto cleanup; + } + if(result>0){ + /* got a packet. process it */ + granulepos=op.granulepos; + if(!vorbis_dsp_synthesis(vf->vd,&op,1)){ /* lazy check for lazy + header handling. The + header packets aren't + audio, so if/when we + submit them, + vorbis_synthesis will + reject them */ + + vf->samptrack+=vorbis_dsp_pcmout(vf->vd,NULL,0); + vf->bittrack+=op.bytes*8; + + /* update the pcm offset. */ + if(granulepos!=-1 && !op.e_o_s){ + int link=(vf->seekable?vf->current_link:0); + int i,samples; + + /* this packet has a pcm_offset on it (the last packet + completed on a page carries the offset) After processing + (above), we know the pcm position of the *last* sample + ready to be returned. Find the offset of the *first* + + As an aside, this trick is inaccurate if we begin + reading anew right at the last page; the end-of-stream + granulepos declares the last frame in the stream, and the + last packet of the last page may be a partial frame. + So, we need a previous granulepos from an in-sequence page + to have a reference point. Thus the !op.e_o_s clause + above */ + + if(vf->seekable && link>0) + granulepos-=vf->pcmlengths[link*2]; + if(granulepos<0)granulepos=0; /* actually, this + shouldn't be possible + here unless the stream + is very broken */ + + samples=vorbis_dsp_pcmout(vf->vd,NULL,0); + + granulepos-=samples; + for(i=0;ipcmlengths[i*2+1]; + vf->pcm_offset=granulepos; + } + ret=1; + goto cleanup; + } + } + else + break; + } + } + + if(vf->ready_state>=OPENED){ + int ret; + if(!readp){ + ret=0; + goto cleanup; + } + if((ret=_get_next_page(vf,&og,-1))<0){ + ret=OV_EOF; /* eof. leave unitialized */ + goto cleanup; + } + + /* bitrate tracking; add the header's bytes here, the body bytes + are done by packet above */ + vf->bittrack+=og.header_len*8; + + /* has our decoding just traversed a bitstream boundary? */ + if(vf->ready_state==INITSET){ + if(vf->current_serialno!=ogg_page_serialno(&og)){ + if(!spanp){ + ret=OV_EOF; + goto cleanup; + } + + _decode_clear(vf); + } + } + } + + /* Do we need to load a new machine before submitting the page? */ + /* This is different in the seekable and non-seekable cases. + + In the seekable case, we already have all the header + information loaded and cached; we just initialize the machine + with it and continue on our merry way. + + In the non-seekable (streaming) case, we'll only be at a + boundary if we just left the previous logical bitstream and + we're now nominally at the header of the next bitstream + */ + + if(vf->ready_state!=INITSET){ + int link,ret; + + if(vf->ready_stateseekable){ + vf->current_serialno=ogg_page_serialno(&og); + + /* match the serialno to bitstream section. We use this rather than + offset positions to avoid problems near logical bitstream + boundaries */ + for(link=0;linklinks;link++) + if(vf->serialnos[link]==vf->current_serialno)break; + if(link==vf->links){ + ret=OV_EBADLINK; /* sign of a bogus stream. error out, + leave machine uninitialized */ + goto cleanup; + } + + vf->current_link=link; + ret=_fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,&og); + if(ret) goto cleanup; + + }else{ + /* we're streaming */ + /* fetch the three header packets, build the info struct */ + + int ret=_fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,&og); + if(ret) goto cleanup; + vf->current_link++; + } + } + + if(_make_decode_ready(vf)) return OV_EBADLINK; + } + ogg_stream_pagein(vf->os,&og); + } + cleanup: + ogg_packet_release(&op); + ogg_page_release(&og); + return ret; +} + +/* if, eg, 64 bit stdio is configured by default, this will build with + fseek64 */ +static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence){ + if(f==NULL)return -1; + return fseek(f,off,whence); +} + +static int _ov_open1(void *f,OggVorbis_File *vf,char *initial, + long ibytes, ov_callbacks callbacks){ + int offsettest=(f?callbacks.seek_func(f,0,SEEK_CUR):-1); + int ret; + + memset(vf,0,sizeof(*vf)); + + /* Tremor assumes in multiple places that right shift of a signed + integer is an arithmetic shift */ + if( (-1>>1) != -1) return OV_EIMPL; + + vf->datasource=f; + vf->callbacks = callbacks; + + /* init the framing state */ + vf->oy=ogg_sync_create(); + + /* perhaps some data was previously read into a buffer for testing + against other stream types. Allow initialization from this + previously read data (as we may be reading from a non-seekable + stream) */ + if(initial){ + unsigned char *buffer=ogg_sync_bufferin(vf->oy,ibytes); + memcpy(buffer,initial,ibytes); + ogg_sync_wrote(vf->oy,ibytes); + } + + /* can we seek? Stevens suggests the seek test was portable */ + if(offsettest!=-1)vf->seekable=1; + + /* No seeking yet; Set up a 'single' (current) logical bitstream + entry for partial open */ + vf->links=1; + vf->os=ogg_stream_create(-1); /* fill in the serialno later */ + + /* Try to fetch the headers, maintaining all the storage */ + if((ret=_fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,NULL))<0){ + vf->datasource=NULL; + ov_clear(vf); + }else if(vf->ready_state < PARTOPEN) + vf->ready_state=PARTOPEN; + return ret; +} + +static int _ov_open2(OggVorbis_File *vf){ + if(vf->ready_state < OPENED) + vf->ready_state=OPENED; + if(vf->seekable){ + int ret=_open_seekable2(vf); + if(ret){ + vf->datasource=NULL; + ov_clear(vf); + } + return ret; + } + return 0; +} + + +/* clear out the OggVorbis_File struct */ +int ov_clear(OggVorbis_File *vf){ + if(vf){ + vorbis_dsp_destroy(vf->vd); + vf->vd=0; + ogg_stream_destroy(vf->os); + vorbis_info_clear(&vf->vi); + vorbis_comment_clear(&vf->vc); + if(vf->dataoffsets)_ogg_free(vf->dataoffsets); + if(vf->pcmlengths)_ogg_free(vf->pcmlengths); + if(vf->serialnos)_ogg_free(vf->serialnos); + if(vf->offsets)_ogg_free(vf->offsets); + ogg_sync_destroy(vf->oy); + + if(vf->datasource)(vf->callbacks.close_func)(vf->datasource); + memset(vf,0,sizeof(*vf)); + } +#ifdef DEBUG_LEAKS + _VDBG_dump(); +#endif + return 0; +} + +/* inspects the OggVorbis file and finds/documents all the logical + bitstreams contained in it. Tries to be tolerant of logical + bitstream sections that are truncated/woogie. + + return: -1) error + 0) OK +*/ + +int ov_open_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes, + ov_callbacks callbacks){ + int ret=_ov_open1(f,vf,initial,ibytes,callbacks); + if(ret)return ret; + return _ov_open2(vf); +} + +int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){ + ov_callbacks callbacks = { + (size_t (*)(void *, size_t, size_t, void *)) fread, + (int (*)(void *, ogg_int64_t, int)) _fseek64_wrap, + (int (*)(void *)) fclose, + (long (*)(void *)) ftell + }; + + return ov_open_callbacks((void *)f, vf, initial, ibytes, callbacks); +} + +/* Only partially open the vorbis file; test for Vorbisness, and load + the headers for the first chain. Do not seek (although test for + seekability). Use ov_test_open to finish opening the file, else + ov_clear to close/free it. Same return codes as open. */ + +int ov_test_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes, + ov_callbacks callbacks) +{ + return _ov_open1(f,vf,initial,ibytes,callbacks); +} + +int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){ + ov_callbacks callbacks = { + (size_t (*)(void *, size_t, size_t, void *)) fread, + (int (*)(void *, ogg_int64_t, int)) _fseek64_wrap, + (int (*)(void *)) fclose, + (long (*)(void *)) ftell + }; + + return ov_test_callbacks((void *)f, vf, initial, ibytes, callbacks); +} + +int ov_test_open(OggVorbis_File *vf){ + if(vf->ready_state!=PARTOPEN)return OV_EINVAL; + return _ov_open2(vf); +} + +/* How many logical bitstreams in this physical bitstream? */ +long ov_streams(OggVorbis_File *vf){ + return vf->links; +} + +/* Is the FILE * associated with vf seekable? */ +long ov_seekable(OggVorbis_File *vf){ + return vf->seekable; +} + +/* returns the bitrate for a given logical bitstream or the entire + physical bitstream. If the file is open for random access, it will + find the *actual* average bitrate. If the file is streaming, it + returns the nominal bitrate (if set) else the average of the + upper/lower bounds (if set) else -1 (unset). + + If you want the actual bitrate field settings, get them from the + vorbis_info structs */ + +long ov_bitrate(OggVorbis_File *vf,int i){ + if(vf->ready_state=vf->links)return OV_EINVAL; + if(!vf->seekable && i!=0)return ov_bitrate(vf,0); + if(i<0){ + ogg_int64_t bits=0; + int i; + for(i=0;ilinks;i++) + bits+=(vf->offsets[i+1]-vf->dataoffsets[i])*8; + /* This once read: return(rint(bits/ov_time_total(vf,-1))); + * gcc 3.x on x86 miscompiled this at optimisation level 2 and above, + * so this is slightly transformed to make it work. + */ + return bits*1000/ov_time_total(vf,-1); + }else{ + if(vf->seekable){ + /* return the actual bitrate */ + return (vf->offsets[i+1]-vf->dataoffsets[i])*8000/ov_time_total(vf,i); + }else{ + /* return nominal if set */ + if(vf->vi.bitrate_nominal>0){ + return vf->vi.bitrate_nominal; + }else{ + if(vf->vi.bitrate_upper>0){ + if(vf->vi.bitrate_lower>0){ + return (vf->vi.bitrate_upper+vf->vi.bitrate_lower)/2; + }else{ + return vf->vi.bitrate_upper; + } + } + return OV_FALSE; + } + } + } +} + +/* returns the actual bitrate since last call. returns -1 if no + additional data to offer since last call (or at beginning of stream), + EINVAL if stream is only partially open +*/ +long ov_bitrate_instant(OggVorbis_File *vf){ + long ret; + if(vf->ready_statesamptrack==0)return OV_FALSE; + ret=vf->bittrack/vf->samptrack*vf->vi.rate; + vf->bittrack=0; + vf->samptrack=0; + return ret; +} + +/* Guess */ +long ov_serialnumber(OggVorbis_File *vf,int i){ + if(i>=vf->links)return ov_serialnumber(vf,vf->links-1); + if(!vf->seekable && i>=0)return ov_serialnumber(vf,-1); + if(i<0){ + return vf->current_serialno; + }else{ + return vf->serialnos[i]; + } +} + +/* returns: total raw (compressed) length of content if i==-1 + raw (compressed) length of that logical bitstream for i==0 to n + OV_EINVAL if the stream is not seekable (we can't know the length) + or if stream is only partially open +*/ +ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i){ + if(vf->ready_stateseekable || i>=vf->links)return OV_EINVAL; + if(i<0){ + ogg_int64_t acc=0; + int i; + for(i=0;ilinks;i++) + acc+=ov_raw_total(vf,i); + return acc; + }else{ + return vf->offsets[i+1]-vf->offsets[i]; + } +} + +/* returns: total PCM length (samples) of content if i==-1 PCM length + (samples) of that logical bitstream for i==0 to n + OV_EINVAL if the stream is not seekable (we can't know the + length) or only partially open +*/ +ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i){ + if(vf->ready_stateseekable || i>=vf->links)return OV_EINVAL; + if(i<0){ + ogg_int64_t acc=0; + int i; + for(i=0;ilinks;i++) + acc+=ov_pcm_total(vf,i); + return acc; + }else{ + return vf->pcmlengths[i*2+1]; + } +} + +/* returns: total milliseconds of content if i==-1 + milliseconds in that logical bitstream for i==0 to n + OV_EINVAL if the stream is not seekable (we can't know the + length) or only partially open +*/ +ogg_int64_t ov_time_total(OggVorbis_File *vf,int i){ + if(vf->ready_stateseekable || i>=vf->links)return OV_EINVAL; + if(i<0){ + ogg_int64_t acc=0; + int i; + for(i=0;ilinks;i++) + acc+=ov_time_total(vf,i); + return acc; + }else{ + return ((ogg_int64_t)vf->pcmlengths[i*2+1])*1000/vf->vi.rate; + } +} + +/* seek to an offset relative to the *compressed* data. This also + scans packets to update the PCM cursor. It will cross a logical + bitstream boundary, but only if it can't get any packets out of the + tail of the bitstream we seek to (so no surprises). + + returns zero on success, nonzero on failure */ + +int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){ + ogg_stream_state *work_os=NULL; + ogg_page og={0,0,0,0}; + ogg_packet op={0,0,0,0,0,0}; + + if(vf->ready_stateseekable) + return OV_ENOSEEK; /* don't dump machine if we can't seek */ + + if(pos<0 || pos>vf->end)return OV_EINVAL; + + /* don't yet clear out decoding machine (if it's initialized), in + the case we're in the same link. Restart the decode lapping, and + let _fetch_and_process_packet deal with a potential bitstream + boundary */ + vf->pcm_offset=-1; + ogg_stream_reset_serialno(vf->os, + vf->current_serialno); /* must set serialno */ + vorbis_dsp_restart(vf->vd); + + _seek_helper(vf,pos); + + /* we need to make sure the pcm_offset is set, but we don't want to + advance the raw cursor past good packets just to get to the first + with a granulepos. That's not equivalent behavior to beginning + decoding as immediately after the seek position as possible. + + So, a hack. We use two stream states; a local scratch state and + the shared vf->os stream state. We use the local state to + scan, and the shared state as a buffer for later decode. + + Unfortuantely, on the last page we still advance to last packet + because the granulepos on the last page is not necessarily on a + packet boundary, and we need to make sure the granpos is + correct. + */ + + { + int lastblock=0; + int accblock=0; + int thisblock; + int eosflag; + + work_os=ogg_stream_create(vf->current_serialno); /* get the memory ready */ + while(1){ + if(vf->ready_state>=STREAMSET){ + /* snarf/scan a packet if we can */ + int result=ogg_stream_packetout(work_os,&op); + + if(result>0){ + + if(vf->vi.codec_setup){ + thisblock=vorbis_packet_blocksize(&vf->vi,&op); + if(thisblock<0){ + ogg_stream_packetout(vf->os,NULL); + thisblock=0; + }else{ + + if(eosflag) + ogg_stream_packetout(vf->os,NULL); + else + if(lastblock)accblock+=(lastblock+thisblock)>>2; + } + + if(op.granulepos!=-1){ + int i,link=vf->current_link; + ogg_int64_t granulepos=op.granulepos-vf->pcmlengths[link*2]; + if(granulepos<0)granulepos=0; + + for(i=0;ipcmlengths[i*2+1]; + vf->pcm_offset=granulepos-accblock; + break; + } + lastblock=thisblock; + continue; + }else + ogg_stream_packetout(vf->os,NULL); + } + } + + if(!lastblock){ + if(_get_next_page(vf,&og,-1)<0){ + vf->pcm_offset=ov_pcm_total(vf,-1); + break; + } + }else{ + /* huh? Bogus stream with packets but no granulepos */ + vf->pcm_offset=-1; + break; + } + + /* did we just grab a page from other than current link? */ + if(vf->ready_state>=STREAMSET) + if(vf->current_serialno!=ogg_page_serialno(&og)){ + _decode_clear(vf); /* clear out stream state */ + ogg_stream_destroy(work_os); + } + + if(vf->ready_statecurrent_serialno=ogg_page_serialno(&og); + for(link=0;linklinks;link++) + if(vf->serialnos[link]==vf->current_serialno)break; + if(link==vf->links) + goto seek_error; /* sign of a bogus stream. error out, + leave machine uninitialized */ + + /* need to initialize machine to this link */ + { + int ret=_set_link_number_preserve_pos(vf,link); + if(ret) goto seek_error; + } + ogg_stream_reset_serialno(vf->os,vf->current_serialno); + ogg_stream_reset_serialno(work_os,vf->current_serialno); + + + } + + { + ogg_page dup; + ogg_page_dup(&dup,&og); + eosflag=ogg_page_eos(&og); + ogg_stream_pagein(vf->os,&og); + ogg_stream_pagein(work_os,&dup); + } + } + } + + ogg_packet_release(&op); + ogg_page_release(&og); + ogg_stream_destroy(work_os); + vf->bittrack=0; + vf->samptrack=0; + return 0; + + seek_error: + ogg_packet_release(&op); + ogg_page_release(&og); + + /* dump the machine so we're in a known state */ + vf->pcm_offset=-1; + ogg_stream_destroy(work_os); + _decode_clear(vf); + return OV_EBADLINK; +} + +/* Page granularity seek (faster than sample granularity because we + don't do the last bit of decode to find a specific sample). + + Seek to the last [granule marked] page preceeding the specified pos + location, such that decoding past the returned point will quickly + arrive at the requested position. */ +int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){ + int link=-1; + ogg_int64_t result=0; + ogg_int64_t total=ov_pcm_total(vf,-1); + ogg_page og={0,0,0,0}; + ogg_packet op={0,0,0,0,0,0}; + + if(vf->ready_stateseekable)return OV_ENOSEEK; + if(pos<0 || pos>total)return OV_EINVAL; + + /* which bitstream section does this pcm offset occur in? */ + for(link=vf->links-1;link>=0;link--){ + total-=vf->pcmlengths[link*2+1]; + if(pos>=total)break; + } + + + if(link!=vf->current_link){ + int ret=_set_link_number(vf,link); + if(ret) goto seek_error; + }else{ + vorbis_dsp_restart(vf->vd); + } + + ogg_stream_reset_serialno(vf->os,vf->serialnos[link]); + + /* search within the logical bitstream for the page with the highest + pcm_pos preceeding (or equal to) pos. There is a danger here; + missing pages or incorrect frame number information in the + bitstream could make our task impossible. Account for that (it + would be an error condition) */ + + /* new search algorithm by HB (Nicholas Vinen) */ + { + ogg_int64_t end=vf->offsets[link+1]; + ogg_int64_t begin=vf->offsets[link]; + ogg_int64_t begintime = vf->pcmlengths[link*2]; + ogg_int64_t endtime = vf->pcmlengths[link*2+1]+begintime; + ogg_int64_t target=pos-total+begintime; + ogg_int64_t best=begin; + + while(beginoffset); + if(result==OV_EREAD) goto seek_error; + if(result<0){ + if(bisect<=begin+1) + end=begin; /* found it */ + else{ + if(bisect==0) goto seek_error; + bisect-=CHUNKSIZE; + if(bisect<=begin)bisect=begin+1; + _seek_helper(vf,bisect); + } + }else{ + ogg_int64_t granulepos=ogg_page_granulepos(&og); + if(granulepos==-1)continue; + if(granuleposoffset; /* raw offset of next page */ + begintime=granulepos; + + if(target-begintime>44100)break; + bisect=begin; /* *not* begin + 1 */ + }else{ + if(bisect<=begin+1) + end=begin; /* found it */ + else{ + if(end==vf->offset){ /* we're pretty close - we'd be stuck in */ + end=result; + bisect-=CHUNKSIZE; /* an endless loop otherwise. */ + if(bisect<=begin)bisect=begin+1; + _seek_helper(vf,bisect); + }else{ + end=result; + endtime=granulepos; + break; + } + } + } + } + } + } + + /* found our page. seek to it, update pcm offset. Easier case than + raw_seek, don't keep packets preceeding granulepos. */ + { + + /* seek */ + _seek_helper(vf,best); + vf->pcm_offset=-1; + + if(_get_next_page(vf,&og,-1)<0){ + ogg_page_release(&og); + return OV_EOF; /* shouldn't happen */ + } + + ogg_stream_pagein(vf->os,&og); + + /* pull out all but last packet; the one with granulepos */ + while(1){ + result=ogg_stream_packetpeek(vf->os,&op); + if(result==0){ + /* !!! the packet finishing this page originated on a + preceeding page. Keep fetching previous pages until we + get one with a granulepos or without the 'continued' flag + set. Then just use raw_seek for simplicity. */ + + _seek_helper(vf,best); + + while(1){ + result=_get_prev_page(vf,&og); + if(result<0) goto seek_error; + if(ogg_page_granulepos(&og)>-1 || + !ogg_page_continued(&og)){ + return ov_raw_seek(vf,result); + } + vf->offset=result; + } + } + if(result<0){ + result = OV_EBADPACKET; + goto seek_error; + } + if(op.granulepos!=-1){ + vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2]; + if(vf->pcm_offset<0)vf->pcm_offset=0; + vf->pcm_offset+=total; + break; + }else + result=ogg_stream_packetout(vf->os,NULL); + } + } + } + + /* verify result */ + if(vf->pcm_offset>pos || pos>ov_pcm_total(vf,-1)){ + result=OV_EFAULT; + goto seek_error; + } + vf->bittrack=0; + vf->samptrack=0; + + ogg_page_release(&og); + ogg_packet_release(&op); + return 0; + + seek_error: + + ogg_page_release(&og); + ogg_packet_release(&op); + + /* dump machine so we're in a known state */ + vf->pcm_offset=-1; + _decode_clear(vf); + return (int)result; +} + +/* seek to a sample offset relative to the decompressed pcm stream + returns zero on success, nonzero on failure */ + +int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos){ + ogg_packet op={0,0,0,0,0,0}; + ogg_page og={0,0,0,0}; + int thisblock,lastblock=0; + int ret=ov_pcm_seek_page(vf,pos); + if(ret<0)return ret; + if(_make_decode_ready(vf))return OV_EBADLINK; + + /* discard leading packets we don't need for the lapping of the + position we want; don't decode them */ + + while(1){ + + int ret=ogg_stream_packetpeek(vf->os,&op); + if(ret>0){ + thisblock=vorbis_packet_blocksize(&vf->vi,&op); + if(thisblock<0){ + ogg_stream_packetout(vf->os,NULL); + continue; /* non audio packet */ + } + if(lastblock)vf->pcm_offset+=(lastblock+thisblock)>>2; + + if(vf->pcm_offset+((thisblock+ + vorbis_info_blocksize(&vf->vi,1))>>2)>=pos)break; + + /* remove the packet from packet queue and track its granulepos */ + ogg_stream_packetout(vf->os,NULL); + vorbis_dsp_synthesis(vf->vd,&op,0); /* set up a vb with + only tracking, no + pcm_decode */ + + /* end of logical stream case is hard, especially with exact + length positioning. */ + + if(op.granulepos>-1){ + int i; + /* always believe the stream markers */ + vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2]; + if(vf->pcm_offset<0)vf->pcm_offset=0; + for(i=0;icurrent_link;i++) + vf->pcm_offset+=vf->pcmlengths[i*2+1]; + } + + lastblock=thisblock; + + }else{ + if(ret<0 && ret!=OV_HOLE)break; + + /* suck in a new page */ + if(_get_next_page(vf,&og,-1)<0)break; + if(vf->current_serialno!=ogg_page_serialno(&og))_decode_clear(vf); + + if(vf->ready_statecurrent_serialno=ogg_page_serialno(&og); + for(link=0;linklinks;link++) + if(vf->serialnos[link]==vf->current_serialno)break; + if(link==vf->links){ + ogg_page_release(&og); + ogg_packet_release(&op); + return OV_EBADLINK; + } + + + vf->current_link=link; + ret=_fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,&og); + if(ret) return ret; + if(_make_decode_ready(vf))return OV_EBADLINK; + lastblock=0; + } + + ogg_stream_pagein(vf->os,&og); + } + } + + vf->bittrack=0; + vf->samptrack=0; + /* discard samples until we reach the desired position. Crossing a + logical bitstream boundary with abandon is OK. */ + while(vf->pcm_offsetpcm_offset; + long samples=vorbis_dsp_pcmout(vf->vd,NULL,0); + + if(samples>target)samples=target; + vorbis_dsp_read(vf->vd,samples); + vf->pcm_offset+=samples; + + if(samplespcm_offset=ov_pcm_total(vf,-1); /* eof */ + } + + ogg_page_release(&og); + ogg_packet_release(&op); + return 0; +} + +/* seek to a playback time relative to the decompressed pcm stream + returns zero on success, nonzero on failure */ +int ov_time_seek(OggVorbis_File *vf,ogg_int64_t milliseconds){ + /* translate time to PCM position and call ov_pcm_seek */ + + int link=-1; + ogg_int64_t pcm_total=ov_pcm_total(vf,-1); + ogg_int64_t time_total=ov_time_total(vf,-1); + + if(vf->ready_stateseekable)return OV_ENOSEEK; + if(milliseconds<0 || milliseconds>time_total)return OV_EINVAL; + + /* which bitstream section does this time offset occur in? */ + for(link=vf->links-1;link>=0;link--){ + pcm_total-=vf->pcmlengths[link*2+1]; + time_total-=ov_time_total(vf,link); + if(milliseconds>=time_total)break; + } + + /* enough information to convert time offset to pcm offset */ + { + int ret=_set_link_number(vf,link); + if(ret)return ret; + return + ov_pcm_seek(vf,pcm_total+(milliseconds-time_total)* + vf->vi.rate/1000); + } +} + +/* page-granularity version of ov_time_seek + returns zero on success, nonzero on failure */ +int ov_time_seek_page(OggVorbis_File *vf,ogg_int64_t milliseconds){ + /* translate time to PCM position and call ov_pcm_seek */ + + int link=-1; + ogg_int64_t pcm_total=ov_pcm_total(vf,-1); + ogg_int64_t time_total=ov_time_total(vf,-1); + + if(vf->ready_stateseekable)return OV_ENOSEEK; + if(milliseconds<0 || milliseconds>time_total)return OV_EINVAL; + + /* which bitstream section does this time offset occur in? */ + for(link=vf->links-1;link>=0;link--){ + pcm_total-=vf->pcmlengths[link*2+1]; + time_total-=ov_time_total(vf,link); + if(milliseconds>=time_total)break; + } + + /* enough information to convert time offset to pcm offset */ + { + int ret=_set_link_number(vf,link); + if(ret)return ret; + return + ov_pcm_seek_page(vf,pcm_total+(milliseconds-time_total)* + vf->vi.rate/1000); + } +} + +/* tell the current stream offset cursor. Note that seek followed by + tell will likely not give the set offset due to caching */ +ogg_int64_t ov_raw_tell(OggVorbis_File *vf){ + if(vf->ready_stateoffset; +} + +/* return PCM offset (sample) of next PCM sample to be read */ +ogg_int64_t ov_pcm_tell(OggVorbis_File *vf){ + if(vf->ready_statepcm_offset; +} + +/* return time offset (milliseconds) of next PCM sample to be read */ +ogg_int64_t ov_time_tell(OggVorbis_File *vf){ + int link=0; + ogg_int64_t pcm_total=0; + ogg_int64_t time_total=0; + + if(vf->ready_stateseekable){ + pcm_total=ov_pcm_total(vf,-1); + time_total=ov_time_total(vf,-1); + + /* which bitstream section does this time offset occur in? */ + for(link=vf->links-1;link>=0;link--){ + pcm_total-=vf->pcmlengths[link*2+1]; + time_total-=ov_time_total(vf,link); + if(vf->pcm_offset>=pcm_total)break; + } + } + + return time_total+(1000*vf->pcm_offset-pcm_total)/vf->vi.rate; +} + +/* link: -1) return the vorbis_info struct for the bitstream section + currently being decoded + 0-n) to request information for a specific bitstream section + + In the case of a non-seekable bitstream, any call returns the + current bitstream. NULL in the case that the machine is not + initialized */ + +vorbis_info *ov_info(OggVorbis_File *vf,int link){ + if(vf->seekable){ + if(link>=vf->links)return NULL; + if(link>=0){ + int ret=_set_link_number_preserve_pos(vf,link); + if(ret)return NULL; + } + } + return &vf->vi; +} + +/* grr, strong typing, grr, no templates/inheritence, grr */ +vorbis_comment *ov_comment(OggVorbis_File *vf,int link){ + if(vf->seekable){ + if(link>=vf->links)return NULL; + if(link>=0){ + int ret=_set_link_number_preserve_pos(vf,link); + if(ret)return NULL; + } + } + return &vf->vc; +} + +/* up to this point, everything could more or less hide the multiple + logical bitstream nature of chaining from the toplevel application + if the toplevel application didn't particularly care. However, at + the point that we actually read audio back, the multiple-section + nature must surface: Multiple bitstream sections do not necessarily + have to have the same number of channels or sampling rate. + + ov_read returns the sequential logical bitstream number currently + being decoded along with the PCM data in order that the toplevel + application can take action on channel/sample rate changes. This + number will be incremented even for streamed (non-seekable) streams + (for seekable streams, it represents the actual logical bitstream + index within the physical bitstream. Note that the accessor + functions above are aware of this dichotomy). + + input values: buffer) a buffer to hold packed PCM data for return + length) the byte length requested to be placed into buffer + + return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL) + 0) EOF + n) number of bytes of PCM actually returned. The + below works on a packet-by-packet basis, so the + return length is not related to the 'length' passed + in, just guaranteed to fit. + + *section) set to the logical bitstream number */ + +long ov_read(OggVorbis_File *vf,void *buffer,int bytes_req,int *bitstream){ + + long samples; + long channels; + + if(vf->ready_stateready_state==INITSET){ + channels=vf->vi.channels; + samples=vorbis_dsp_pcmout(vf->vd,buffer,(bytes_req>>1)/channels); + if(samples){ + if(samples>0){ + vorbis_dsp_read(vf->vd,samples); + vf->pcm_offset+=samples; + if(bitstream)*bitstream=vf->current_link; + return samples*2*channels; + } + return samples; + } + } + + /* suck in another packet */ + { + int ret=_fetch_and_process_packet(vf,1,1); + if(ret==OV_EOF) + return 0; + if(ret<=0) + return ret; + } + + } +} diff --git a/android/jni/tremolo/window_lookup.h b/android/jni/tremolo/window_lookup.h new file mode 100644 index 00000000..1fd171bc --- /dev/null +++ b/android/jni/tremolo/window_lookup.h @@ -0,0 +1,2087 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * + * * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * + * * + ******************************************************************** + + function: window lookup tables + + ********************************************************************/ + + +#include "os_types.h" + +static LOOKUP_T vwin64[32] = { + X(0x001f0003), X(0x01168c98), X(0x030333c8), X(0x05dfe3a4), + X(0x09a49562), X(0x0e45df18), X(0x13b47ef2), X(0x19dcf676), + X(0x20a74d83), X(0x27f7137c), X(0x2fabb05a), X(0x37a1105a), + X(0x3fb0ab28), X(0x47b2dcd1), X(0x4f807bc6), X(0x56f48e70), + X(0x5dedfc79), X(0x64511653), X(0x6a08cfff), X(0x6f079328), + X(0x734796f4), X(0x76cab7f2), X(0x7999d6e8), X(0x7bc3cf9f), + X(0x7d5c20c1), X(0x7e7961df), X(0x7f33a567), X(0x7fa2e1d0), + X(0x7fdd78a5), X(0x7ff6ec6d), X(0x7ffed0e9), X(0x7ffffc3f), +}; + +static LOOKUP_T vwin128[64] = { + X(0x0007c04d), X(0x0045bb89), X(0x00c18b87), X(0x017ae294), + X(0x02714a4e), X(0x03a4217a), X(0x05129952), X(0x06bbb24f), + X(0x089e38a1), X(0x0ab8c073), X(0x0d09a228), X(0x0f8ef6bd), + X(0x12469488), X(0x152e0c7a), X(0x1842a81c), X(0x1b81686d), + X(0x1ee705d9), X(0x226ff15d), X(0x26185705), X(0x29dc21cc), + X(0x2db700fe), X(0x31a46f08), X(0x359fb9c1), X(0x39a40c0c), + X(0x3dac78b6), X(0x41b40674), X(0x45b5bcb0), X(0x49acb109), + X(0x4d94152b), X(0x516744bd), X(0x5521d320), X(0x58bf98a5), + X(0x5c3cbef4), X(0x5f95cc5d), X(0x62c7add7), X(0x65cfbf64), + X(0x68abd2ba), X(0x6b5a3405), X(0x6dd9acab), X(0x7029840d), + X(0x72497e38), X(0x7439d8ac), X(0x75fb4532), X(0x778ee30a), + X(0x78f6367e), X(0x7a331f1a), X(0x7b47cccd), X(0x7c36b416), + X(0x7d028192), X(0x7dae0d18), X(0x7e3c4caa), X(0x7eb04763), + X(0x7f0d08a7), X(0x7f5593b7), X(0x7f8cd7d5), X(0x7fb5a513), + X(0x7fd2a1fc), X(0x7fe64212), X(0x7ff2bd4c), X(0x7ffa0890), + X(0x7ffdcf39), X(0x7fff6dac), X(0x7fffed01), X(0x7fffffc4), +}; + +static LOOKUP_T vwin256[128] = { + X(0x0001f018), X(0x00117066), X(0x00306e9e), X(0x005ee5f1), + X(0x009ccf26), X(0x00ea208b), X(0x0146cdea), X(0x01b2c87f), + X(0x022dfedf), X(0x02b85ced), X(0x0351cbbd), X(0x03fa317f), + X(0x04b17167), X(0x05776b90), X(0x064bfcdc), X(0x072efedd), + X(0x082047b4), X(0x091fa9f1), X(0x0a2cf477), X(0x0b47f25d), + X(0x0c706ad2), X(0x0da620ff), X(0x0ee8d3ef), X(0x10383e75), + X(0x11941716), X(0x12fc0ff6), X(0x146fd6c8), X(0x15ef14c2), + X(0x17796e8e), X(0x190e844f), X(0x1aadf196), X(0x1c574d6e), + X(0x1e0a2a62), X(0x1fc61688), X(0x218a9b9c), X(0x23573f12), + X(0x252b823d), X(0x2706e269), X(0x28e8d913), X(0x2ad0dc0e), + X(0x2cbe5dc1), X(0x2eb0cd60), X(0x30a79733), X(0x32a224d5), + X(0x349fdd8b), X(0x36a02690), X(0x38a2636f), X(0x3aa5f65e), + X(0x3caa409e), X(0x3eaea2df), X(0x40b27da6), X(0x42b531b8), + X(0x44b62086), X(0x46b4ac99), X(0x48b03a05), X(0x4aa82ed5), + X(0x4c9bf37d), X(0x4e8af349), X(0x50749ccb), X(0x52586246), + X(0x5435ba1c), X(0x560c1f31), X(0x57db1152), X(0x59a21591), + X(0x5b60b6a3), X(0x5d168535), X(0x5ec31839), X(0x60660d36), + X(0x61ff0886), X(0x638db595), X(0x6511c717), X(0x668af734), + X(0x67f907b0), X(0x695bc207), X(0x6ab2f787), X(0x6bfe815a), + X(0x6d3e4090), X(0x6e721e16), X(0x6f9a0ab5), X(0x70b5fef8), + X(0x71c5fb16), X(0x72ca06cd), X(0x73c2313d), X(0x74ae90b2), + X(0x758f4275), X(0x76646a85), X(0x772e335c), X(0x77eccda0), + X(0x78a06fd7), X(0x79495613), X(0x79e7c19c), X(0x7a7bf894), + X(0x7b064596), X(0x7b86f757), X(0x7bfe6044), X(0x7c6cd615), + X(0x7cd2b16e), X(0x7d304d71), X(0x7d860756), X(0x7dd43e06), + X(0x7e1b51ad), X(0x7e5ba355), X(0x7e95947e), X(0x7ec986bb), + X(0x7ef7db4a), X(0x7f20f2b9), X(0x7f452c7f), X(0x7f64e6a7), + X(0x7f807d71), X(0x7f984aff), X(0x7faca700), X(0x7fbde662), + X(0x7fcc5b04), X(0x7fd85372), X(0x7fe21a99), X(0x7fe9f791), + X(0x7ff02d58), X(0x7ff4fa9e), X(0x7ff89990), X(0x7ffb3faa), + X(0x7ffd1d8b), X(0x7ffe5ecc), X(0x7fff29e0), X(0x7fff9ff3), + X(0x7fffdcd2), X(0x7ffff6d6), X(0x7ffffed0), X(0x7ffffffc), +}; + +static LOOKUP_T vwin512[256] = { + X(0x00007c06), X(0x00045c32), X(0x000c1c62), X(0x0017bc4c), + X(0x00273b7a), X(0x003a9955), X(0x0051d51c), X(0x006cede7), + X(0x008be2a9), X(0x00aeb22a), X(0x00d55b0d), X(0x00ffdbcc), + X(0x012e32b6), X(0x01605df5), X(0x01965b85), X(0x01d02939), + X(0x020dc4ba), X(0x024f2b83), X(0x02945ae6), X(0x02dd5004), + X(0x032a07d3), X(0x037a7f19), X(0x03ceb26e), X(0x04269e37), + X(0x04823eab), X(0x04e18fcc), X(0x05448d6d), X(0x05ab3329), + X(0x06157c68), X(0x0683645e), X(0x06f4e607), X(0x0769fc25), + X(0x07e2a146), X(0x085ecfbc), X(0x08de819f), X(0x0961b0cc), + X(0x09e856e3), X(0x0a726d46), X(0x0affed1d), X(0x0b90cf4c), + X(0x0c250c79), X(0x0cbc9d0b), X(0x0d577926), X(0x0df598aa), + X(0x0e96f337), X(0x0f3b8026), X(0x0fe3368f), X(0x108e0d42), + X(0x113bfaca), X(0x11ecf56b), X(0x12a0f324), X(0x1357e9ac), + X(0x1411ce70), X(0x14ce9698), X(0x158e3702), X(0x1650a444), + X(0x1715d2aa), X(0x17ddb638), X(0x18a842aa), X(0x19756b72), + X(0x1a4523b9), X(0x1b175e62), X(0x1bec0e04), X(0x1cc324f0), + X(0x1d9c9532), X(0x1e78508a), X(0x1f564876), X(0x20366e2e), + X(0x2118b2a2), X(0x21fd0681), X(0x22e35a37), X(0x23cb9dee), + X(0x24b5c18e), X(0x25a1b4c0), X(0x268f66f1), X(0x277ec74e), + X(0x286fc4cc), X(0x29624e23), X(0x2a5651d7), X(0x2b4bbe34), + X(0x2c428150), X(0x2d3a8913), X(0x2e33c332), X(0x2f2e1d35), + X(0x30298478), X(0x3125e62d), X(0x32232f61), X(0x33214cfc), + X(0x34202bc2), X(0x351fb85a), X(0x361fdf4f), X(0x37208d10), + X(0x3821adf7), X(0x39232e49), X(0x3a24fa3c), X(0x3b26fdf6), + X(0x3c292593), X(0x3d2b5d29), X(0x3e2d90c8), X(0x3f2fac7f), + X(0x40319c5f), X(0x41334c81), X(0x4234a905), X(0x43359e16), + X(0x443617f3), X(0x453602eb), X(0x46354b65), X(0x4733dde1), + X(0x4831a6ff), X(0x492e937f), X(0x4a2a9045), X(0x4b258a5f), + X(0x4c1f6f06), X(0x4d182ba2), X(0x4e0fadce), X(0x4f05e35b), + X(0x4ffaba53), X(0x50ee20fd), X(0x51e005e1), X(0x52d057ca), + X(0x53bf05ca), X(0x54abff3b), X(0x559733c7), X(0x56809365), + X(0x57680e62), X(0x584d955d), X(0x59311952), X(0x5a128b96), + X(0x5af1dddd), X(0x5bcf023a), X(0x5ca9eb27), X(0x5d828b81), + X(0x5e58d68d), X(0x5f2cbffc), X(0x5ffe3be9), X(0x60cd3edf), + X(0x6199bdda), X(0x6263ae45), X(0x632b0602), X(0x63efbb66), + X(0x64b1c53f), X(0x65711ad0), X(0x662db3d7), X(0x66e7888d), + X(0x679e91a5), X(0x6852c84e), X(0x69042635), X(0x69b2a582), + X(0x6a5e40dd), X(0x6b06f36c), X(0x6bacb8d2), X(0x6c4f8d30), + X(0x6cef6d26), X(0x6d8c55d4), X(0x6e2644d4), X(0x6ebd3840), + X(0x6f512ead), X(0x6fe2272e), X(0x7070214f), X(0x70fb1d17), + X(0x71831b06), X(0x72081c16), X(0x728a21b5), X(0x73092dc8), + X(0x738542a6), X(0x73fe631b), X(0x74749261), X(0x74e7d421), + X(0x75582c72), X(0x75c59fd5), X(0x76303333), X(0x7697ebdd), + X(0x76fccf85), X(0x775ee443), X(0x77be308a), X(0x781abb2e), + X(0x78748b59), X(0x78cba88e), X(0x79201aa7), X(0x7971e9cd), + X(0x79c11e79), X(0x7a0dc170), X(0x7a57dbc2), X(0x7a9f76c1), + X(0x7ae49c07), X(0x7b27556b), X(0x7b67ad02), X(0x7ba5ad1b), + X(0x7be1603a), X(0x7c1ad118), X(0x7c520a9e), X(0x7c8717e1), + X(0x7cba0421), X(0x7ceadac3), X(0x7d19a74f), X(0x7d46756e), + X(0x7d7150e5), X(0x7d9a4592), X(0x7dc15f69), X(0x7de6aa71), + X(0x7e0a32c0), X(0x7e2c0479), X(0x7e4c2bc7), X(0x7e6ab4db), + X(0x7e87abe9), X(0x7ea31d24), X(0x7ebd14be), X(0x7ed59edd), + X(0x7eecc7a3), X(0x7f029b21), X(0x7f17255a), X(0x7f2a723f), + X(0x7f3c8daa), X(0x7f4d835d), X(0x7f5d5f00), X(0x7f6c2c1b), + X(0x7f79f617), X(0x7f86c83a), X(0x7f92ada2), X(0x7f9db146), + X(0x7fa7ddf3), X(0x7fb13e46), X(0x7fb9dcb0), X(0x7fc1c36c), + X(0x7fc8fc83), X(0x7fcf91c7), X(0x7fd58cd2), X(0x7fdaf702), + X(0x7fdfd979), X(0x7fe43d1c), X(0x7fe82a8b), X(0x7febaa29), + X(0x7feec412), X(0x7ff1801c), X(0x7ff3e5d6), X(0x7ff5fc86), + X(0x7ff7cb29), X(0x7ff9586f), X(0x7ffaaaba), X(0x7ffbc81e), + X(0x7ffcb660), X(0x7ffd7af3), X(0x7ffe1afa), X(0x7ffe9b42), + X(0x7fff0047), X(0x7fff4e2f), X(0x7fff88c9), X(0x7fffb390), + X(0x7fffd1a6), X(0x7fffe5d7), X(0x7ffff296), X(0x7ffff9fd), + X(0x7ffffdcd), X(0x7fffff6d), X(0x7fffffed), X(0x7fffffff), +}; + +static LOOKUP_T vwin1024[512] = { + X(0x00001f02), X(0x0001170e), X(0x00030724), X(0x0005ef40), + X(0x0009cf59), X(0x000ea767), X(0x0014775e), X(0x001b3f2e), + X(0x0022fec8), X(0x002bb618), X(0x00356508), X(0x00400b81), + X(0x004ba968), X(0x00583ea0), X(0x0065cb0a), X(0x00744e84), + X(0x0083c8ea), X(0x00943a14), X(0x00a5a1da), X(0x00b80010), + X(0x00cb5488), X(0x00df9f10), X(0x00f4df76), X(0x010b1584), + X(0x01224101), X(0x013a61b2), X(0x01537759), X(0x016d81b6), + X(0x01888087), X(0x01a47385), X(0x01c15a69), X(0x01df34e6), + X(0x01fe02b1), X(0x021dc377), X(0x023e76e7), X(0x02601ca9), + X(0x0282b466), X(0x02a63dc1), X(0x02cab85d), X(0x02f023d6), + X(0x03167fcb), X(0x033dcbd3), X(0x03660783), X(0x038f3270), + X(0x03b94c29), X(0x03e4543a), X(0x04104a2e), X(0x043d2d8b), + X(0x046afdd5), X(0x0499ba8c), X(0x04c9632d), X(0x04f9f734), + X(0x052b7615), X(0x055ddf46), X(0x05913237), X(0x05c56e53), + X(0x05fa9306), X(0x06309fb6), X(0x066793c5), X(0x069f6e93), + X(0x06d82f7c), X(0x0711d5d9), X(0x074c60fe), X(0x0787d03d), + X(0x07c422e4), X(0x0801583e), X(0x083f6f91), X(0x087e681f), + X(0x08be4129), X(0x08fef9ea), X(0x0940919a), X(0x0983076d), + X(0x09c65a92), X(0x0a0a8a38), X(0x0a4f9585), X(0x0a957b9f), + X(0x0adc3ba7), X(0x0b23d4b9), X(0x0b6c45ee), X(0x0bb58e5a), + X(0x0bffad0f), X(0x0c4aa11a), X(0x0c966982), X(0x0ce3054d), + X(0x0d30737b), X(0x0d7eb308), X(0x0dcdc2eb), X(0x0e1da21a), + X(0x0e6e4f83), X(0x0ebfca11), X(0x0f1210ad), X(0x0f652238), + X(0x0fb8fd91), X(0x100da192), X(0x10630d11), X(0x10b93ee0), + X(0x111035cb), X(0x1167f09a), X(0x11c06e13), X(0x1219acf5), + X(0x1273abfb), X(0x12ce69db), X(0x1329e54a), X(0x13861cf3), + X(0x13e30f80), X(0x1440bb97), X(0x149f1fd8), X(0x14fe3ade), + X(0x155e0b40), X(0x15be8f92), X(0x161fc662), X(0x1681ae38), + X(0x16e4459b), X(0x17478b0b), X(0x17ab7d03), X(0x181019fb), + X(0x18756067), X(0x18db4eb3), X(0x1941e34a), X(0x19a91c92), + X(0x1a10f8ea), X(0x1a7976af), X(0x1ae29439), X(0x1b4c4fda), + X(0x1bb6a7e2), X(0x1c219a9a), X(0x1c8d2649), X(0x1cf9492e), + X(0x1d660188), X(0x1dd34d8e), X(0x1e412b74), X(0x1eaf996a), + X(0x1f1e959b), X(0x1f8e1e2f), X(0x1ffe3146), X(0x206ecd01), + X(0x20dfef78), X(0x215196c2), X(0x21c3c0f0), X(0x22366c10), + X(0x22a9962a), X(0x231d3d45), X(0x23915f60), X(0x2405fa7a), + X(0x247b0c8c), X(0x24f09389), X(0x25668d65), X(0x25dcf80c), + X(0x2653d167), X(0x26cb175e), X(0x2742c7d0), X(0x27bae09e), + X(0x28335fa2), X(0x28ac42b3), X(0x292587a5), X(0x299f2c48), + X(0x2a192e69), X(0x2a938bd1), X(0x2b0e4247), X(0x2b894f8d), + X(0x2c04b164), X(0x2c806588), X(0x2cfc69b2), X(0x2d78bb9a), + X(0x2df558f4), X(0x2e723f6f), X(0x2eef6cbb), X(0x2f6cde83), + X(0x2fea9270), X(0x30688627), X(0x30e6b74e), X(0x31652385), + X(0x31e3c86b), X(0x3262a39e), X(0x32e1b2b8), X(0x3360f352), + X(0x33e06303), X(0x345fff5e), X(0x34dfc5f8), X(0x355fb462), + X(0x35dfc82a), X(0x365ffee0), X(0x36e0560f), X(0x3760cb43), + X(0x37e15c05), X(0x386205df), X(0x38e2c657), X(0x39639af5), + X(0x39e4813e), X(0x3a6576b6), X(0x3ae678e3), X(0x3b678547), + X(0x3be89965), X(0x3c69b2c1), X(0x3ceacedc), X(0x3d6beb37), + X(0x3ded0557), X(0x3e6e1abb), X(0x3eef28e6), X(0x3f702d5a), + X(0x3ff1259a), X(0x40720f29), X(0x40f2e789), X(0x4173ac3f), + X(0x41f45ad0), X(0x4274f0c2), X(0x42f56b9a), X(0x4375c8e0), + X(0x43f6061d), X(0x447620db), X(0x44f616a5), X(0x4575e509), + X(0x45f58994), X(0x467501d6), X(0x46f44b62), X(0x477363cb), + X(0x47f248a6), X(0x4870f78e), X(0x48ef6e1a), X(0x496da9e8), + X(0x49eba897), X(0x4a6967c8), X(0x4ae6e521), X(0x4b641e47), + X(0x4be110e5), X(0x4c5dbaa7), X(0x4cda193f), X(0x4d562a5f), + X(0x4dd1ebbd), X(0x4e4d5b15), X(0x4ec87623), X(0x4f433aa9), + X(0x4fbda66c), X(0x5037b734), X(0x50b16acf), X(0x512abf0e), + X(0x51a3b1c5), X(0x521c40ce), X(0x52946a06), X(0x530c2b50), + X(0x53838292), X(0x53fa6db8), X(0x5470eab3), X(0x54e6f776), + X(0x555c91fc), X(0x55d1b844), X(0x56466851), X(0x56baa02f), + X(0x572e5deb), X(0x57a19f98), X(0x58146352), X(0x5886a737), + X(0x58f8696d), X(0x5969a81c), X(0x59da6177), X(0x5a4a93b4), + X(0x5aba3d0f), X(0x5b295bcb), X(0x5b97ee30), X(0x5c05f28d), + X(0x5c736738), X(0x5ce04a8d), X(0x5d4c9aed), X(0x5db856c1), + X(0x5e237c78), X(0x5e8e0a89), X(0x5ef7ff6f), X(0x5f6159b0), + X(0x5fca17d4), X(0x6032386e), X(0x6099ba15), X(0x61009b69), + X(0x6166db11), X(0x61cc77b9), X(0x62317017), X(0x6295c2e7), + X(0x62f96eec), X(0x635c72f1), X(0x63becdc8), X(0x64207e4b), + X(0x6481835a), X(0x64e1dbde), X(0x654186c8), X(0x65a0830e), + X(0x65fecfb1), X(0x665c6bb7), X(0x66b95630), X(0x67158e30), + X(0x677112d7), X(0x67cbe34b), X(0x6825feb9), X(0x687f6456), + X(0x68d81361), X(0x69300b1e), X(0x69874ada), X(0x69ddd1ea), + X(0x6a339fab), X(0x6a88b382), X(0x6add0cdb), X(0x6b30ab2a), + X(0x6b838dec), X(0x6bd5b4a6), X(0x6c271ee2), X(0x6c77cc36), + X(0x6cc7bc3d), X(0x6d16ee9b), X(0x6d6562fb), X(0x6db31911), + X(0x6e001099), X(0x6e4c4955), X(0x6e97c311), X(0x6ee27d9f), + X(0x6f2c78d9), X(0x6f75b4a2), X(0x6fbe30e4), X(0x7005ed91), + X(0x704ceaa1), X(0x70932816), X(0x70d8a5f8), X(0x711d6457), + X(0x7161634b), X(0x71a4a2f3), X(0x71e72375), X(0x7228e500), + X(0x7269e7c8), X(0x72aa2c0a), X(0x72e9b209), X(0x73287a12), + X(0x73668476), X(0x73a3d18f), X(0x73e061bc), X(0x741c3566), + X(0x74574cfa), X(0x7491a8ee), X(0x74cb49be), X(0x75042fec), + X(0x753c5c03), X(0x7573ce92), X(0x75aa882f), X(0x75e08979), + X(0x7615d313), X(0x764a65a7), X(0x767e41e5), X(0x76b16884), + X(0x76e3da40), X(0x771597dc), X(0x7746a221), X(0x7776f9dd), + X(0x77a69fe6), X(0x77d59514), X(0x7803da49), X(0x7831706a), + X(0x785e5861), X(0x788a9320), X(0x78b6219c), X(0x78e104cf), + X(0x790b3dbb), X(0x7934cd64), X(0x795db4d5), X(0x7985f51d), + X(0x79ad8f50), X(0x79d48486), X(0x79fad5de), X(0x7a208478), + X(0x7a45917b), X(0x7a69fe12), X(0x7a8dcb6c), X(0x7ab0fabb), + X(0x7ad38d36), X(0x7af5841a), X(0x7b16e0a3), X(0x7b37a416), + X(0x7b57cfb8), X(0x7b7764d4), X(0x7b9664b6), X(0x7bb4d0b0), + X(0x7bd2aa14), X(0x7beff23b), X(0x7c0caa7f), X(0x7c28d43c), + X(0x7c4470d2), X(0x7c5f81a5), X(0x7c7a081a), X(0x7c940598), + X(0x7cad7b8b), X(0x7cc66b5e), X(0x7cded680), X(0x7cf6be64), + X(0x7d0e247b), X(0x7d250a3c), X(0x7d3b711c), X(0x7d515a95), + X(0x7d66c822), X(0x7d7bbb3c), X(0x7d903563), X(0x7da43814), + X(0x7db7c4d0), X(0x7dcadd16), X(0x7ddd826a), X(0x7defb64d), + X(0x7e017a44), X(0x7e12cfd3), X(0x7e23b87f), X(0x7e3435cc), + X(0x7e444943), X(0x7e53f467), X(0x7e6338c0), X(0x7e7217d5), + X(0x7e80932b), X(0x7e8eac49), X(0x7e9c64b7), X(0x7ea9bdf8), + X(0x7eb6b994), X(0x7ec35910), X(0x7ecf9def), X(0x7edb89b6), + X(0x7ee71de9), X(0x7ef25c09), X(0x7efd4598), X(0x7f07dc16), + X(0x7f122103), X(0x7f1c15dc), X(0x7f25bc1f), X(0x7f2f1547), + X(0x7f3822cd), X(0x7f40e62b), X(0x7f4960d6), X(0x7f519443), + X(0x7f5981e7), X(0x7f612b31), X(0x7f689191), X(0x7f6fb674), + X(0x7f769b45), X(0x7f7d416c), X(0x7f83aa51), X(0x7f89d757), + X(0x7f8fc9df), X(0x7f958348), X(0x7f9b04ef), X(0x7fa0502e), + X(0x7fa56659), X(0x7faa48c7), X(0x7faef8c7), X(0x7fb377a7), + X(0x7fb7c6b3), X(0x7fbbe732), X(0x7fbfda67), X(0x7fc3a196), + X(0x7fc73dfa), X(0x7fcab0ce), X(0x7fcdfb4a), X(0x7fd11ea0), + X(0x7fd41c00), X(0x7fd6f496), X(0x7fd9a989), X(0x7fdc3bff), + X(0x7fdead17), X(0x7fe0fdee), X(0x7fe32f9d), X(0x7fe54337), + X(0x7fe739ce), X(0x7fe9146c), X(0x7fead41b), X(0x7fec79dd), + X(0x7fee06b2), X(0x7fef7b94), X(0x7ff0d97b), X(0x7ff22158), + X(0x7ff35417), X(0x7ff472a3), X(0x7ff57de0), X(0x7ff676ac), + X(0x7ff75de3), X(0x7ff8345a), X(0x7ff8fae4), X(0x7ff9b24b), + X(0x7ffa5b58), X(0x7ffaf6cd), X(0x7ffb8568), X(0x7ffc07e2), + X(0x7ffc7eed), X(0x7ffceb38), X(0x7ffd4d6d), X(0x7ffda631), + X(0x7ffdf621), X(0x7ffe3dd8), X(0x7ffe7dea), X(0x7ffeb6e7), + X(0x7ffee959), X(0x7fff15c4), X(0x7fff3ca9), X(0x7fff5e80), + X(0x7fff7bc0), X(0x7fff94d6), X(0x7fffaa2d), X(0x7fffbc29), + X(0x7fffcb29), X(0x7fffd786), X(0x7fffe195), X(0x7fffe9a3), + X(0x7fffeffa), X(0x7ffff4dd), X(0x7ffff889), X(0x7ffffb37), + X(0x7ffffd1a), X(0x7ffffe5d), X(0x7fffff29), X(0x7fffffa0), + X(0x7fffffdd), X(0x7ffffff7), X(0x7fffffff), X(0x7fffffff), +}; + +static LOOKUP_T vwin2048[1024] = { + X(0x000007c0), X(0x000045c4), X(0x0000c1ca), X(0x00017bd3), + X(0x000273de), X(0x0003a9eb), X(0x00051df9), X(0x0006d007), + X(0x0008c014), X(0x000aee1e), X(0x000d5a25), X(0x00100428), + X(0x0012ec23), X(0x00161216), X(0x001975fe), X(0x001d17da), + X(0x0020f7a8), X(0x00251564), X(0x0029710c), X(0x002e0a9e), + X(0x0032e217), X(0x0037f773), X(0x003d4ab0), X(0x0042dbca), + X(0x0048aabe), X(0x004eb788), X(0x00550224), X(0x005b8a8f), + X(0x006250c5), X(0x006954c1), X(0x0070967e), X(0x007815f9), + X(0x007fd32c), X(0x0087ce13), X(0x009006a9), X(0x00987ce9), + X(0x00a130cc), X(0x00aa224f), X(0x00b3516b), X(0x00bcbe1a), + X(0x00c66856), X(0x00d0501a), X(0x00da755f), X(0x00e4d81f), + X(0x00ef7853), X(0x00fa55f4), X(0x010570fc), X(0x0110c963), + X(0x011c5f22), X(0x01283232), X(0x0134428c), X(0x01409027), + X(0x014d1afb), X(0x0159e302), X(0x0166e831), X(0x01742a82), + X(0x0181a9ec), X(0x018f6665), X(0x019d5fe5), X(0x01ab9663), + X(0x01ba09d6), X(0x01c8ba34), X(0x01d7a775), X(0x01e6d18d), + X(0x01f63873), X(0x0205dc1e), X(0x0215bc82), X(0x0225d997), + X(0x02363350), X(0x0246c9a3), X(0x02579c86), X(0x0268abed), + X(0x0279f7cc), X(0x028b801a), X(0x029d44c9), X(0x02af45ce), + X(0x02c1831d), X(0x02d3fcaa), X(0x02e6b269), X(0x02f9a44c), + X(0x030cd248), X(0x03203c4f), X(0x0333e255), X(0x0347c44b), + X(0x035be225), X(0x03703bd5), X(0x0384d14d), X(0x0399a280), + X(0x03aeaf5e), X(0x03c3f7d9), X(0x03d97be4), X(0x03ef3b6e), + X(0x0405366a), X(0x041b6cc8), X(0x0431de78), X(0x04488b6c), + X(0x045f7393), X(0x047696dd), X(0x048df53b), X(0x04a58e9b), + X(0x04bd62ee), X(0x04d57223), X(0x04edbc28), X(0x050640ed), + X(0x051f0060), X(0x0537fa70), X(0x05512f0a), X(0x056a9e1e), + X(0x05844798), X(0x059e2b67), X(0x05b84978), X(0x05d2a1b8), + X(0x05ed3414), X(0x06080079), X(0x062306d3), X(0x063e470f), + X(0x0659c119), X(0x067574dd), X(0x06916247), X(0x06ad8941), + X(0x06c9e9b8), X(0x06e68397), X(0x070356c8), X(0x07206336), + X(0x073da8cb), X(0x075b2772), X(0x0778df15), X(0x0796cf9c), + X(0x07b4f8f3), X(0x07d35b01), X(0x07f1f5b1), X(0x0810c8eb), + X(0x082fd497), X(0x084f189e), X(0x086e94e9), X(0x088e495e), + X(0x08ae35e6), X(0x08ce5a68), X(0x08eeb6cc), X(0x090f4af8), + X(0x093016d3), X(0x09511a44), X(0x09725530), X(0x0993c77f), + X(0x09b57115), X(0x09d751d8), X(0x09f969ae), X(0x0a1bb87c), + X(0x0a3e3e26), X(0x0a60fa91), X(0x0a83eda2), X(0x0aa7173c), + X(0x0aca7743), X(0x0aee0d9b), X(0x0b11da28), X(0x0b35dccc), + X(0x0b5a156a), X(0x0b7e83e5), X(0x0ba3281f), X(0x0bc801fa), + X(0x0bed1159), X(0x0c12561c), X(0x0c37d025), X(0x0c5d7f55), + X(0x0c83638d), X(0x0ca97cae), X(0x0ccfca97), X(0x0cf64d2a), + X(0x0d1d0444), X(0x0d43efc7), X(0x0d6b0f92), X(0x0d926383), + X(0x0db9eb79), X(0x0de1a752), X(0x0e0996ee), X(0x0e31ba29), + X(0x0e5a10e2), X(0x0e829af6), X(0x0eab5841), X(0x0ed448a2), + X(0x0efd6bf4), X(0x0f26c214), X(0x0f504ade), X(0x0f7a062e), + X(0x0fa3f3df), X(0x0fce13cd), X(0x0ff865d2), X(0x1022e9ca), + X(0x104d9f8e), X(0x107886f9), X(0x10a39fe5), X(0x10ceea2c), + X(0x10fa65a6), X(0x1126122d), X(0x1151ef9a), X(0x117dfdc5), + X(0x11aa3c87), X(0x11d6abb6), X(0x12034b2c), X(0x12301ac0), + X(0x125d1a48), X(0x128a499b), X(0x12b7a891), X(0x12e536ff), + X(0x1312f4bb), X(0x1340e19c), X(0x136efd75), X(0x139d481e), + X(0x13cbc16a), X(0x13fa692f), X(0x14293f40), X(0x14584371), + X(0x14877597), X(0x14b6d585), X(0x14e6630d), X(0x15161e04), + X(0x1546063b), X(0x15761b85), X(0x15a65db3), X(0x15d6cc99), + X(0x16076806), X(0x16382fcd), X(0x166923bf), X(0x169a43ab), + X(0x16cb8f62), X(0x16fd06b5), X(0x172ea973), X(0x1760776b), + X(0x1792706e), X(0x17c49449), X(0x17f6e2cb), X(0x18295bc3), + X(0x185bfeff), X(0x188ecc4c), X(0x18c1c379), X(0x18f4e452), + X(0x19282ea4), X(0x195ba23c), X(0x198f3ee6), X(0x19c3046e), + X(0x19f6f2a1), X(0x1a2b094a), X(0x1a5f4833), X(0x1a93af28), + X(0x1ac83df3), X(0x1afcf460), X(0x1b31d237), X(0x1b66d744), + X(0x1b9c034e), X(0x1bd15621), X(0x1c06cf84), X(0x1c3c6f40), + X(0x1c72351e), X(0x1ca820e6), X(0x1cde3260), X(0x1d146953), + X(0x1d4ac587), X(0x1d8146c3), X(0x1db7eccd), X(0x1deeb76c), + X(0x1e25a667), X(0x1e5cb982), X(0x1e93f085), X(0x1ecb4b33), + X(0x1f02c953), X(0x1f3a6aaa), X(0x1f722efb), X(0x1faa160b), + X(0x1fe21f9e), X(0x201a4b79), X(0x2052995d), X(0x208b0910), + X(0x20c39a53), X(0x20fc4cea), X(0x21352097), X(0x216e151c), + X(0x21a72a3a), X(0x21e05fb5), X(0x2219b54d), X(0x22532ac3), + X(0x228cbfd8), X(0x22c6744d), X(0x230047e2), X(0x233a3a58), + X(0x23744b6d), X(0x23ae7ae3), X(0x23e8c878), X(0x242333ec), + X(0x245dbcfd), X(0x24986369), X(0x24d326f1), X(0x250e0750), + X(0x25490446), X(0x25841d90), X(0x25bf52ec), X(0x25faa417), + X(0x263610cd), X(0x267198cc), X(0x26ad3bcf), X(0x26e8f994), + X(0x2724d1d6), X(0x2760c451), X(0x279cd0c0), X(0x27d8f6e0), + X(0x2815366a), X(0x28518f1b), X(0x288e00ac), X(0x28ca8ad8), + X(0x29072d5a), X(0x2943e7eb), X(0x2980ba45), X(0x29bda422), + X(0x29faa53c), X(0x2a37bd4a), X(0x2a74ec07), X(0x2ab2312b), + X(0x2aef8c6f), X(0x2b2cfd8b), X(0x2b6a8437), X(0x2ba8202c), + X(0x2be5d120), X(0x2c2396cc), X(0x2c6170e7), X(0x2c9f5f29), + X(0x2cdd6147), X(0x2d1b76fa), X(0x2d599ff7), X(0x2d97dbf5), + X(0x2dd62aab), X(0x2e148bcf), X(0x2e52ff16), X(0x2e918436), + X(0x2ed01ae5), X(0x2f0ec2d9), X(0x2f4d7bc6), X(0x2f8c4562), + X(0x2fcb1f62), X(0x300a097a), X(0x3049035f), X(0x30880cc6), + X(0x30c72563), X(0x31064cea), X(0x3145830f), X(0x3184c786), + X(0x31c41a03), X(0x32037a39), X(0x3242e7dc), X(0x3282629f), + X(0x32c1ea36), X(0x33017e53), X(0x33411ea9), X(0x3380caec), + X(0x33c082ce), X(0x34004602), X(0x34401439), X(0x347fed27), + X(0x34bfd07e), X(0x34ffbdf0), X(0x353fb52e), X(0x357fb5ec), + X(0x35bfbfda), X(0x35ffd2aa), X(0x363fee0f), X(0x368011b9), + X(0x36c03d5a), X(0x370070a4), X(0x3740ab48), X(0x3780ecf7), + X(0x37c13562), X(0x3801843a), X(0x3841d931), X(0x388233f7), + X(0x38c2943d), X(0x3902f9b4), X(0x3943640d), X(0x3983d2f8), + X(0x39c44626), X(0x3a04bd48), X(0x3a45380e), X(0x3a85b62a), + X(0x3ac6374a), X(0x3b06bb20), X(0x3b47415c), X(0x3b87c9ae), + X(0x3bc853c7), X(0x3c08df57), X(0x3c496c0f), X(0x3c89f99f), + X(0x3cca87b6), X(0x3d0b1605), X(0x3d4ba43d), X(0x3d8c320e), + X(0x3dccbf27), X(0x3e0d4b3a), X(0x3e4dd5f6), X(0x3e8e5f0c), + X(0x3ecee62b), X(0x3f0f6b05), X(0x3f4fed49), X(0x3f906ca8), + X(0x3fd0e8d2), X(0x40116177), X(0x4051d648), X(0x409246f6), + X(0x40d2b330), X(0x41131aa7), X(0x41537d0c), X(0x4193da10), + X(0x41d43162), X(0x421482b4), X(0x4254cdb7), X(0x4295121b), + X(0x42d54f91), X(0x431585ca), X(0x4355b477), X(0x4395db49), + X(0x43d5f9f1), X(0x44161021), X(0x44561d8a), X(0x449621dd), + X(0x44d61ccc), X(0x45160e08), X(0x4555f544), X(0x4595d230), + X(0x45d5a47f), X(0x46156be3), X(0x4655280e), X(0x4694d8b2), + X(0x46d47d82), X(0x4714162f), X(0x4753a26d), X(0x479321ef), + X(0x47d29466), X(0x4811f987), X(0x48515104), X(0x48909a91), + X(0x48cfd5e1), X(0x490f02a7), X(0x494e2098), X(0x498d2f66), + X(0x49cc2ec7), X(0x4a0b1e6f), X(0x4a49fe11), X(0x4a88cd62), + X(0x4ac78c18), X(0x4b0639e6), X(0x4b44d683), X(0x4b8361a2), + X(0x4bc1dafa), X(0x4c004241), X(0x4c3e972c), X(0x4c7cd970), + X(0x4cbb08c5), X(0x4cf924e1), X(0x4d372d7a), X(0x4d752247), + X(0x4db30300), X(0x4df0cf5a), X(0x4e2e870f), X(0x4e6c29d6), + X(0x4ea9b766), X(0x4ee72f78), X(0x4f2491c4), X(0x4f61de02), + X(0x4f9f13ec), X(0x4fdc333b), X(0x50193ba8), X(0x50562ced), + X(0x509306c3), X(0x50cfc8e5), X(0x510c730d), X(0x514904f6), + X(0x51857e5a), X(0x51c1def5), X(0x51fe2682), X(0x523a54bc), + X(0x52766961), X(0x52b2642c), X(0x52ee44d9), X(0x532a0b26), + X(0x5365b6d0), X(0x53a14793), X(0x53dcbd2f), X(0x54181760), + X(0x545355e5), X(0x548e787d), X(0x54c97ee6), X(0x550468e1), + X(0x553f362c), X(0x5579e687), X(0x55b479b3), X(0x55eeef70), + X(0x5629477f), X(0x566381a1), X(0x569d9d97), X(0x56d79b24), + X(0x57117a0a), X(0x574b3a0a), X(0x5784dae9), X(0x57be5c69), + X(0x57f7be4d), X(0x5831005a), X(0x586a2254), X(0x58a32400), + X(0x58dc0522), X(0x5914c57f), X(0x594d64de), X(0x5985e305), + X(0x59be3fba), X(0x59f67ac3), X(0x5a2e93e9), X(0x5a668af2), + X(0x5a9e5fa6), X(0x5ad611ce), X(0x5b0da133), X(0x5b450d9d), + X(0x5b7c56d7), X(0x5bb37ca9), X(0x5bea7ede), X(0x5c215d41), + X(0x5c58179d), X(0x5c8eadbe), X(0x5cc51f6f), X(0x5cfb6c7c), + X(0x5d3194b2), X(0x5d6797de), X(0x5d9d75cf), X(0x5dd32e51), + X(0x5e08c132), X(0x5e3e2e43), X(0x5e737551), X(0x5ea8962d), + X(0x5edd90a7), X(0x5f12648e), X(0x5f4711b4), X(0x5f7b97ea), + X(0x5faff702), X(0x5fe42ece), X(0x60183f20), X(0x604c27cc), + X(0x607fe8a6), X(0x60b38180), X(0x60e6f22f), X(0x611a3a89), + X(0x614d5a62), X(0x61805190), X(0x61b31fe9), X(0x61e5c545), + X(0x62184179), X(0x624a945d), X(0x627cbdca), X(0x62aebd98), + X(0x62e0939f), X(0x63123fba), X(0x6343c1c1), X(0x6375198f), + X(0x63a646ff), X(0x63d749ec), X(0x64082232), X(0x6438cfad), + X(0x64695238), X(0x6499a9b3), X(0x64c9d5f9), X(0x64f9d6ea), + X(0x6529ac63), X(0x65595643), X(0x6588d46a), X(0x65b826b8), + X(0x65e74d0e), X(0x6616474b), X(0x66451552), X(0x6673b704), + X(0x66a22c44), X(0x66d074f4), X(0x66fe90f8), X(0x672c8033), + X(0x675a428a), X(0x6787d7e1), X(0x67b5401f), X(0x67e27b27), + X(0x680f88e1), X(0x683c6934), X(0x68691c05), X(0x6895a13e), + X(0x68c1f8c7), X(0x68ee2287), X(0x691a1e68), X(0x6945ec54), + X(0x69718c35), X(0x699cfdf5), X(0x69c8417f), X(0x69f356c0), + X(0x6a1e3da3), X(0x6a48f615), X(0x6a738002), X(0x6a9ddb5a), + X(0x6ac80808), X(0x6af205fd), X(0x6b1bd526), X(0x6b457575), + X(0x6b6ee6d8), X(0x6b982940), X(0x6bc13c9f), X(0x6bea20e5), + X(0x6c12d605), X(0x6c3b5bf1), X(0x6c63b29c), X(0x6c8bd9fb), + X(0x6cb3d200), X(0x6cdb9aa0), X(0x6d0333d0), X(0x6d2a9d86), + X(0x6d51d7b7), X(0x6d78e25a), X(0x6d9fbd67), X(0x6dc668d3), + X(0x6dece498), X(0x6e1330ad), X(0x6e394d0c), X(0x6e5f39ae), + X(0x6e84f68d), X(0x6eaa83a2), X(0x6ecfe0ea), X(0x6ef50e5e), + X(0x6f1a0bfc), X(0x6f3ed9bf), X(0x6f6377a4), X(0x6f87e5a8), + X(0x6fac23c9), X(0x6fd03206), X(0x6ff4105c), X(0x7017becc), + X(0x703b3d54), X(0x705e8bf5), X(0x7081aaaf), X(0x70a49984), + X(0x70c75874), X(0x70e9e783), X(0x710c46b2), X(0x712e7605), + X(0x7150757f), X(0x71724523), X(0x7193e4f6), X(0x71b554fd), + X(0x71d6953e), X(0x71f7a5bd), X(0x72188681), X(0x72393792), + X(0x7259b8f5), X(0x727a0ab2), X(0x729a2cd2), X(0x72ba1f5d), + X(0x72d9e25c), X(0x72f975d8), X(0x7318d9db), X(0x73380e6f), + X(0x735713a0), X(0x7375e978), X(0x73949003), X(0x73b3074c), + X(0x73d14f61), X(0x73ef684f), X(0x740d5222), X(0x742b0ce9), + X(0x744898b1), X(0x7465f589), X(0x74832381), X(0x74a022a8), + X(0x74bcf30e), X(0x74d994c3), X(0x74f607d8), X(0x75124c5f), + X(0x752e6268), X(0x754a4a05), X(0x7566034b), X(0x75818e4a), + X(0x759ceb16), X(0x75b819c4), X(0x75d31a66), X(0x75eded12), + X(0x760891dc), X(0x762308da), X(0x763d5221), X(0x76576dc8), + X(0x76715be4), X(0x768b1c8c), X(0x76a4afd9), X(0x76be15e0), + X(0x76d74ebb), X(0x76f05a82), X(0x7709394d), X(0x7721eb35), + X(0x773a7054), X(0x7752c8c4), X(0x776af49f), X(0x7782f400), + X(0x779ac701), X(0x77b26dbd), X(0x77c9e851), X(0x77e136d8), + X(0x77f8596f), X(0x780f5032), X(0x78261b3f), X(0x783cbab2), + X(0x78532eaa), X(0x78697745), X(0x787f94a0), X(0x789586db), + X(0x78ab4e15), X(0x78c0ea6d), X(0x78d65c03), X(0x78eba2f7), + X(0x7900bf68), X(0x7915b179), X(0x792a7949), X(0x793f16fb), + X(0x79538aaf), X(0x7967d488), X(0x797bf4a8), X(0x798feb31), + X(0x79a3b846), X(0x79b75c0a), X(0x79cad6a1), X(0x79de282e), + X(0x79f150d5), X(0x7a0450bb), X(0x7a172803), X(0x7a29d6d3), + X(0x7a3c5d50), X(0x7a4ebb9f), X(0x7a60f1e6), X(0x7a73004a), + X(0x7a84e6f2), X(0x7a96a604), X(0x7aa83da7), X(0x7ab9ae01), + X(0x7acaf73a), X(0x7adc1979), X(0x7aed14e6), X(0x7afde9a8), + X(0x7b0e97e8), X(0x7b1f1fcd), X(0x7b2f8182), X(0x7b3fbd2d), + X(0x7b4fd2f9), X(0x7b5fc30f), X(0x7b6f8d98), X(0x7b7f32bd), + X(0x7b8eb2a9), X(0x7b9e0d85), X(0x7bad437d), X(0x7bbc54b9), + X(0x7bcb4166), X(0x7bda09ae), X(0x7be8adbc), X(0x7bf72dbc), + X(0x7c0589d8), X(0x7c13c23d), X(0x7c21d716), X(0x7c2fc88f), + X(0x7c3d96d5), X(0x7c4b4214), X(0x7c58ca78), X(0x7c66302d), + X(0x7c737362), X(0x7c809443), X(0x7c8d92fc), X(0x7c9a6fbc), + X(0x7ca72aaf), X(0x7cb3c404), X(0x7cc03be8), X(0x7ccc9288), + X(0x7cd8c814), X(0x7ce4dcb9), X(0x7cf0d0a5), X(0x7cfca406), + X(0x7d08570c), X(0x7d13e9e5), X(0x7d1f5cbf), X(0x7d2aafca), + X(0x7d35e335), X(0x7d40f72e), X(0x7d4bebe4), X(0x7d56c188), + X(0x7d617848), X(0x7d6c1054), X(0x7d7689db), X(0x7d80e50e), + X(0x7d8b221b), X(0x7d954133), X(0x7d9f4286), X(0x7da92643), + X(0x7db2ec9b), X(0x7dbc95bd), X(0x7dc621da), X(0x7dcf9123), + X(0x7dd8e3c6), X(0x7de219f6), X(0x7deb33e2), X(0x7df431ba), + X(0x7dfd13af), X(0x7e05d9f2), X(0x7e0e84b4), X(0x7e171424), + X(0x7e1f8874), X(0x7e27e1d4), X(0x7e302074), X(0x7e384487), + X(0x7e404e3c), X(0x7e483dc4), X(0x7e501350), X(0x7e57cf11), + X(0x7e5f7138), X(0x7e66f9f4), X(0x7e6e6979), X(0x7e75bff5), + X(0x7e7cfd9a), X(0x7e842298), X(0x7e8b2f22), X(0x7e922366), + X(0x7e98ff97), X(0x7e9fc3e4), X(0x7ea6707f), X(0x7ead0598), + X(0x7eb38360), X(0x7eb9ea07), X(0x7ec039bf), X(0x7ec672b7), + X(0x7ecc9521), X(0x7ed2a12c), X(0x7ed8970a), X(0x7ede76ea), + X(0x7ee440fd), X(0x7ee9f573), X(0x7eef947d), X(0x7ef51e4b), + X(0x7efa930d), X(0x7efff2f2), X(0x7f053e2b), X(0x7f0a74e8), + X(0x7f0f9758), X(0x7f14a5ac), X(0x7f19a013), X(0x7f1e86bc), + X(0x7f2359d8), X(0x7f281995), X(0x7f2cc623), X(0x7f315fb1), + X(0x7f35e66e), X(0x7f3a5a8a), X(0x7f3ebc33), X(0x7f430b98), + X(0x7f4748e7), X(0x7f4b7450), X(0x7f4f8e01), X(0x7f539629), + X(0x7f578cf5), X(0x7f5b7293), X(0x7f5f4732), X(0x7f630b00), + X(0x7f66be2b), X(0x7f6a60df), X(0x7f6df34b), X(0x7f71759b), + X(0x7f74e7fe), X(0x7f784aa0), X(0x7f7b9daf), X(0x7f7ee156), + X(0x7f8215c3), X(0x7f853b22), X(0x7f88519f), X(0x7f8b5967), + X(0x7f8e52a6), X(0x7f913d87), X(0x7f941a36), X(0x7f96e8df), + X(0x7f99a9ad), X(0x7f9c5ccb), X(0x7f9f0265), X(0x7fa19aa5), + X(0x7fa425b5), X(0x7fa6a3c1), X(0x7fa914f3), X(0x7fab7974), + X(0x7fadd16f), X(0x7fb01d0d), X(0x7fb25c78), X(0x7fb48fd9), + X(0x7fb6b75a), X(0x7fb8d323), X(0x7fbae35d), X(0x7fbce831), + X(0x7fbee1c7), X(0x7fc0d047), X(0x7fc2b3d9), X(0x7fc48ca5), + X(0x7fc65ad3), X(0x7fc81e88), X(0x7fc9d7ee), X(0x7fcb872a), + X(0x7fcd2c63), X(0x7fcec7bf), X(0x7fd05966), X(0x7fd1e17c), + X(0x7fd36027), X(0x7fd4d58d), X(0x7fd641d3), X(0x7fd7a51e), + X(0x7fd8ff94), X(0x7fda5157), X(0x7fdb9a8e), X(0x7fdcdb5b), + X(0x7fde13e2), X(0x7fdf4448), X(0x7fe06caf), X(0x7fe18d3b), + X(0x7fe2a60e), X(0x7fe3b74b), X(0x7fe4c114), X(0x7fe5c38b), + X(0x7fe6bed2), X(0x7fe7b30a), X(0x7fe8a055), X(0x7fe986d4), + X(0x7fea66a7), X(0x7feb3ff0), X(0x7fec12cd), X(0x7fecdf5f), + X(0x7feda5c5), X(0x7fee6620), X(0x7fef208d), X(0x7fefd52c), + X(0x7ff0841c), X(0x7ff12d7a), X(0x7ff1d164), X(0x7ff26ff9), + X(0x7ff30955), X(0x7ff39d96), X(0x7ff42cd9), X(0x7ff4b739), + X(0x7ff53cd4), X(0x7ff5bdc5), X(0x7ff63a28), X(0x7ff6b217), + X(0x7ff725af), X(0x7ff7950a), X(0x7ff80043), X(0x7ff86773), + X(0x7ff8cab4), X(0x7ff92a21), X(0x7ff985d1), X(0x7ff9dddf), + X(0x7ffa3262), X(0x7ffa8374), X(0x7ffad12c), X(0x7ffb1ba1), + X(0x7ffb62ec), X(0x7ffba723), X(0x7ffbe85c), X(0x7ffc26b0), + X(0x7ffc6233), X(0x7ffc9afb), X(0x7ffcd11e), X(0x7ffd04b1), + X(0x7ffd35c9), X(0x7ffd647b), X(0x7ffd90da), X(0x7ffdbafa), + X(0x7ffde2f0), X(0x7ffe08ce), X(0x7ffe2ca7), X(0x7ffe4e8e), + X(0x7ffe6e95), X(0x7ffe8cce), X(0x7ffea94a), X(0x7ffec41b), + X(0x7ffedd52), X(0x7ffef4ff), X(0x7fff0b33), X(0x7fff1ffd), + X(0x7fff336e), X(0x7fff4593), X(0x7fff567d), X(0x7fff663a), + X(0x7fff74d8), X(0x7fff8265), X(0x7fff8eee), X(0x7fff9a81), + X(0x7fffa52b), X(0x7fffaef8), X(0x7fffb7f5), X(0x7fffc02d), + X(0x7fffc7ab), X(0x7fffce7c), X(0x7fffd4a9), X(0x7fffda3e), + X(0x7fffdf44), X(0x7fffe3c6), X(0x7fffe7cc), X(0x7fffeb60), + X(0x7fffee8a), X(0x7ffff153), X(0x7ffff3c4), X(0x7ffff5e3), + X(0x7ffff7b8), X(0x7ffff94b), X(0x7ffffaa1), X(0x7ffffbc1), + X(0x7ffffcb2), X(0x7ffffd78), X(0x7ffffe19), X(0x7ffffe9a), + X(0x7ffffeff), X(0x7fffff4e), X(0x7fffff89), X(0x7fffffb3), + X(0x7fffffd2), X(0x7fffffe6), X(0x7ffffff3), X(0x7ffffffa), + X(0x7ffffffe), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), +}; + +static LOOKUP_T vwin4096[2048] = { + X(0x000001f0), X(0x00001171), X(0x00003072), X(0x00005ef5), + X(0x00009cf8), X(0x0000ea7c), X(0x00014780), X(0x0001b405), + X(0x0002300b), X(0x0002bb91), X(0x00035698), X(0x0004011e), + X(0x0004bb25), X(0x000584ac), X(0x00065db3), X(0x0007463a), + X(0x00083e41), X(0x000945c7), X(0x000a5ccc), X(0x000b8350), + X(0x000cb954), X(0x000dfed7), X(0x000f53d8), X(0x0010b857), + X(0x00122c55), X(0x0013afd1), X(0x001542ca), X(0x0016e541), + X(0x00189735), X(0x001a58a7), X(0x001c2995), X(0x001e09ff), + X(0x001ff9e6), X(0x0021f948), X(0x00240826), X(0x00262680), + X(0x00285454), X(0x002a91a3), X(0x002cde6c), X(0x002f3aaf), + X(0x0031a66b), X(0x003421a0), X(0x0036ac4f), X(0x00394675), + X(0x003bf014), X(0x003ea92a), X(0x004171b7), X(0x004449bb), + X(0x00473135), X(0x004a2824), X(0x004d2e8a), X(0x00504463), + X(0x005369b2), X(0x00569e74), X(0x0059e2aa), X(0x005d3652), + X(0x0060996d), X(0x00640bf9), X(0x00678df7), X(0x006b1f66), + X(0x006ec045), X(0x00727093), X(0x00763051), X(0x0079ff7d), + X(0x007dde16), X(0x0081cc1d), X(0x0085c991), X(0x0089d671), + X(0x008df2bc), X(0x00921e71), X(0x00965991), X(0x009aa41a), + X(0x009efe0c), X(0x00a36766), X(0x00a7e028), X(0x00ac6850), + X(0x00b0ffde), X(0x00b5a6d1), X(0x00ba5d28), X(0x00bf22e4), + X(0x00c3f802), X(0x00c8dc83), X(0x00cdd065), X(0x00d2d3a8), + X(0x00d7e64a), X(0x00dd084c), X(0x00e239ac), X(0x00e77a69), + X(0x00ecca83), X(0x00f229f9), X(0x00f798ca), X(0x00fd16f5), + X(0x0102a479), X(0x01084155), X(0x010ded89), X(0x0113a913), + X(0x011973f3), X(0x011f4e27), X(0x012537af), X(0x012b308a), + X(0x013138b7), X(0x01375035), X(0x013d7702), X(0x0143ad1f), + X(0x0149f289), X(0x01504741), X(0x0156ab44), X(0x015d1e92), + X(0x0163a12a), X(0x016a330b), X(0x0170d433), X(0x017784a3), + X(0x017e4458), X(0x01851351), X(0x018bf18e), X(0x0192df0d), + X(0x0199dbcd), X(0x01a0e7cd), X(0x01a8030c), X(0x01af2d89), + X(0x01b66743), X(0x01bdb038), X(0x01c50867), X(0x01cc6fd0), + X(0x01d3e670), X(0x01db6c47), X(0x01e30153), X(0x01eaa593), + X(0x01f25907), X(0x01fa1bac), X(0x0201ed81), X(0x0209ce86), + X(0x0211beb8), X(0x0219be17), X(0x0221cca2), X(0x0229ea56), + X(0x02321733), X(0x023a5337), X(0x02429e60), X(0x024af8af), + X(0x02536220), X(0x025bdab3), X(0x02646267), X(0x026cf93a), + X(0x02759f2a), X(0x027e5436), X(0x0287185d), X(0x028feb9d), + X(0x0298cdf4), X(0x02a1bf62), X(0x02aabfe5), X(0x02b3cf7b), + X(0x02bcee23), X(0x02c61bdb), X(0x02cf58a2), X(0x02d8a475), + X(0x02e1ff55), X(0x02eb693e), X(0x02f4e230), X(0x02fe6a29), + X(0x03080127), X(0x0311a729), X(0x031b5c2d), X(0x03252031), + X(0x032ef334), X(0x0338d534), X(0x0342c630), X(0x034cc625), + X(0x0356d512), X(0x0360f2f6), X(0x036b1fce), X(0x03755b99), + X(0x037fa655), X(0x038a0001), X(0x0394689a), X(0x039ee020), + X(0x03a9668f), X(0x03b3fbe6), X(0x03bea024), X(0x03c95347), + X(0x03d4154d), X(0x03dee633), X(0x03e9c5f9), X(0x03f4b49b), + X(0x03ffb219), X(0x040abe71), X(0x0415d9a0), X(0x042103a5), + X(0x042c3c7d), X(0x04378428), X(0x0442daa2), X(0x044e3fea), + X(0x0459b3fd), X(0x046536db), X(0x0470c880), X(0x047c68eb), + X(0x0488181a), X(0x0493d60b), X(0x049fa2bc), X(0x04ab7e2a), + X(0x04b76854), X(0x04c36137), X(0x04cf68d1), X(0x04db7f21), + X(0x04e7a424), X(0x04f3d7d8), X(0x05001a3b), X(0x050c6b4a), + X(0x0518cb04), X(0x05253966), X(0x0531b66e), X(0x053e421a), + X(0x054adc68), X(0x05578555), X(0x05643cdf), X(0x05710304), + X(0x057dd7c1), X(0x058abb15), X(0x0597acfd), X(0x05a4ad76), + X(0x05b1bc7f), X(0x05beda14), X(0x05cc0635), X(0x05d940dd), + X(0x05e68a0b), X(0x05f3e1bd), X(0x060147f0), X(0x060ebca1), + X(0x061c3fcf), X(0x0629d176), X(0x06377194), X(0x06452027), + X(0x0652dd2c), X(0x0660a8a2), X(0x066e8284), X(0x067c6ad1), + X(0x068a6186), X(0x069866a1), X(0x06a67a1e), X(0x06b49bfc), + X(0x06c2cc38), X(0x06d10acf), X(0x06df57bf), X(0x06edb304), + X(0x06fc1c9d), X(0x070a9487), X(0x07191abe), X(0x0727af40), + X(0x0736520b), X(0x0745031c), X(0x0753c270), X(0x07629004), + X(0x07716bd6), X(0x078055e2), X(0x078f4e26), X(0x079e549f), + X(0x07ad694b), X(0x07bc8c26), X(0x07cbbd2e), X(0x07dafc5f), + X(0x07ea49b7), X(0x07f9a533), X(0x08090ed1), X(0x0818868c), + X(0x08280c62), X(0x0837a051), X(0x08474255), X(0x0856f26b), + X(0x0866b091), X(0x08767cc3), X(0x088656fe), X(0x08963f3f), + X(0x08a63584), X(0x08b639c8), X(0x08c64c0a), X(0x08d66c45), + X(0x08e69a77), X(0x08f6d69d), X(0x090720b3), X(0x091778b7), + X(0x0927dea5), X(0x0938527a), X(0x0948d433), X(0x095963cc), + X(0x096a0143), X(0x097aac94), X(0x098b65bb), X(0x099c2cb6), + X(0x09ad0182), X(0x09bde41a), X(0x09ced47d), X(0x09dfd2a5), + X(0x09f0de90), X(0x0a01f83b), X(0x0a131fa3), X(0x0a2454c3), + X(0x0a359798), X(0x0a46e820), X(0x0a584656), X(0x0a69b237), + X(0x0a7b2bc0), X(0x0a8cb2ec), X(0x0a9e47ba), X(0x0aafea24), + X(0x0ac19a29), X(0x0ad357c3), X(0x0ae522ef), X(0x0af6fbab), + X(0x0b08e1f1), X(0x0b1ad5c0), X(0x0b2cd712), X(0x0b3ee5e5), + X(0x0b510234), X(0x0b632bfd), X(0x0b75633b), X(0x0b87a7eb), + X(0x0b99fa08), X(0x0bac5990), X(0x0bbec67e), X(0x0bd140cf), + X(0x0be3c87e), X(0x0bf65d89), X(0x0c08ffeb), X(0x0c1bafa1), + X(0x0c2e6ca6), X(0x0c4136f6), X(0x0c540e8f), X(0x0c66f36c), + X(0x0c79e588), X(0x0c8ce4e1), X(0x0c9ff172), X(0x0cb30b37), + X(0x0cc6322c), X(0x0cd9664d), X(0x0ceca797), X(0x0cfff605), + X(0x0d135193), X(0x0d26ba3d), X(0x0d3a2fff), X(0x0d4db2d5), + X(0x0d6142ba), X(0x0d74dfac), X(0x0d8889a5), X(0x0d9c40a1), + X(0x0db0049d), X(0x0dc3d593), X(0x0dd7b380), X(0x0deb9e60), + X(0x0dff962f), X(0x0e139ae7), X(0x0e27ac85), X(0x0e3bcb05), + X(0x0e4ff662), X(0x0e642e98), X(0x0e7873a2), X(0x0e8cc57d), + X(0x0ea12423), X(0x0eb58f91), X(0x0eca07c2), X(0x0ede8cb1), + X(0x0ef31e5b), X(0x0f07bcba), X(0x0f1c67cb), X(0x0f311f88), + X(0x0f45e3ee), X(0x0f5ab4f7), X(0x0f6f92a0), X(0x0f847ce3), + X(0x0f9973bc), X(0x0fae7726), X(0x0fc3871e), X(0x0fd8a39d), + X(0x0fedcca1), X(0x10030223), X(0x1018441f), X(0x102d9291), + X(0x1042ed74), X(0x105854c3), X(0x106dc879), X(0x10834892), + X(0x1098d508), X(0x10ae6dd8), X(0x10c412fc), X(0x10d9c46f), + X(0x10ef822d), X(0x11054c30), X(0x111b2274), X(0x113104f5), + X(0x1146f3ac), X(0x115cee95), X(0x1172f5ab), X(0x118908e9), + X(0x119f284a), X(0x11b553ca), X(0x11cb8b62), X(0x11e1cf0f), + X(0x11f81ecb), X(0x120e7a90), X(0x1224e25a), X(0x123b5624), + X(0x1251d5e9), X(0x126861a3), X(0x127ef94e), X(0x12959ce3), + X(0x12ac4c5f), X(0x12c307bb), X(0x12d9cef2), X(0x12f0a200), + X(0x130780df), X(0x131e6b8a), X(0x133561fa), X(0x134c642c), + X(0x1363721a), X(0x137a8bbe), X(0x1391b113), X(0x13a8e214), + X(0x13c01eba), X(0x13d76702), X(0x13eebae5), X(0x14061a5e), + X(0x141d8567), X(0x1434fbfb), X(0x144c7e14), X(0x14640bae), + X(0x147ba4c1), X(0x14934949), X(0x14aaf941), X(0x14c2b4a2), + X(0x14da7b67), X(0x14f24d8a), X(0x150a2b06), X(0x152213d5), + X(0x153a07f1), X(0x15520755), X(0x156a11fb), X(0x158227dd), + X(0x159a48f5), X(0x15b2753d), X(0x15caacb1), X(0x15e2ef49), + X(0x15fb3d01), X(0x161395d2), X(0x162bf9b6), X(0x164468a8), + X(0x165ce2a1), X(0x1675679c), X(0x168df793), X(0x16a69280), + X(0x16bf385c), X(0x16d7e922), X(0x16f0a4cc), X(0x17096b54), + X(0x17223cb4), X(0x173b18e5), X(0x1753ffe2), X(0x176cf1a5), + X(0x1785ee27), X(0x179ef562), X(0x17b80750), X(0x17d123eb), + X(0x17ea4b2d), X(0x18037d10), X(0x181cb98d), X(0x1836009e), + X(0x184f523c), X(0x1868ae63), X(0x1882150a), X(0x189b862c), + X(0x18b501c4), X(0x18ce87c9), X(0x18e81836), X(0x1901b305), + X(0x191b582f), X(0x193507ad), X(0x194ec17a), X(0x1968858f), + X(0x198253e5), X(0x199c2c75), X(0x19b60f3a), X(0x19cffc2d), + X(0x19e9f347), X(0x1a03f482), X(0x1a1dffd7), X(0x1a381540), + X(0x1a5234b5), X(0x1a6c5e31), X(0x1a8691ac), X(0x1aa0cf21), + X(0x1abb1687), X(0x1ad567da), X(0x1aefc311), X(0x1b0a2826), + X(0x1b249712), X(0x1b3f0fd0), X(0x1b599257), X(0x1b741ea1), + X(0x1b8eb4a7), X(0x1ba95462), X(0x1bc3fdcd), X(0x1bdeb0de), + X(0x1bf96d91), X(0x1c1433dd), X(0x1c2f03bc), X(0x1c49dd27), + X(0x1c64c017), X(0x1c7fac85), X(0x1c9aa269), X(0x1cb5a1be), + X(0x1cd0aa7c), X(0x1cebbc9c), X(0x1d06d816), X(0x1d21fce4), + X(0x1d3d2aff), X(0x1d586260), X(0x1d73a2fe), X(0x1d8eecd4), + X(0x1daa3fda), X(0x1dc59c09), X(0x1de1015a), X(0x1dfc6fc5), + X(0x1e17e743), X(0x1e3367cd), X(0x1e4ef15b), X(0x1e6a83e7), + X(0x1e861f6a), X(0x1ea1c3da), X(0x1ebd7133), X(0x1ed9276b), + X(0x1ef4e67c), X(0x1f10ae5e), X(0x1f2c7f0a), X(0x1f485879), + X(0x1f643aa2), X(0x1f80257f), X(0x1f9c1908), X(0x1fb81536), + X(0x1fd41a00), X(0x1ff02761), X(0x200c3d4f), X(0x20285bc3), + X(0x204482b7), X(0x2060b221), X(0x207ce9fb), X(0x20992a3e), + X(0x20b572e0), X(0x20d1c3dc), X(0x20ee1d28), X(0x210a7ebe), + X(0x2126e895), X(0x21435aa6), X(0x215fd4ea), X(0x217c5757), + X(0x2198e1e8), X(0x21b57493), X(0x21d20f51), X(0x21eeb21b), + X(0x220b5ce7), X(0x22280fb0), X(0x2244ca6c), X(0x22618d13), + X(0x227e579f), X(0x229b2a06), X(0x22b80442), X(0x22d4e649), + X(0x22f1d015), X(0x230ec19d), X(0x232bbad9), X(0x2348bbc1), + X(0x2365c44c), X(0x2382d474), X(0x239fec30), X(0x23bd0b78), + X(0x23da3244), X(0x23f7608b), X(0x24149646), X(0x2431d36c), + X(0x244f17f5), X(0x246c63da), X(0x2489b711), X(0x24a71193), + X(0x24c47358), X(0x24e1dc57), X(0x24ff4c88), X(0x251cc3e2), + X(0x253a425e), X(0x2557c7f4), X(0x2575549a), X(0x2592e848), + X(0x25b082f7), X(0x25ce249e), X(0x25ebcd34), X(0x26097cb2), + X(0x2627330e), X(0x2644f040), X(0x2662b441), X(0x26807f07), + X(0x269e5089), X(0x26bc28c1), X(0x26da07a4), X(0x26f7ed2b), + X(0x2715d94d), X(0x2733cc02), X(0x2751c540), X(0x276fc500), + X(0x278dcb39), X(0x27abd7e2), X(0x27c9eaf3), X(0x27e80463), + X(0x28062429), X(0x28244a3e), X(0x28427697), X(0x2860a92d), + X(0x287ee1f7), X(0x289d20eb), X(0x28bb6603), X(0x28d9b134), + X(0x28f80275), X(0x291659c0), X(0x2934b709), X(0x29531a49), + X(0x29718378), X(0x298ff28b), X(0x29ae677b), X(0x29cce23e), + X(0x29eb62cb), X(0x2a09e91b), X(0x2a287523), X(0x2a4706dc), + X(0x2a659e3c), X(0x2a843b39), X(0x2aa2ddcd), X(0x2ac185ec), + X(0x2ae0338f), X(0x2afee6ad), X(0x2b1d9f3c), X(0x2b3c5d33), + X(0x2b5b208b), X(0x2b79e939), X(0x2b98b734), X(0x2bb78a74), + X(0x2bd662ef), X(0x2bf5409d), X(0x2c142374), X(0x2c330b6b), + X(0x2c51f87a), X(0x2c70ea97), X(0x2c8fe1b9), X(0x2caeddd6), + X(0x2ccddee7), X(0x2cece4e1), X(0x2d0befbb), X(0x2d2aff6d), + X(0x2d4a13ec), X(0x2d692d31), X(0x2d884b32), X(0x2da76de4), + X(0x2dc69540), X(0x2de5c13d), X(0x2e04f1d0), X(0x2e2426f0), + X(0x2e436095), X(0x2e629eb4), X(0x2e81e146), X(0x2ea1283f), + X(0x2ec07398), X(0x2edfc347), X(0x2eff1742), X(0x2f1e6f80), + X(0x2f3dcbf8), X(0x2f5d2ca0), X(0x2f7c916f), X(0x2f9bfa5c), + X(0x2fbb675d), X(0x2fdad869), X(0x2ffa4d76), X(0x3019c67b), + X(0x3039436f), X(0x3058c448), X(0x307848fc), X(0x3097d183), + X(0x30b75dd3), X(0x30d6ede2), X(0x30f681a6), X(0x31161917), + X(0x3135b42b), X(0x315552d8), X(0x3174f514), X(0x31949ad7), + X(0x31b44417), X(0x31d3f0ca), X(0x31f3a0e6), X(0x32135462), + X(0x32330b35), X(0x3252c555), X(0x327282b7), X(0x32924354), + X(0x32b20720), X(0x32d1ce13), X(0x32f19823), X(0x33116546), + X(0x33313573), X(0x3351089f), X(0x3370dec2), X(0x3390b7d1), + X(0x33b093c3), X(0x33d0728f), X(0x33f05429), X(0x3410388a), + X(0x34301fa7), X(0x34500977), X(0x346ff5ef), X(0x348fe506), + X(0x34afd6b3), X(0x34cfcaeb), X(0x34efc1a5), X(0x350fbad7), + X(0x352fb678), X(0x354fb47d), X(0x356fb4dd), X(0x358fb78e), + X(0x35afbc86), X(0x35cfc3bc), X(0x35efcd25), X(0x360fd8b8), + X(0x362fe66c), X(0x364ff636), X(0x3670080c), X(0x36901be5), + X(0x36b031b7), X(0x36d04978), X(0x36f0631e), X(0x37107ea0), + X(0x37309bf3), X(0x3750bb0e), X(0x3770dbe6), X(0x3790fe73), + X(0x37b122aa), X(0x37d14881), X(0x37f16fee), X(0x381198e8), + X(0x3831c365), X(0x3851ef5a), X(0x38721cbe), X(0x38924b87), + X(0x38b27bac), X(0x38d2ad21), X(0x38f2dfde), X(0x391313d8), + X(0x39334906), X(0x39537f5d), X(0x3973b6d4), X(0x3993ef60), + X(0x39b428f9), X(0x39d46393), X(0x39f49f25), X(0x3a14dba6), + X(0x3a35190a), X(0x3a555748), X(0x3a759657), X(0x3a95d62c), + X(0x3ab616be), X(0x3ad65801), X(0x3af699ed), X(0x3b16dc78), + X(0x3b371f97), X(0x3b576341), X(0x3b77a76c), X(0x3b97ec0d), + X(0x3bb8311b), X(0x3bd8768b), X(0x3bf8bc55), X(0x3c19026d), + X(0x3c3948ca), X(0x3c598f62), X(0x3c79d62b), X(0x3c9a1d1b), + X(0x3cba6428), X(0x3cdaab48), X(0x3cfaf271), X(0x3d1b3999), + X(0x3d3b80b6), X(0x3d5bc7be), X(0x3d7c0ea8), X(0x3d9c5569), + X(0x3dbc9bf7), X(0x3ddce248), X(0x3dfd2852), X(0x3e1d6e0c), + X(0x3e3db36c), X(0x3e5df866), X(0x3e7e3cf2), X(0x3e9e8106), + X(0x3ebec497), X(0x3edf079b), X(0x3eff4a09), X(0x3f1f8bd7), + X(0x3f3fccfa), X(0x3f600d69), X(0x3f804d1a), X(0x3fa08c02), + X(0x3fc0ca19), X(0x3fe10753), X(0x400143a7), X(0x40217f0a), + X(0x4041b974), X(0x4061f2da), X(0x40822b32), X(0x40a26272), + X(0x40c29891), X(0x40e2cd83), X(0x41030140), X(0x412333bd), + X(0x414364f1), X(0x416394d2), X(0x4183c355), X(0x41a3f070), + X(0x41c41c1b), X(0x41e4464a), X(0x42046ef4), X(0x42249610), + X(0x4244bb92), X(0x4264df72), X(0x428501a5), X(0x42a52222), + X(0x42c540de), X(0x42e55dd0), X(0x430578ed), X(0x4325922d), + X(0x4345a985), X(0x4365beeb), X(0x4385d255), X(0x43a5e3ba), + X(0x43c5f30f), X(0x43e6004b), X(0x44060b65), X(0x44261451), + X(0x44461b07), X(0x44661f7c), X(0x448621a7), X(0x44a6217d), + X(0x44c61ef6), X(0x44e61a07), X(0x450612a6), X(0x452608ca), + X(0x4545fc69), X(0x4565ed79), X(0x4585dbf1), X(0x45a5c7c6), + X(0x45c5b0ef), X(0x45e59761), X(0x46057b15), X(0x46255bfe), + X(0x46453a15), X(0x4665154f), X(0x4684eda2), X(0x46a4c305), + X(0x46c4956e), X(0x46e464d3), X(0x4704312b), X(0x4723fa6c), + X(0x4743c08d), X(0x47638382), X(0x47834344), X(0x47a2ffc9), + X(0x47c2b906), X(0x47e26ef2), X(0x48022183), X(0x4821d0b1), + X(0x48417c71), X(0x486124b9), X(0x4880c981), X(0x48a06abe), + X(0x48c00867), X(0x48dfa272), X(0x48ff38d6), X(0x491ecb8a), + X(0x493e5a84), X(0x495de5b9), X(0x497d6d22), X(0x499cf0b4), + X(0x49bc7066), X(0x49dbec2e), X(0x49fb6402), X(0x4a1ad7db), + X(0x4a3a47ad), X(0x4a59b370), X(0x4a791b1a), X(0x4a987ea1), + X(0x4ab7ddfd), X(0x4ad73924), X(0x4af6900c), X(0x4b15e2ad), + X(0x4b3530fc), X(0x4b547af1), X(0x4b73c082), X(0x4b9301a6), + X(0x4bb23e53), X(0x4bd17681), X(0x4bf0aa25), X(0x4c0fd937), + X(0x4c2f03ae), X(0x4c4e297f), X(0x4c6d4aa3), X(0x4c8c670f), + X(0x4cab7eba), X(0x4cca919c), X(0x4ce99fab), X(0x4d08a8de), + X(0x4d27ad2c), X(0x4d46ac8b), X(0x4d65a6f3), X(0x4d849c5a), + X(0x4da38cb7), X(0x4dc27802), X(0x4de15e31), X(0x4e003f3a), + X(0x4e1f1b16), X(0x4e3df1ba), X(0x4e5cc31e), X(0x4e7b8f3a), + X(0x4e9a5603), X(0x4eb91771), X(0x4ed7d37b), X(0x4ef68a18), + X(0x4f153b3f), X(0x4f33e6e7), X(0x4f528d08), X(0x4f712d97), + X(0x4f8fc88e), X(0x4fae5de1), X(0x4fcced8a), X(0x4feb777f), + X(0x5009fbb6), X(0x50287a28), X(0x5046f2cc), X(0x50656598), + X(0x5083d284), X(0x50a23988), X(0x50c09a9a), X(0x50def5b1), + X(0x50fd4ac7), X(0x511b99d0), X(0x5139e2c5), X(0x5158259e), + X(0x51766251), X(0x519498d6), X(0x51b2c925), X(0x51d0f334), + X(0x51ef16fb), X(0x520d3473), X(0x522b4b91), X(0x52495c4e), + X(0x526766a2), X(0x52856a83), X(0x52a367e9), X(0x52c15ecd), + X(0x52df4f24), X(0x52fd38e8), X(0x531b1c10), X(0x5338f892), + X(0x5356ce68), X(0x53749d89), X(0x539265eb), X(0x53b02788), + X(0x53cde257), X(0x53eb964f), X(0x54094369), X(0x5426e99c), + X(0x544488df), X(0x5462212c), X(0x547fb279), X(0x549d3cbe), + X(0x54babff4), X(0x54d83c12), X(0x54f5b110), X(0x55131ee7), + X(0x5530858d), X(0x554de4fc), X(0x556b3d2a), X(0x55888e11), + X(0x55a5d7a8), X(0x55c319e7), X(0x55e054c7), X(0x55fd883f), + X(0x561ab447), X(0x5637d8d8), X(0x5654f5ea), X(0x56720b75), + X(0x568f1971), X(0x56ac1fd7), X(0x56c91e9e), X(0x56e615c0), + X(0x57030534), X(0x571fecf2), X(0x573cccf3), X(0x5759a530), + X(0x577675a0), X(0x57933e3c), X(0x57affefd), X(0x57ccb7db), + X(0x57e968ce), X(0x580611cf), X(0x5822b2d6), X(0x583f4bdd), + X(0x585bdcdb), X(0x587865c9), X(0x5894e69f), X(0x58b15f57), + X(0x58cdcfe9), X(0x58ea384e), X(0x5906987d), X(0x5922f071), + X(0x593f4022), X(0x595b8788), X(0x5977c69c), X(0x5993fd57), + X(0x59b02bb2), X(0x59cc51a6), X(0x59e86f2c), X(0x5a04843c), + X(0x5a2090d0), X(0x5a3c94e0), X(0x5a589065), X(0x5a748359), + X(0x5a906db4), X(0x5aac4f70), X(0x5ac82884), X(0x5ae3f8ec), + X(0x5affc09f), X(0x5b1b7f97), X(0x5b3735cd), X(0x5b52e33a), + X(0x5b6e87d8), X(0x5b8a239f), X(0x5ba5b689), X(0x5bc1408f), + X(0x5bdcc1aa), X(0x5bf839d5), X(0x5c13a907), X(0x5c2f0f3b), + X(0x5c4a6c6a), X(0x5c65c08d), X(0x5c810b9e), X(0x5c9c4d97), + X(0x5cb78670), X(0x5cd2b623), X(0x5ceddcaa), X(0x5d08f9ff), + X(0x5d240e1b), X(0x5d3f18f8), X(0x5d5a1a8f), X(0x5d7512da), + X(0x5d9001d3), X(0x5daae773), X(0x5dc5c3b5), X(0x5de09692), + X(0x5dfb6004), X(0x5e162004), X(0x5e30d68d), X(0x5e4b8399), + X(0x5e662721), X(0x5e80c11f), X(0x5e9b518e), X(0x5eb5d867), + X(0x5ed055a4), X(0x5eeac940), X(0x5f053334), X(0x5f1f937b), + X(0x5f39ea0f), X(0x5f5436ea), X(0x5f6e7a06), X(0x5f88b35d), + X(0x5fa2e2e9), X(0x5fbd08a6), X(0x5fd7248d), X(0x5ff13698), + X(0x600b3ec2), X(0x60253d05), X(0x603f315b), X(0x60591bc0), + X(0x6072fc2d), X(0x608cd29e), X(0x60a69f0b), X(0x60c06171), + X(0x60da19ca), X(0x60f3c80f), X(0x610d6c3d), X(0x6127064d), + X(0x6140963a), X(0x615a1bff), X(0x61739797), X(0x618d08fc), + X(0x61a67029), X(0x61bfcd1a), X(0x61d91fc8), X(0x61f2682f), + X(0x620ba64a), X(0x6224da13), X(0x623e0386), X(0x6257229d), + X(0x62703754), X(0x628941a6), X(0x62a2418e), X(0x62bb3706), + X(0x62d4220a), X(0x62ed0296), X(0x6305d8a3), X(0x631ea42f), + X(0x63376533), X(0x63501bab), X(0x6368c793), X(0x638168e5), + X(0x6399ff9e), X(0x63b28bb8), X(0x63cb0d2f), X(0x63e383ff), + X(0x63fbf022), X(0x64145195), X(0x642ca853), X(0x6444f457), + X(0x645d359e), X(0x64756c22), X(0x648d97e0), X(0x64a5b8d3), + X(0x64bdcef6), X(0x64d5da47), X(0x64eddabf), X(0x6505d05c), + X(0x651dbb19), X(0x65359af2), X(0x654d6fe3), X(0x656539e7), + X(0x657cf8fb), X(0x6594ad1b), X(0x65ac5643), X(0x65c3f46e), + X(0x65db8799), X(0x65f30fc0), X(0x660a8ce0), X(0x6621fef3), + X(0x663965f7), X(0x6650c1e7), X(0x666812c1), X(0x667f5880), + X(0x66969320), X(0x66adc29e), X(0x66c4e6f7), X(0x66dc0026), + X(0x66f30e28), X(0x670a10fa), X(0x67210898), X(0x6737f4ff), + X(0x674ed62b), X(0x6765ac19), X(0x677c76c5), X(0x6793362c), + X(0x67a9ea4b), X(0x67c0931f), X(0x67d730a3), X(0x67edc2d6), + X(0x680449b3), X(0x681ac538), X(0x68313562), X(0x68479a2d), + X(0x685df396), X(0x6874419b), X(0x688a8438), X(0x68a0bb6a), + X(0x68b6e72e), X(0x68cd0782), X(0x68e31c63), X(0x68f925cd), + X(0x690f23be), X(0x69251633), X(0x693afd29), X(0x6950d89e), + X(0x6966a88f), X(0x697c6cf8), X(0x699225d9), X(0x69a7d32d), + X(0x69bd74f3), X(0x69d30b27), X(0x69e895c8), X(0x69fe14d2), + X(0x6a138844), X(0x6a28f01b), X(0x6a3e4c54), X(0x6a539ced), + X(0x6a68e1e4), X(0x6a7e1b37), X(0x6a9348e3), X(0x6aa86ae6), + X(0x6abd813d), X(0x6ad28be7), X(0x6ae78ae2), X(0x6afc7e2b), + X(0x6b1165c0), X(0x6b26419f), X(0x6b3b11c7), X(0x6b4fd634), + X(0x6b648ee6), X(0x6b793bda), X(0x6b8ddd0e), X(0x6ba27281), + X(0x6bb6fc31), X(0x6bcb7a1b), X(0x6bdfec3e), X(0x6bf45299), + X(0x6c08ad29), X(0x6c1cfbed), X(0x6c313ee4), X(0x6c45760a), + X(0x6c59a160), X(0x6c6dc0e4), X(0x6c81d493), X(0x6c95dc6d), + X(0x6ca9d86f), X(0x6cbdc899), X(0x6cd1acea), X(0x6ce5855f), + X(0x6cf951f7), X(0x6d0d12b1), X(0x6d20c78c), X(0x6d347087), + X(0x6d480da0), X(0x6d5b9ed6), X(0x6d6f2427), X(0x6d829d94), + X(0x6d960b1a), X(0x6da96cb9), X(0x6dbcc270), X(0x6dd00c3c), + X(0x6de34a1f), X(0x6df67c16), X(0x6e09a221), X(0x6e1cbc3f), + X(0x6e2fca6e), X(0x6e42ccaf), X(0x6e55c300), X(0x6e68ad60), + X(0x6e7b8bd0), X(0x6e8e5e4d), X(0x6ea124d8), X(0x6eb3df70), + X(0x6ec68e13), X(0x6ed930c3), X(0x6eebc77d), X(0x6efe5242), + X(0x6f10d111), X(0x6f2343e9), X(0x6f35aacb), X(0x6f4805b5), + X(0x6f5a54a8), X(0x6f6c97a2), X(0x6f7ecea4), X(0x6f90f9ae), + X(0x6fa318be), X(0x6fb52bd6), X(0x6fc732f4), X(0x6fd92e19), + X(0x6feb1d44), X(0x6ffd0076), X(0x700ed7ad), X(0x7020a2eb), + X(0x7032622f), X(0x7044157a), X(0x7055bcca), X(0x70675821), + X(0x7078e77e), X(0x708a6ae2), X(0x709be24c), X(0x70ad4dbd), + X(0x70bead36), X(0x70d000b5), X(0x70e1483d), X(0x70f283cc), + X(0x7103b363), X(0x7114d704), X(0x7125eead), X(0x7136fa60), + X(0x7147fa1c), X(0x7158ede4), X(0x7169d5b6), X(0x717ab193), + X(0x718b817d), X(0x719c4573), X(0x71acfd76), X(0x71bda988), + X(0x71ce49a8), X(0x71deddd7), X(0x71ef6617), X(0x71ffe267), + X(0x721052ca), X(0x7220b73e), X(0x72310fc6), X(0x72415c62), + X(0x72519d14), X(0x7261d1db), X(0x7271faba), X(0x728217b1), + X(0x729228c0), X(0x72a22dea), X(0x72b22730), X(0x72c21491), + X(0x72d1f611), X(0x72e1cbaf), X(0x72f1956c), X(0x7301534c), + X(0x7311054d), X(0x7320ab72), X(0x733045bc), X(0x733fd42d), + X(0x734f56c5), X(0x735ecd86), X(0x736e3872), X(0x737d9789), + X(0x738ceacf), X(0x739c3243), X(0x73ab6de7), X(0x73ba9dbe), + X(0x73c9c1c8), X(0x73d8da08), X(0x73e7e67f), X(0x73f6e72e), + X(0x7405dc17), X(0x7414c53c), X(0x7423a29f), X(0x74327442), + X(0x74413a26), X(0x744ff44d), X(0x745ea2b9), X(0x746d456c), + X(0x747bdc68), X(0x748a67ae), X(0x7498e741), X(0x74a75b23), + X(0x74b5c356), X(0x74c41fdb), X(0x74d270b6), X(0x74e0b5e7), + X(0x74eeef71), X(0x74fd1d57), X(0x750b3f9a), X(0x7519563c), + X(0x75276140), X(0x753560a8), X(0x75435477), X(0x75513cae), + X(0x755f1951), X(0x756cea60), X(0x757aafdf), X(0x758869d1), + X(0x75961837), X(0x75a3bb14), X(0x75b1526a), X(0x75bede3c), + X(0x75cc5e8d), X(0x75d9d35f), X(0x75e73cb5), X(0x75f49a91), + X(0x7601ecf6), X(0x760f33e6), X(0x761c6f65), X(0x76299f74), + X(0x7636c417), X(0x7643dd51), X(0x7650eb24), X(0x765ded93), + X(0x766ae4a0), X(0x7677d050), X(0x7684b0a4), X(0x7691859f), + X(0x769e4f45), X(0x76ab0d98), X(0x76b7c09c), X(0x76c46852), + X(0x76d104bf), X(0x76dd95e6), X(0x76ea1bc9), X(0x76f6966b), + X(0x770305d0), X(0x770f69fb), X(0x771bc2ef), X(0x772810af), + X(0x7734533e), X(0x77408aa0), X(0x774cb6d7), X(0x7758d7e8), + X(0x7764edd5), X(0x7770f8a2), X(0x777cf852), X(0x7788ece8), + X(0x7794d668), X(0x77a0b4d5), X(0x77ac8833), X(0x77b85085), + X(0x77c40dce), X(0x77cfc013), X(0x77db6756), X(0x77e7039b), + X(0x77f294e6), X(0x77fe1b3b), X(0x7809969c), X(0x7815070e), + X(0x78206c93), X(0x782bc731), X(0x783716ea), X(0x78425bc3), + X(0x784d95be), X(0x7858c4e1), X(0x7863e92d), X(0x786f02a8), + X(0x787a1156), X(0x78851539), X(0x78900e56), X(0x789afcb1), + X(0x78a5e04d), X(0x78b0b92f), X(0x78bb875b), X(0x78c64ad4), + X(0x78d1039e), X(0x78dbb1be), X(0x78e65537), X(0x78f0ee0e), + X(0x78fb7c46), X(0x7905ffe4), X(0x791078ec), X(0x791ae762), + X(0x79254b4a), X(0x792fa4a7), X(0x7939f380), X(0x794437d7), + X(0x794e71b0), X(0x7958a111), X(0x7962c5fd), X(0x796ce078), + X(0x7976f087), X(0x7980f62f), X(0x798af173), X(0x7994e258), + X(0x799ec8e2), X(0x79a8a515), X(0x79b276f7), X(0x79bc3e8b), + X(0x79c5fbd6), X(0x79cfaedc), X(0x79d957a2), X(0x79e2f62c), + X(0x79ec8a7f), X(0x79f6149f), X(0x79ff9492), X(0x7a090a5a), + X(0x7a1275fe), X(0x7a1bd781), X(0x7a252ee9), X(0x7a2e7c39), + X(0x7a37bf77), X(0x7a40f8a7), X(0x7a4a27ce), X(0x7a534cf0), + X(0x7a5c6813), X(0x7a65793b), X(0x7a6e806d), X(0x7a777dad), + X(0x7a807100), X(0x7a895a6b), X(0x7a9239f4), X(0x7a9b0f9e), + X(0x7aa3db6f), X(0x7aac9d6b), X(0x7ab55597), X(0x7abe03f9), + X(0x7ac6a895), X(0x7acf4370), X(0x7ad7d48f), X(0x7ae05bf6), + X(0x7ae8d9ac), X(0x7af14db5), X(0x7af9b815), X(0x7b0218d2), + X(0x7b0a6ff2), X(0x7b12bd78), X(0x7b1b016a), X(0x7b233bce), + X(0x7b2b6ca7), X(0x7b3393fc), X(0x7b3bb1d1), X(0x7b43c62c), + X(0x7b4bd111), X(0x7b53d286), X(0x7b5bca90), X(0x7b63b935), + X(0x7b6b9e78), X(0x7b737a61), X(0x7b7b4cf3), X(0x7b831634), + X(0x7b8ad629), X(0x7b928cd8), X(0x7b9a3a45), X(0x7ba1de77), + X(0x7ba97972), X(0x7bb10b3c), X(0x7bb893d9), X(0x7bc01350), + X(0x7bc789a6), X(0x7bcef6e0), X(0x7bd65b03), X(0x7bddb616), + X(0x7be5081c), X(0x7bec511c), X(0x7bf3911b), X(0x7bfac81f), + X(0x7c01f62c), X(0x7c091b49), X(0x7c10377b), X(0x7c174ac7), + X(0x7c1e5532), X(0x7c2556c4), X(0x7c2c4f80), X(0x7c333f6c), + X(0x7c3a268e), X(0x7c4104ec), X(0x7c47da8a), X(0x7c4ea76f), + X(0x7c556ba1), X(0x7c5c2724), X(0x7c62d9fe), X(0x7c698435), + X(0x7c7025cf), X(0x7c76bed0), X(0x7c7d4f40), X(0x7c83d723), + X(0x7c8a567f), X(0x7c90cd5a), X(0x7c973bb9), X(0x7c9da1a2), + X(0x7ca3ff1b), X(0x7caa542a), X(0x7cb0a0d3), X(0x7cb6e51e), + X(0x7cbd210f), X(0x7cc354ac), X(0x7cc97ffc), X(0x7ccfa304), + X(0x7cd5bdc9), X(0x7cdbd051), X(0x7ce1daa3), X(0x7ce7dcc3), + X(0x7cedd6b8), X(0x7cf3c888), X(0x7cf9b238), X(0x7cff93cf), + X(0x7d056d51), X(0x7d0b3ec5), X(0x7d110830), X(0x7d16c99a), + X(0x7d1c8306), X(0x7d22347c), X(0x7d27de00), X(0x7d2d7f9a), + X(0x7d33194f), X(0x7d38ab24), X(0x7d3e351f), X(0x7d43b748), + X(0x7d4931a2), X(0x7d4ea435), X(0x7d540f06), X(0x7d59721b), + X(0x7d5ecd7b), X(0x7d64212a), X(0x7d696d2f), X(0x7d6eb190), + X(0x7d73ee53), X(0x7d79237e), X(0x7d7e5117), X(0x7d837723), + X(0x7d8895a9), X(0x7d8dacae), X(0x7d92bc3a), X(0x7d97c451), + X(0x7d9cc4f9), X(0x7da1be39), X(0x7da6b017), X(0x7dab9a99), + X(0x7db07dc4), X(0x7db5599e), X(0x7dba2e2f), X(0x7dbefb7b), + X(0x7dc3c189), X(0x7dc8805e), X(0x7dcd3802), X(0x7dd1e879), + X(0x7dd691ca), X(0x7ddb33fb), X(0x7ddfcf12), X(0x7de46315), + X(0x7de8f00a), X(0x7ded75f8), X(0x7df1f4e3), X(0x7df66cd3), + X(0x7dfaddcd), X(0x7dff47d7), X(0x7e03aaf8), X(0x7e080735), + X(0x7e0c5c95), X(0x7e10ab1e), X(0x7e14f2d5), X(0x7e1933c1), + X(0x7e1d6de8), X(0x7e21a150), X(0x7e25cdff), X(0x7e29f3fc), + X(0x7e2e134c), X(0x7e322bf5), X(0x7e363dfd), X(0x7e3a496b), + X(0x7e3e4e45), X(0x7e424c90), X(0x7e464454), X(0x7e4a3595), + X(0x7e4e205a), X(0x7e5204aa), X(0x7e55e289), X(0x7e59b9ff), + X(0x7e5d8b12), X(0x7e6155c7), X(0x7e651a24), X(0x7e68d831), + X(0x7e6c8ff2), X(0x7e70416e), X(0x7e73ecac), X(0x7e7791b0), + X(0x7e7b3082), X(0x7e7ec927), X(0x7e825ba6), X(0x7e85e804), + X(0x7e896e48), X(0x7e8cee77), X(0x7e906899), X(0x7e93dcb2), + X(0x7e974aca), X(0x7e9ab2e5), X(0x7e9e150b), X(0x7ea17141), + X(0x7ea4c78e), X(0x7ea817f7), X(0x7eab6283), X(0x7eaea737), + X(0x7eb1e61a), X(0x7eb51f33), X(0x7eb85285), X(0x7ebb8019), + X(0x7ebea7f4), X(0x7ec1ca1d), X(0x7ec4e698), X(0x7ec7fd6d), + X(0x7ecb0ea1), X(0x7ece1a3a), X(0x7ed1203f), X(0x7ed420b6), + X(0x7ed71ba4), X(0x7eda110f), X(0x7edd00ff), X(0x7edfeb78), + X(0x7ee2d081), X(0x7ee5b01f), X(0x7ee88a5a), X(0x7eeb5f36), + X(0x7eee2eba), X(0x7ef0f8ed), X(0x7ef3bdd3), X(0x7ef67d73), + X(0x7ef937d3), X(0x7efbecf9), X(0x7efe9ceb), X(0x7f0147ae), + X(0x7f03ed4a), X(0x7f068dc4), X(0x7f092922), X(0x7f0bbf69), + X(0x7f0e50a1), X(0x7f10dcce), X(0x7f1363f7), X(0x7f15e622), + X(0x7f186355), X(0x7f1adb95), X(0x7f1d4ee9), X(0x7f1fbd57), + X(0x7f2226e4), X(0x7f248b96), X(0x7f26eb74), X(0x7f294683), + X(0x7f2b9cc9), X(0x7f2dee4d), X(0x7f303b13), X(0x7f328322), + X(0x7f34c680), X(0x7f370533), X(0x7f393f40), X(0x7f3b74ad), + X(0x7f3da581), X(0x7f3fd1c1), X(0x7f41f972), X(0x7f441c9c), + X(0x7f463b43), X(0x7f48556d), X(0x7f4a6b21), X(0x7f4c7c64), + X(0x7f4e893c), X(0x7f5091ae), X(0x7f5295c1), X(0x7f54957a), + X(0x7f5690e0), X(0x7f5887f7), X(0x7f5a7ac5), X(0x7f5c6951), + X(0x7f5e53a0), X(0x7f6039b8), X(0x7f621b9e), X(0x7f63f958), + X(0x7f65d2ed), X(0x7f67a861), X(0x7f6979ba), X(0x7f6b46ff), + X(0x7f6d1034), X(0x7f6ed560), X(0x7f709687), X(0x7f7253b1), + X(0x7f740ce1), X(0x7f75c21f), X(0x7f777370), X(0x7f7920d8), + X(0x7f7aca5f), X(0x7f7c7008), X(0x7f7e11db), X(0x7f7fafdd), + X(0x7f814a13), X(0x7f82e082), X(0x7f847331), X(0x7f860224), + X(0x7f878d62), X(0x7f8914f0), X(0x7f8a98d4), X(0x7f8c1912), + X(0x7f8d95b0), X(0x7f8f0eb5), X(0x7f908425), X(0x7f91f605), + X(0x7f93645c), X(0x7f94cf2f), X(0x7f963683), X(0x7f979a5d), + X(0x7f98fac4), X(0x7f9a57bb), X(0x7f9bb14a), X(0x7f9d0775), + X(0x7f9e5a41), X(0x7f9fa9b4), X(0x7fa0f5d3), X(0x7fa23ea4), + X(0x7fa3842b), X(0x7fa4c66f), X(0x7fa60575), X(0x7fa74141), + X(0x7fa879d9), X(0x7fa9af42), X(0x7faae182), X(0x7fac109e), + X(0x7fad3c9a), X(0x7fae657d), X(0x7faf8b4c), X(0x7fb0ae0b), + X(0x7fb1cdc0), X(0x7fb2ea70), X(0x7fb40420), X(0x7fb51ad5), + X(0x7fb62e95), X(0x7fb73f64), X(0x7fb84d48), X(0x7fb95846), + X(0x7fba6062), X(0x7fbb65a2), X(0x7fbc680c), X(0x7fbd67a3), + X(0x7fbe646d), X(0x7fbf5e70), X(0x7fc055af), X(0x7fc14a31), + X(0x7fc23bf9), X(0x7fc32b0d), X(0x7fc41773), X(0x7fc5012e), + X(0x7fc5e844), X(0x7fc6ccba), X(0x7fc7ae94), X(0x7fc88dd8), + X(0x7fc96a8a), X(0x7fca44af), X(0x7fcb1c4c), X(0x7fcbf167), + X(0x7fccc403), X(0x7fcd9425), X(0x7fce61d3), X(0x7fcf2d11), + X(0x7fcff5e3), X(0x7fd0bc4f), X(0x7fd1805a), X(0x7fd24207), + X(0x7fd3015c), X(0x7fd3be5d), X(0x7fd47910), X(0x7fd53178), + X(0x7fd5e79b), X(0x7fd69b7c), X(0x7fd74d21), X(0x7fd7fc8e), + X(0x7fd8a9c8), X(0x7fd954d4), X(0x7fd9fdb5), X(0x7fdaa471), + X(0x7fdb490b), X(0x7fdbeb89), X(0x7fdc8bef), X(0x7fdd2a42), + X(0x7fddc685), X(0x7fde60be), X(0x7fdef8f0), X(0x7fdf8f20), + X(0x7fe02353), X(0x7fe0b58d), X(0x7fe145d3), X(0x7fe1d428), + X(0x7fe26091), X(0x7fe2eb12), X(0x7fe373b0), X(0x7fe3fa6f), + X(0x7fe47f53), X(0x7fe50260), X(0x7fe5839b), X(0x7fe60308), + X(0x7fe680ab), X(0x7fe6fc88), X(0x7fe776a4), X(0x7fe7ef02), + X(0x7fe865a7), X(0x7fe8da97), X(0x7fe94dd6), X(0x7fe9bf68), + X(0x7fea2f51), X(0x7fea9d95), X(0x7feb0a39), X(0x7feb7540), + X(0x7febdeae), X(0x7fec4687), X(0x7fecaccf), X(0x7fed118b), + X(0x7fed74be), X(0x7fedd66c), X(0x7fee3698), X(0x7fee9548), + X(0x7feef27e), X(0x7fef4e3f), X(0x7fefa88e), X(0x7ff0016f), + X(0x7ff058e7), X(0x7ff0aef8), X(0x7ff103a6), X(0x7ff156f6), + X(0x7ff1a8eb), X(0x7ff1f988), X(0x7ff248d2), X(0x7ff296cc), + X(0x7ff2e37a), X(0x7ff32edf), X(0x7ff378ff), X(0x7ff3c1de), + X(0x7ff4097e), X(0x7ff44fe5), X(0x7ff49515), X(0x7ff4d911), + X(0x7ff51bde), X(0x7ff55d7f), X(0x7ff59df7), X(0x7ff5dd4a), + X(0x7ff61b7b), X(0x7ff6588d), X(0x7ff69485), X(0x7ff6cf65), + X(0x7ff70930), X(0x7ff741eb), X(0x7ff77998), X(0x7ff7b03b), + X(0x7ff7e5d7), X(0x7ff81a6f), X(0x7ff84e06), X(0x7ff880a1), + X(0x7ff8b241), X(0x7ff8e2ea), X(0x7ff912a0), X(0x7ff94165), + X(0x7ff96f3d), X(0x7ff99c2b), X(0x7ff9c831), X(0x7ff9f354), + X(0x7ffa1d95), X(0x7ffa46f9), X(0x7ffa6f81), X(0x7ffa9731), + X(0x7ffabe0d), X(0x7ffae416), X(0x7ffb0951), X(0x7ffb2dbf), + X(0x7ffb5164), X(0x7ffb7442), X(0x7ffb965d), X(0x7ffbb7b8), + X(0x7ffbd854), X(0x7ffbf836), X(0x7ffc175f), X(0x7ffc35d3), + X(0x7ffc5394), X(0x7ffc70a5), X(0x7ffc8d09), X(0x7ffca8c2), + X(0x7ffcc3d4), X(0x7ffcde3f), X(0x7ffcf809), X(0x7ffd1132), + X(0x7ffd29be), X(0x7ffd41ae), X(0x7ffd5907), X(0x7ffd6fc9), + X(0x7ffd85f9), X(0x7ffd9b97), X(0x7ffdb0a7), X(0x7ffdc52b), + X(0x7ffdd926), X(0x7ffdec99), X(0x7ffdff88), X(0x7ffe11f4), + X(0x7ffe23e0), X(0x7ffe354f), X(0x7ffe4642), X(0x7ffe56bc), + X(0x7ffe66bf), X(0x7ffe764e), X(0x7ffe856a), X(0x7ffe9416), + X(0x7ffea254), X(0x7ffeb026), X(0x7ffebd8e), X(0x7ffeca8f), + X(0x7ffed72a), X(0x7ffee362), X(0x7ffeef38), X(0x7ffefaaf), + X(0x7fff05c9), X(0x7fff1087), X(0x7fff1aec), X(0x7fff24f9), + X(0x7fff2eb1), X(0x7fff3816), X(0x7fff4128), X(0x7fff49eb), + X(0x7fff5260), X(0x7fff5a88), X(0x7fff6266), X(0x7fff69fc), + X(0x7fff714b), X(0x7fff7854), X(0x7fff7f1a), X(0x7fff859f), + X(0x7fff8be3), X(0x7fff91ea), X(0x7fff97b3), X(0x7fff9d41), + X(0x7fffa296), X(0x7fffa7b3), X(0x7fffac99), X(0x7fffb14b), + X(0x7fffb5c9), X(0x7fffba15), X(0x7fffbe31), X(0x7fffc21d), + X(0x7fffc5dc), X(0x7fffc96f), X(0x7fffccd8), X(0x7fffd016), + X(0x7fffd32d), X(0x7fffd61c), X(0x7fffd8e7), X(0x7fffdb8d), + X(0x7fffde0f), X(0x7fffe071), X(0x7fffe2b1), X(0x7fffe4d2), + X(0x7fffe6d5), X(0x7fffe8bb), X(0x7fffea85), X(0x7fffec34), + X(0x7fffedc9), X(0x7fffef45), X(0x7ffff0aa), X(0x7ffff1f7), + X(0x7ffff330), X(0x7ffff453), X(0x7ffff562), X(0x7ffff65f), + X(0x7ffff749), X(0x7ffff823), X(0x7ffff8ec), X(0x7ffff9a6), + X(0x7ffffa51), X(0x7ffffaee), X(0x7ffffb7e), X(0x7ffffc02), + X(0x7ffffc7a), X(0x7ffffce7), X(0x7ffffd4a), X(0x7ffffda3), + X(0x7ffffdf4), X(0x7ffffe3c), X(0x7ffffe7c), X(0x7ffffeb6), + X(0x7ffffee8), X(0x7fffff15), X(0x7fffff3c), X(0x7fffff5e), + X(0x7fffff7b), X(0x7fffff95), X(0x7fffffaa), X(0x7fffffbc), + X(0x7fffffcb), X(0x7fffffd7), X(0x7fffffe2), X(0x7fffffea), + X(0x7ffffff0), X(0x7ffffff5), X(0x7ffffff9), X(0x7ffffffb), + X(0x7ffffffd), X(0x7ffffffe), X(0x7fffffff), X(0x7fffffff), + X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), +}; + +#ifndef LIMIT_TO_64kHz + +static LOOKUP_T vwin8192[4096] = { + X(0x0000007c), X(0x0000045c), X(0x00000c1d), X(0x000017bd), + X(0x0000273e), X(0x00003a9f), X(0x000051e0), X(0x00006d02), + X(0x00008c03), X(0x0000aee5), X(0x0000d5a7), X(0x00010049), + X(0x00012ecb), X(0x0001612d), X(0x00019770), X(0x0001d193), + X(0x00020f96), X(0x00025178), X(0x0002973c), X(0x0002e0df), + X(0x00032e62), X(0x00037fc5), X(0x0003d509), X(0x00042e2c), + X(0x00048b30), X(0x0004ec13), X(0x000550d7), X(0x0005b97a), + X(0x000625fe), X(0x00069661), X(0x00070aa4), X(0x000782c8), + X(0x0007fecb), X(0x00087eae), X(0x00090271), X(0x00098a14), + X(0x000a1597), X(0x000aa4f9), X(0x000b383b), X(0x000bcf5d), + X(0x000c6a5f), X(0x000d0941), X(0x000dac02), X(0x000e52a3), + X(0x000efd23), X(0x000fab84), X(0x00105dc3), X(0x001113e3), + X(0x0011cde2), X(0x00128bc0), X(0x00134d7e), X(0x0014131b), + X(0x0014dc98), X(0x0015a9f4), X(0x00167b30), X(0x0017504a), + X(0x00182945), X(0x0019061e), X(0x0019e6d7), X(0x001acb6f), + X(0x001bb3e6), X(0x001ca03c), X(0x001d9071), X(0x001e8485), + X(0x001f7c79), X(0x0020784b), X(0x002177fc), X(0x00227b8c), + X(0x002382fb), X(0x00248e49), X(0x00259d76), X(0x0026b081), + X(0x0027c76b), X(0x0028e234), X(0x002a00dc), X(0x002b2361), + X(0x002c49c6), X(0x002d7409), X(0x002ea22a), X(0x002fd42a), + X(0x00310a08), X(0x003243c5), X(0x00338160), X(0x0034c2d9), + X(0x00360830), X(0x00375165), X(0x00389e78), X(0x0039ef6a), + X(0x003b4439), X(0x003c9ce6), X(0x003df971), X(0x003f59da), + X(0x0040be20), X(0x00422645), X(0x00439247), X(0x00450226), + X(0x004675e3), X(0x0047ed7e), X(0x004968f5), X(0x004ae84b), + X(0x004c6b7d), X(0x004df28d), X(0x004f7d7a), X(0x00510c44), + X(0x00529eeb), X(0x00543570), X(0x0055cfd1), X(0x00576e0f), + X(0x00591029), X(0x005ab621), X(0x005c5ff5), X(0x005e0da6), + X(0x005fbf33), X(0x0061749d), X(0x00632de4), X(0x0064eb06), + X(0x0066ac05), X(0x006870e0), X(0x006a3998), X(0x006c062b), + X(0x006dd69b), X(0x006faae6), X(0x0071830d), X(0x00735f10), + X(0x00753eef), X(0x007722a9), X(0x00790a3f), X(0x007af5b1), + X(0x007ce4fe), X(0x007ed826), X(0x0080cf29), X(0x0082ca08), + X(0x0084c8c2), X(0x0086cb57), X(0x0088d1c7), X(0x008adc11), + X(0x008cea37), X(0x008efc37), X(0x00911212), X(0x00932bc7), + X(0x00954957), X(0x00976ac2), X(0x00999006), X(0x009bb925), + X(0x009de61e), X(0x00a016f1), X(0x00a24b9e), X(0x00a48425), + X(0x00a6c086), X(0x00a900c0), X(0x00ab44d4), X(0x00ad8cc2), + X(0x00afd889), X(0x00b22829), X(0x00b47ba2), X(0x00b6d2f5), + X(0x00b92e21), X(0x00bb8d26), X(0x00bdf004), X(0x00c056ba), + X(0x00c2c149), X(0x00c52fb1), X(0x00c7a1f1), X(0x00ca180a), + X(0x00cc91fb), X(0x00cf0fc5), X(0x00d19166), X(0x00d416df), + X(0x00d6a031), X(0x00d92d5a), X(0x00dbbe5b), X(0x00de5333), + X(0x00e0ebe3), X(0x00e3886b), X(0x00e628c9), X(0x00e8ccff), + X(0x00eb750c), X(0x00ee20f0), X(0x00f0d0ab), X(0x00f3843d), + X(0x00f63ba5), X(0x00f8f6e4), X(0x00fbb5fa), X(0x00fe78e5), + X(0x01013fa7), X(0x01040a3f), X(0x0106d8ae), X(0x0109aaf2), + X(0x010c810c), X(0x010f5afb), X(0x011238c0), X(0x01151a5b), + X(0x0117ffcb), X(0x011ae910), X(0x011dd62a), X(0x0120c719), + X(0x0123bbdd), X(0x0126b476), X(0x0129b0e4), X(0x012cb126), + X(0x012fb53c), X(0x0132bd27), X(0x0135c8e6), X(0x0138d879), + X(0x013bebdf), X(0x013f031a), X(0x01421e28), X(0x01453d0a), + X(0x01485fbf), X(0x014b8648), X(0x014eb0a4), X(0x0151ded2), + X(0x015510d4), X(0x015846a8), X(0x015b8050), X(0x015ebdc9), + X(0x0161ff15), X(0x01654434), X(0x01688d24), X(0x016bd9e6), + X(0x016f2a7b), X(0x01727ee1), X(0x0175d718), X(0x01793321), + X(0x017c92fc), X(0x017ff6a7), X(0x01835e24), X(0x0186c972), + X(0x018a3890), X(0x018dab7f), X(0x0191223f), X(0x01949ccf), + X(0x01981b2f), X(0x019b9d5f), X(0x019f235f), X(0x01a2ad2f), + X(0x01a63acf), X(0x01a9cc3e), X(0x01ad617c), X(0x01b0fa8a), + X(0x01b49767), X(0x01b83813), X(0x01bbdc8d), X(0x01bf84d6), + X(0x01c330ee), X(0x01c6e0d4), X(0x01ca9488), X(0x01ce4c0b), + X(0x01d2075b), X(0x01d5c679), X(0x01d98964), X(0x01dd501d), + X(0x01e11aa3), X(0x01e4e8f6), X(0x01e8bb17), X(0x01ec9104), + X(0x01f06abd), X(0x01f44844), X(0x01f82996), X(0x01fc0eb5), + X(0x01fff7a0), X(0x0203e456), X(0x0207d4d9), X(0x020bc926), + X(0x020fc140), X(0x0213bd24), X(0x0217bcd4), X(0x021bc04e), + X(0x021fc793), X(0x0223d2a3), X(0x0227e17d), X(0x022bf421), + X(0x02300a90), X(0x023424c8), X(0x023842ca), X(0x023c6495), + X(0x02408a2a), X(0x0244b389), X(0x0248e0b0), X(0x024d11a0), + X(0x02514659), X(0x02557eda), X(0x0259bb24), X(0x025dfb35), + X(0x02623f0f), X(0x026686b1), X(0x026ad21a), X(0x026f214b), + X(0x02737443), X(0x0277cb02), X(0x027c2588), X(0x028083d5), + X(0x0284e5e9), X(0x02894bc2), X(0x028db562), X(0x029222c8), + X(0x029693f4), X(0x029b08e6), X(0x029f819d), X(0x02a3fe19), + X(0x02a87e5b), X(0x02ad0261), X(0x02b18a2c), X(0x02b615bb), + X(0x02baa50f), X(0x02bf3827), X(0x02c3cf03), X(0x02c869a3), + X(0x02cd0807), X(0x02d1aa2d), X(0x02d65017), X(0x02daf9c4), + X(0x02dfa734), X(0x02e45866), X(0x02e90d5b), X(0x02edc612), + X(0x02f2828b), X(0x02f742c6), X(0x02fc06c3), X(0x0300ce80), + X(0x030599ff), X(0x030a6940), X(0x030f3c40), X(0x03141302), + X(0x0318ed84), X(0x031dcbc6), X(0x0322adc8), X(0x0327938a), + X(0x032c7d0c), X(0x03316a4c), X(0x03365b4d), X(0x033b500c), + X(0x03404889), X(0x034544c6), X(0x034a44c0), X(0x034f4879), + X(0x03544ff0), X(0x03595b24), X(0x035e6a16), X(0x03637cc5), + X(0x03689331), X(0x036dad5a), X(0x0372cb40), X(0x0377ece2), + X(0x037d1240), X(0x03823b5a), X(0x03876830), X(0x038c98c1), + X(0x0391cd0e), X(0x03970516), X(0x039c40d8), X(0x03a18055), + X(0x03a6c38d), X(0x03ac0a7f), X(0x03b1552b), X(0x03b6a390), + X(0x03bbf5af), X(0x03c14b88), X(0x03c6a519), X(0x03cc0263), + X(0x03d16366), X(0x03d6c821), X(0x03dc3094), X(0x03e19cc0), + X(0x03e70ca2), X(0x03ec803d), X(0x03f1f78e), X(0x03f77296), + X(0x03fcf155), X(0x040273cb), X(0x0407f9f7), X(0x040d83d9), + X(0x04131170), X(0x0418a2bd), X(0x041e37c0), X(0x0423d077), + X(0x04296ce4), X(0x042f0d04), X(0x0434b0da), X(0x043a5863), + X(0x044003a0), X(0x0445b290), X(0x044b6534), X(0x04511b8b), + X(0x0456d595), X(0x045c9352), X(0x046254c1), X(0x046819e1), + X(0x046de2b4), X(0x0473af39), X(0x04797f6e), X(0x047f5355), + X(0x04852aec), X(0x048b0635), X(0x0490e52d), X(0x0496c7d6), + X(0x049cae2e), X(0x04a29836), X(0x04a885ed), X(0x04ae7753), + X(0x04b46c68), X(0x04ba652b), X(0x04c0619d), X(0x04c661bc), + X(0x04cc658a), X(0x04d26d04), X(0x04d8782c), X(0x04de8701), + X(0x04e49983), X(0x04eaafb0), X(0x04f0c98a), X(0x04f6e710), + X(0x04fd0842), X(0x05032d1e), X(0x050955a6), X(0x050f81d8), + X(0x0515b1b5), X(0x051be53d), X(0x05221c6e), X(0x05285748), + X(0x052e95cd), X(0x0534d7fa), X(0x053b1dd0), X(0x0541674e), + X(0x0547b475), X(0x054e0544), X(0x055459bb), X(0x055ab1d9), + X(0x05610d9e), X(0x05676d0a), X(0x056dd01c), X(0x057436d5), + X(0x057aa134), X(0x05810f38), X(0x058780e2), X(0x058df631), + X(0x05946f25), X(0x059aebbe), X(0x05a16bfa), X(0x05a7efdb), + X(0x05ae775f), X(0x05b50287), X(0x05bb9152), X(0x05c223c0), + X(0x05c8b9d0), X(0x05cf5382), X(0x05d5f0d6), X(0x05dc91cc), + X(0x05e33663), X(0x05e9de9c), X(0x05f08a75), X(0x05f739ee), + X(0x05fded07), X(0x0604a3c0), X(0x060b5e19), X(0x06121c11), + X(0x0618dda8), X(0x061fa2dd), X(0x06266bb1), X(0x062d3822), + X(0x06340831), X(0x063adbde), X(0x0641b328), X(0x06488e0e), + X(0x064f6c91), X(0x06564eaf), X(0x065d346a), X(0x06641dc0), + X(0x066b0ab1), X(0x0671fb3d), X(0x0678ef64), X(0x067fe724), + X(0x0686e27f), X(0x068de173), X(0x0694e400), X(0x069bea27), + X(0x06a2f3e6), X(0x06aa013d), X(0x06b1122c), X(0x06b826b3), + X(0x06bf3ed1), X(0x06c65a86), X(0x06cd79d1), X(0x06d49cb3), + X(0x06dbc32b), X(0x06e2ed38), X(0x06ea1adb), X(0x06f14c13), + X(0x06f880df), X(0x06ffb940), X(0x0706f535), X(0x070e34bd), + X(0x071577d9), X(0x071cbe88), X(0x072408c9), X(0x072b569d), + X(0x0732a802), X(0x0739fcf9), X(0x07415582), X(0x0748b19b), + X(0x07501145), X(0x0757747f), X(0x075edb49), X(0x076645a3), + X(0x076db38c), X(0x07752503), X(0x077c9a09), X(0x0784129e), + X(0x078b8ec0), X(0x07930e70), X(0x079a91ac), X(0x07a21876), + X(0x07a9a2cc), X(0x07b130ad), X(0x07b8c21b), X(0x07c05714), + X(0x07c7ef98), X(0x07cf8ba6), X(0x07d72b3f), X(0x07dece62), + X(0x07e6750e), X(0x07ee1f43), X(0x07f5cd01), X(0x07fd7e48), + X(0x08053316), X(0x080ceb6d), X(0x0814a74a), X(0x081c66af), + X(0x0824299a), X(0x082bf00c), X(0x0833ba03), X(0x083b8780), + X(0x08435882), X(0x084b2d09), X(0x08530514), X(0x085ae0a3), + X(0x0862bfb6), X(0x086aa24c), X(0x08728865), X(0x087a7201), + X(0x08825f1e), X(0x088a4fbe), X(0x089243de), X(0x089a3b80), + X(0x08a236a2), X(0x08aa3545), X(0x08b23767), X(0x08ba3d09), + X(0x08c2462a), X(0x08ca52c9), X(0x08d262e7), X(0x08da7682), + X(0x08e28d9c), X(0x08eaa832), X(0x08f2c645), X(0x08fae7d4), + X(0x09030cdf), X(0x090b3566), X(0x09136168), X(0x091b90e5), + X(0x0923c3dc), X(0x092bfa4d), X(0x09343437), X(0x093c719b), + X(0x0944b277), X(0x094cf6cc), X(0x09553e99), X(0x095d89dd), + X(0x0965d899), X(0x096e2acb), X(0x09768073), X(0x097ed991), + X(0x09873625), X(0x098f962e), X(0x0997f9ac), X(0x09a0609e), + X(0x09a8cb04), X(0x09b138dd), X(0x09b9aa29), X(0x09c21ee8), + X(0x09ca9719), X(0x09d312bc), X(0x09db91d0), X(0x09e41456), + X(0x09ec9a4b), X(0x09f523b1), X(0x09fdb087), X(0x0a0640cc), + X(0x0a0ed47f), X(0x0a176ba2), X(0x0a200632), X(0x0a28a42f), + X(0x0a31459a), X(0x0a39ea72), X(0x0a4292b5), X(0x0a4b3e65), + X(0x0a53ed80), X(0x0a5ca006), X(0x0a6555f7), X(0x0a6e0f51), + X(0x0a76cc16), X(0x0a7f8c44), X(0x0a884fda), X(0x0a9116d9), + X(0x0a99e140), X(0x0aa2af0e), X(0x0aab8043), X(0x0ab454df), + X(0x0abd2ce1), X(0x0ac60849), X(0x0acee716), X(0x0ad7c948), + X(0x0ae0aedf), X(0x0ae997d9), X(0x0af28437), X(0x0afb73f7), + X(0x0b04671b), X(0x0b0d5da0), X(0x0b165788), X(0x0b1f54d0), + X(0x0b285579), X(0x0b315983), X(0x0b3a60ec), X(0x0b436bb5), + X(0x0b4c79dd), X(0x0b558b63), X(0x0b5ea048), X(0x0b67b88a), + X(0x0b70d429), X(0x0b79f324), X(0x0b83157c), X(0x0b8c3b30), + X(0x0b95643f), X(0x0b9e90a8), X(0x0ba7c06c), X(0x0bb0f38a), + X(0x0bba2a01), X(0x0bc363d1), X(0x0bcca0f9), X(0x0bd5e17a), + X(0x0bdf2552), X(0x0be86c81), X(0x0bf1b706), X(0x0bfb04e2), + X(0x0c045613), X(0x0c0daa99), X(0x0c170274), X(0x0c205da3), + X(0x0c29bc25), X(0x0c331dfb), X(0x0c3c8323), X(0x0c45eb9e), + X(0x0c4f576a), X(0x0c58c688), X(0x0c6238f6), X(0x0c6baeb5), + X(0x0c7527c3), X(0x0c7ea421), X(0x0c8823cd), X(0x0c91a6c8), + X(0x0c9b2d10), X(0x0ca4b6a6), X(0x0cae4389), X(0x0cb7d3b8), + X(0x0cc16732), X(0x0ccafdf8), X(0x0cd49809), X(0x0cde3564), + X(0x0ce7d609), X(0x0cf179f7), X(0x0cfb212e), X(0x0d04cbad), + X(0x0d0e7974), X(0x0d182a83), X(0x0d21ded8), X(0x0d2b9673), + X(0x0d355154), X(0x0d3f0f7b), X(0x0d48d0e6), X(0x0d529595), + X(0x0d5c5d88), X(0x0d6628be), X(0x0d6ff737), X(0x0d79c8f2), + X(0x0d839dee), X(0x0d8d762c), X(0x0d9751aa), X(0x0da13068), + X(0x0dab1266), X(0x0db4f7a3), X(0x0dbee01e), X(0x0dc8cbd8), + X(0x0dd2bace), X(0x0ddcad02), X(0x0de6a272), X(0x0df09b1e), + X(0x0dfa9705), X(0x0e049627), X(0x0e0e9883), X(0x0e189e19), + X(0x0e22a6e8), X(0x0e2cb2f0), X(0x0e36c230), X(0x0e40d4a8), + X(0x0e4aea56), X(0x0e55033b), X(0x0e5f1f56), X(0x0e693ea7), + X(0x0e73612c), X(0x0e7d86e5), X(0x0e87afd3), X(0x0e91dbf3), + X(0x0e9c0b47), X(0x0ea63dcc), X(0x0eb07383), X(0x0ebaac6b), + X(0x0ec4e883), X(0x0ecf27cc), X(0x0ed96a44), X(0x0ee3afea), + X(0x0eedf8bf), X(0x0ef844c2), X(0x0f0293f2), X(0x0f0ce64e), + X(0x0f173bd6), X(0x0f21948a), X(0x0f2bf069), X(0x0f364f72), + X(0x0f40b1a5), X(0x0f4b1701), X(0x0f557f86), X(0x0f5feb32), + X(0x0f6a5a07), X(0x0f74cc02), X(0x0f7f4124), X(0x0f89b96b), + X(0x0f9434d8), X(0x0f9eb369), X(0x0fa9351e), X(0x0fb3b9f7), + X(0x0fbe41f3), X(0x0fc8cd11), X(0x0fd35b51), X(0x0fddecb2), + X(0x0fe88134), X(0x0ff318d6), X(0x0ffdb397), X(0x10085177), + X(0x1012f275), X(0x101d9691), X(0x10283dca), X(0x1032e81f), + X(0x103d9591), X(0x1048461e), X(0x1052f9c5), X(0x105db087), + X(0x10686a62), X(0x10732756), X(0x107de763), X(0x1088aa87), + X(0x109370c2), X(0x109e3a14), X(0x10a9067c), X(0x10b3d5f9), + X(0x10bea88b), X(0x10c97e31), X(0x10d456eb), X(0x10df32b8), + X(0x10ea1197), X(0x10f4f387), X(0x10ffd889), X(0x110ac09b), + X(0x1115abbe), X(0x112099ef), X(0x112b8b2f), X(0x11367f7d), + X(0x114176d9), X(0x114c7141), X(0x11576eb6), X(0x11626f36), + X(0x116d72c1), X(0x11787957), X(0x118382f6), X(0x118e8f9e), + X(0x11999f4f), X(0x11a4b208), X(0x11afc7c7), X(0x11bae08e), + X(0x11c5fc5a), X(0x11d11b2c), X(0x11dc3d02), X(0x11e761dd), + X(0x11f289ba), X(0x11fdb49b), X(0x1208e27e), X(0x12141362), + X(0x121f4748), X(0x122a7e2d), X(0x1235b812), X(0x1240f4f6), + X(0x124c34d9), X(0x125777b9), X(0x1262bd96), X(0x126e0670), + X(0x12795245), X(0x1284a115), X(0x128ff2e0), X(0x129b47a5), + X(0x12a69f63), X(0x12b1fa19), X(0x12bd57c7), X(0x12c8b86c), + X(0x12d41c08), X(0x12df829a), X(0x12eaec21), X(0x12f6589d), + X(0x1301c80c), X(0x130d3a6f), X(0x1318afc4), X(0x1324280b), + X(0x132fa344), X(0x133b216d), X(0x1346a286), X(0x1352268e), + X(0x135dad85), X(0x1369376a), X(0x1374c43c), X(0x138053fb), + X(0x138be6a5), X(0x13977c3b), X(0x13a314bc), X(0x13aeb026), + X(0x13ba4e79), X(0x13c5efb5), X(0x13d193d9), X(0x13dd3ae4), + X(0x13e8e4d6), X(0x13f491ad), X(0x1400416a), X(0x140bf40b), + X(0x1417a98f), X(0x142361f7), X(0x142f1d41), X(0x143adb6d), + X(0x14469c7a), X(0x14526067), X(0x145e2734), X(0x1469f0df), + X(0x1475bd69), X(0x14818cd0), X(0x148d5f15), X(0x14993435), + X(0x14a50c31), X(0x14b0e708), X(0x14bcc4b8), X(0x14c8a542), + X(0x14d488a5), X(0x14e06edf), X(0x14ec57f1), X(0x14f843d9), + X(0x15043297), X(0x1510242b), X(0x151c1892), X(0x15280fcd), + X(0x153409dc), X(0x154006bc), X(0x154c066e), X(0x155808f1), + X(0x15640e44), X(0x15701666), X(0x157c2157), X(0x15882f16), + X(0x15943fa2), X(0x15a052fb), X(0x15ac691f), X(0x15b8820f), + X(0x15c49dc8), X(0x15d0bc4c), X(0x15dcdd98), X(0x15e901ad), + X(0x15f52888), X(0x1601522b), X(0x160d7e93), X(0x1619adc1), + X(0x1625dfb3), X(0x16321469), X(0x163e4be2), X(0x164a861d), + X(0x1656c31a), X(0x166302d8), X(0x166f4555), X(0x167b8a92), + X(0x1687d28e), X(0x16941d47), X(0x16a06abe), X(0x16acbaf0), + X(0x16b90ddf), X(0x16c56388), X(0x16d1bbeb), X(0x16de1708), + X(0x16ea74dd), X(0x16f6d56a), X(0x170338ae), X(0x170f9ea8), + X(0x171c0758), X(0x172872bd), X(0x1734e0d6), X(0x174151a2), + X(0x174dc520), X(0x175a3b51), X(0x1766b432), X(0x17732fc4), + X(0x177fae05), X(0x178c2ef4), X(0x1798b292), X(0x17a538dd), + X(0x17b1c1d4), X(0x17be4d77), X(0x17cadbc5), X(0x17d76cbc), + X(0x17e4005e), X(0x17f096a7), X(0x17fd2f98), X(0x1809cb31), + X(0x1816696f), X(0x18230a53), X(0x182faddc), X(0x183c5408), + X(0x1848fcd8), X(0x1855a849), X(0x1862565d), X(0x186f0711), + X(0x187bba64), X(0x18887057), X(0x189528e9), X(0x18a1e418), + X(0x18aea1e3), X(0x18bb624b), X(0x18c8254e), X(0x18d4eaeb), + X(0x18e1b321), X(0x18ee7df1), X(0x18fb4b58), X(0x19081b57), + X(0x1914edec), X(0x1921c317), X(0x192e9ad6), X(0x193b7529), + X(0x19485210), X(0x19553189), X(0x19621393), X(0x196ef82e), + X(0x197bdf59), X(0x1988c913), X(0x1995b55c), X(0x19a2a432), + X(0x19af9595), X(0x19bc8983), X(0x19c97ffd), X(0x19d67900), + X(0x19e3748e), X(0x19f072a3), X(0x19fd7341), X(0x1a0a7665), + X(0x1a177c10), X(0x1a248440), X(0x1a318ef4), X(0x1a3e9c2c), + X(0x1a4babe7), X(0x1a58be24), X(0x1a65d2e2), X(0x1a72ea20), + X(0x1a8003de), X(0x1a8d201a), X(0x1a9a3ed5), X(0x1aa7600c), + X(0x1ab483bf), X(0x1ac1a9ee), X(0x1aced297), X(0x1adbfdba), + X(0x1ae92b56), X(0x1af65b69), X(0x1b038df4), X(0x1b10c2f5), + X(0x1b1dfa6b), X(0x1b2b3456), X(0x1b3870b5), X(0x1b45af87), + X(0x1b52f0ca), X(0x1b60347f), X(0x1b6d7aa4), X(0x1b7ac339), + X(0x1b880e3c), X(0x1b955bad), X(0x1ba2ab8b), X(0x1baffdd5), + X(0x1bbd528a), X(0x1bcaa9a9), X(0x1bd80332), X(0x1be55f24), + X(0x1bf2bd7d), X(0x1c001e3d), X(0x1c0d8164), X(0x1c1ae6ef), + X(0x1c284edf), X(0x1c35b932), X(0x1c4325e7), X(0x1c5094fe), + X(0x1c5e0677), X(0x1c6b7a4f), X(0x1c78f086), X(0x1c86691b), + X(0x1c93e40d), X(0x1ca1615c), X(0x1caee107), X(0x1cbc630c), + X(0x1cc9e76b), X(0x1cd76e23), X(0x1ce4f733), X(0x1cf2829a), + X(0x1d001057), X(0x1d0da06a), X(0x1d1b32d1), X(0x1d28c78c), + X(0x1d365e9a), X(0x1d43f7f9), X(0x1d5193a9), X(0x1d5f31aa), + X(0x1d6cd1f9), X(0x1d7a7497), X(0x1d881982), X(0x1d95c0ba), + X(0x1da36a3d), X(0x1db1160a), X(0x1dbec422), X(0x1dcc7482), + X(0x1dda272b), X(0x1de7dc1a), X(0x1df59350), X(0x1e034ccb), + X(0x1e11088a), X(0x1e1ec68c), X(0x1e2c86d1), X(0x1e3a4958), + X(0x1e480e20), X(0x1e55d527), X(0x1e639e6d), X(0x1e7169f1), + X(0x1e7f37b2), X(0x1e8d07b0), X(0x1e9ad9e8), X(0x1ea8ae5b), + X(0x1eb68507), X(0x1ec45dec), X(0x1ed23908), X(0x1ee0165b), + X(0x1eedf5e4), X(0x1efbd7a1), X(0x1f09bb92), X(0x1f17a1b6), + X(0x1f258a0d), X(0x1f337494), X(0x1f41614b), X(0x1f4f5032), + X(0x1f5d4147), X(0x1f6b3489), X(0x1f7929f7), X(0x1f872192), + X(0x1f951b56), X(0x1fa31744), X(0x1fb1155b), X(0x1fbf159a), + X(0x1fcd17ff), X(0x1fdb1c8b), X(0x1fe9233b), X(0x1ff72c0f), + X(0x20053706), X(0x20134420), X(0x2021535a), X(0x202f64b4), + X(0x203d782e), X(0x204b8dc6), X(0x2059a57c), X(0x2067bf4e), + X(0x2075db3b), X(0x2083f943), X(0x20921964), X(0x20a03b9e), + X(0x20ae5fef), X(0x20bc8657), X(0x20caaed5), X(0x20d8d967), + X(0x20e7060e), X(0x20f534c7), X(0x21036592), X(0x2111986e), + X(0x211fcd59), X(0x212e0454), X(0x213c3d5d), X(0x214a7873), + X(0x2158b594), X(0x2166f4c1), X(0x217535f8), X(0x21837938), + X(0x2191be81), X(0x21a005d0), X(0x21ae4f26), X(0x21bc9a81), + X(0x21cae7e0), X(0x21d93743), X(0x21e788a8), X(0x21f5dc0e), + X(0x22043174), X(0x221288da), X(0x2220e23e), X(0x222f3da0), + X(0x223d9afe), X(0x224bfa58), X(0x225a5bac), X(0x2268bef9), + X(0x2277243f), X(0x22858b7d), X(0x2293f4b0), X(0x22a25fda), + X(0x22b0ccf8), X(0x22bf3c09), X(0x22cdad0d), X(0x22dc2002), + X(0x22ea94e8), X(0x22f90bbe), X(0x23078482), X(0x2315ff33), + X(0x23247bd1), X(0x2332fa5b), X(0x23417acf), X(0x234ffd2c), + X(0x235e8173), X(0x236d07a0), X(0x237b8fb4), X(0x238a19ae), + X(0x2398a58c), X(0x23a7334d), X(0x23b5c2f1), X(0x23c45477), + X(0x23d2e7dd), X(0x23e17d22), X(0x23f01446), X(0x23fead47), + X(0x240d4825), X(0x241be4dd), X(0x242a8371), X(0x243923dd), + X(0x2447c622), X(0x24566a3e), X(0x24651031), X(0x2473b7f8), + X(0x24826194), X(0x24910d03), X(0x249fba44), X(0x24ae6957), + X(0x24bd1a39), X(0x24cbccea), X(0x24da816a), X(0x24e937b7), + X(0x24f7efcf), X(0x2506a9b3), X(0x25156560), X(0x252422d6), + X(0x2532e215), X(0x2541a31a), X(0x255065e4), X(0x255f2a74), + X(0x256df0c7), X(0x257cb8dd), X(0x258b82b4), X(0x259a4e4c), + X(0x25a91ba4), X(0x25b7eaba), X(0x25c6bb8e), X(0x25d58e1e), + X(0x25e46269), X(0x25f3386e), X(0x2602102d), X(0x2610e9a4), + X(0x261fc4d3), X(0x262ea1b7), X(0x263d8050), X(0x264c609e), + X(0x265b429e), X(0x266a2650), X(0x26790bb3), X(0x2687f2c6), + X(0x2696db88), X(0x26a5c5f7), X(0x26b4b213), X(0x26c39fda), + X(0x26d28f4c), X(0x26e18067), X(0x26f0732b), X(0x26ff6796), + X(0x270e5da7), X(0x271d555d), X(0x272c4eb7), X(0x273b49b5), + X(0x274a4654), X(0x27594495), X(0x27684475), X(0x277745f4), + X(0x27864910), X(0x27954dc9), X(0x27a4541e), X(0x27b35c0d), + X(0x27c26596), X(0x27d170b7), X(0x27e07d6f), X(0x27ef8bbd), + X(0x27fe9ba0), X(0x280dad18), X(0x281cc022), X(0x282bd4be), + X(0x283aeaeb), X(0x284a02a7), X(0x28591bf2), X(0x286836cb), + X(0x28775330), X(0x28867120), X(0x2895909b), X(0x28a4b19e), + X(0x28b3d42a), X(0x28c2f83d), X(0x28d21dd5), X(0x28e144f3), + X(0x28f06d94), X(0x28ff97b8), X(0x290ec35d), X(0x291df082), + X(0x292d1f27), X(0x293c4f4a), X(0x294b80eb), X(0x295ab407), + X(0x2969e89e), X(0x29791eaf), X(0x29885639), X(0x29978f3b), + X(0x29a6c9b3), X(0x29b605a0), X(0x29c54302), X(0x29d481d7), + X(0x29e3c21e), X(0x29f303d6), X(0x2a0246fd), X(0x2a118b94), + X(0x2a20d198), X(0x2a301909), X(0x2a3f61e6), X(0x2a4eac2c), + X(0x2a5df7dc), X(0x2a6d44f4), X(0x2a7c9374), X(0x2a8be359), + X(0x2a9b34a2), X(0x2aaa8750), X(0x2ab9db60), X(0x2ac930d1), + X(0x2ad887a3), X(0x2ae7dfd3), X(0x2af73962), X(0x2b06944e), + X(0x2b15f096), X(0x2b254e38), X(0x2b34ad34), X(0x2b440d89), + X(0x2b536f34), X(0x2b62d236), X(0x2b72368d), X(0x2b819c38), + X(0x2b910336), X(0x2ba06b86), X(0x2bafd526), X(0x2bbf4015), + X(0x2bceac53), X(0x2bde19de), X(0x2bed88b5), X(0x2bfcf8d7), + X(0x2c0c6a43), X(0x2c1bdcf7), X(0x2c2b50f3), X(0x2c3ac635), + X(0x2c4a3cbd), X(0x2c59b488), X(0x2c692d97), X(0x2c78a7e7), + X(0x2c882378), X(0x2c97a049), X(0x2ca71e58), X(0x2cb69da4), + X(0x2cc61e2c), X(0x2cd59ff0), X(0x2ce522ed), X(0x2cf4a723), + X(0x2d042c90), X(0x2d13b334), X(0x2d233b0d), X(0x2d32c41a), + X(0x2d424e5a), X(0x2d51d9cc), X(0x2d61666e), X(0x2d70f440), + X(0x2d808340), X(0x2d90136e), X(0x2d9fa4c7), X(0x2daf374c), + X(0x2dbecafa), X(0x2dce5fd1), X(0x2dddf5cf), X(0x2ded8cf4), + X(0x2dfd253d), X(0x2e0cbeab), X(0x2e1c593b), X(0x2e2bf4ed), + X(0x2e3b91c0), X(0x2e4b2fb1), X(0x2e5acec1), X(0x2e6a6eee), + X(0x2e7a1037), X(0x2e89b29b), X(0x2e995618), X(0x2ea8faad), + X(0x2eb8a05a), X(0x2ec8471c), X(0x2ed7eef4), X(0x2ee797df), + X(0x2ef741dc), X(0x2f06eceb), X(0x2f16990a), X(0x2f264639), + X(0x2f35f475), X(0x2f45a3bd), X(0x2f555412), X(0x2f650570), + X(0x2f74b7d8), X(0x2f846b48), X(0x2f941fbe), X(0x2fa3d53a), + X(0x2fb38bbb), X(0x2fc3433f), X(0x2fd2fbc5), X(0x2fe2b54c), + X(0x2ff26fd3), X(0x30022b58), X(0x3011e7db), X(0x3021a55a), + X(0x303163d4), X(0x30412348), X(0x3050e3b5), X(0x3060a519), + X(0x30706773), X(0x30802ac3), X(0x308fef06), X(0x309fb43d), + X(0x30af7a65), X(0x30bf417d), X(0x30cf0985), X(0x30ded27a), + X(0x30ee9c5d), X(0x30fe672b), X(0x310e32e3), X(0x311dff85), + X(0x312dcd0f), X(0x313d9b80), X(0x314d6ad7), X(0x315d3b12), + X(0x316d0c30), X(0x317cde31), X(0x318cb113), X(0x319c84d4), + X(0x31ac5974), X(0x31bc2ef1), X(0x31cc054b), X(0x31dbdc7f), + X(0x31ebb48e), X(0x31fb8d74), X(0x320b6733), X(0x321b41c7), + X(0x322b1d31), X(0x323af96e), X(0x324ad67e), X(0x325ab45f), + X(0x326a9311), X(0x327a7291), X(0x328a52e0), X(0x329a33fb), + X(0x32aa15e1), X(0x32b9f892), X(0x32c9dc0c), X(0x32d9c04d), + X(0x32e9a555), X(0x32f98b22), X(0x330971b4), X(0x33195909), + X(0x3329411f), X(0x333929f6), X(0x3349138c), X(0x3358fde1), + X(0x3368e8f2), X(0x3378d4c0), X(0x3388c147), X(0x3398ae89), + X(0x33a89c82), X(0x33b88b32), X(0x33c87a98), X(0x33d86ab2), + X(0x33e85b80), X(0x33f84d00), X(0x34083f30), X(0x34183210), + X(0x3428259f), X(0x343819db), X(0x34480ec3), X(0x34580455), + X(0x3467fa92), X(0x3477f176), X(0x3487e902), X(0x3497e134), + X(0x34a7da0a), X(0x34b7d384), X(0x34c7cda0), X(0x34d7c85e), + X(0x34e7c3bb), X(0x34f7bfb7), X(0x3507bc50), X(0x3517b985), + X(0x3527b756), X(0x3537b5c0), X(0x3547b4c3), X(0x3557b45d), + X(0x3567b48d), X(0x3577b552), X(0x3587b6aa), X(0x3597b895), + X(0x35a7bb12), X(0x35b7be1e), X(0x35c7c1b9), X(0x35d7c5e1), + X(0x35e7ca96), X(0x35f7cfd6), X(0x3607d5a0), X(0x3617dbf3), + X(0x3627e2cd), X(0x3637ea2d), X(0x3647f212), X(0x3657fa7b), + X(0x36680366), X(0x36780cd2), X(0x368816bf), X(0x3698212b), + X(0x36a82c14), X(0x36b83779), X(0x36c8435a), X(0x36d84fb4), + X(0x36e85c88), X(0x36f869d2), X(0x37087793), X(0x371885c9), + X(0x37289473), X(0x3738a38f), X(0x3748b31d), X(0x3758c31a), + X(0x3768d387), X(0x3778e461), X(0x3788f5a7), X(0x37990759), + X(0x37a91975), X(0x37b92bf9), X(0x37c93ee4), X(0x37d95236), + X(0x37e965ed), X(0x37f97a08), X(0x38098e85), X(0x3819a363), + X(0x3829b8a2), X(0x3839ce3f), X(0x3849e43a), X(0x3859fa91), + X(0x386a1143), X(0x387a284f), X(0x388a3fb4), X(0x389a5770), + X(0x38aa6f83), X(0x38ba87ea), X(0x38caa0a5), X(0x38dab9b2), + X(0x38ead311), X(0x38faecbf), X(0x390b06bc), X(0x391b2107), + X(0x392b3b9e), X(0x393b5680), X(0x394b71ac), X(0x395b8d20), + X(0x396ba8dc), X(0x397bc4dd), X(0x398be124), X(0x399bfdae), + X(0x39ac1a7a), X(0x39bc3788), X(0x39cc54d5), X(0x39dc7261), + X(0x39ec902a), X(0x39fcae2f), X(0x3a0ccc70), X(0x3a1ceaea), + X(0x3a2d099c), X(0x3a3d2885), X(0x3a4d47a5), X(0x3a5d66f9), + X(0x3a6d8680), X(0x3a7da63a), X(0x3a8dc625), X(0x3a9de63f), + X(0x3aae0688), X(0x3abe26fe), X(0x3ace47a0), X(0x3ade686d), + X(0x3aee8963), X(0x3afeaa82), X(0x3b0ecbc7), X(0x3b1eed32), + X(0x3b2f0ec2), X(0x3b3f3075), X(0x3b4f524a), X(0x3b5f7440), + X(0x3b6f9656), X(0x3b7fb889), X(0x3b8fdada), X(0x3b9ffd46), + X(0x3bb01fce), X(0x3bc0426e), X(0x3bd06526), X(0x3be087f6), + X(0x3bf0aada), X(0x3c00cdd4), X(0x3c10f0e0), X(0x3c2113fe), + X(0x3c31372d), X(0x3c415a6b), X(0x3c517db7), X(0x3c61a110), + X(0x3c71c475), X(0x3c81e7e4), X(0x3c920b5c), X(0x3ca22edc), + X(0x3cb25262), X(0x3cc275ee), X(0x3cd2997e), X(0x3ce2bd11), + X(0x3cf2e0a6), X(0x3d03043b), X(0x3d1327cf), X(0x3d234b61), + X(0x3d336ef0), X(0x3d43927a), X(0x3d53b5ff), X(0x3d63d97c), + X(0x3d73fcf1), X(0x3d84205c), X(0x3d9443bd), X(0x3da46711), + X(0x3db48a58), X(0x3dc4ad91), X(0x3dd4d0ba), X(0x3de4f3d1), + X(0x3df516d7), X(0x3e0539c9), X(0x3e155ca6), X(0x3e257f6d), + X(0x3e35a21d), X(0x3e45c4b4), X(0x3e55e731), X(0x3e660994), + X(0x3e762bda), X(0x3e864e03), X(0x3e96700d), X(0x3ea691f7), + X(0x3eb6b3bf), X(0x3ec6d565), X(0x3ed6f6e8), X(0x3ee71845), + X(0x3ef7397c), X(0x3f075a8c), X(0x3f177b73), X(0x3f279c30), + X(0x3f37bcc2), X(0x3f47dd27), X(0x3f57fd5f), X(0x3f681d68), + X(0x3f783d40), X(0x3f885ce7), X(0x3f987c5c), X(0x3fa89b9c), + X(0x3fb8baa7), X(0x3fc8d97c), X(0x3fd8f819), X(0x3fe9167e), + X(0x3ff934a8), X(0x40095296), X(0x40197049), X(0x40298dbd), + X(0x4039aaf2), X(0x4049c7e7), X(0x4059e49a), X(0x406a010a), + X(0x407a1d36), X(0x408a391d), X(0x409a54bd), X(0x40aa7015), + X(0x40ba8b25), X(0x40caa5ea), X(0x40dac063), X(0x40eada90), + X(0x40faf46e), X(0x410b0dfe), X(0x411b273d), X(0x412b402a), + X(0x413b58c4), X(0x414b710a), X(0x415b88fa), X(0x416ba093), + X(0x417bb7d5), X(0x418bcebe), X(0x419be54c), X(0x41abfb7e), + X(0x41bc1153), X(0x41cc26ca), X(0x41dc3be2), X(0x41ec5099), + X(0x41fc64ef), X(0x420c78e1), X(0x421c8c6f), X(0x422c9f97), + X(0x423cb258), X(0x424cc4b2), X(0x425cd6a2), X(0x426ce827), + X(0x427cf941), X(0x428d09ee), X(0x429d1a2c), X(0x42ad29fb), + X(0x42bd3959), X(0x42cd4846), X(0x42dd56bf), X(0x42ed64c3), + X(0x42fd7252), X(0x430d7f6a), X(0x431d8c0a), X(0x432d9831), + X(0x433da3dd), X(0x434daf0d), X(0x435db9c0), X(0x436dc3f5), + X(0x437dcdab), X(0x438dd6df), X(0x439ddf92), X(0x43ade7c1), + X(0x43bdef6c), X(0x43cdf691), X(0x43ddfd2f), X(0x43ee0345), + X(0x43fe08d2), X(0x440e0dd4), X(0x441e124b), X(0x442e1634), + X(0x443e198f), X(0x444e1c5a), X(0x445e1e95), X(0x446e203e), + X(0x447e2153), X(0x448e21d5), X(0x449e21c0), X(0x44ae2115), + X(0x44be1fd1), X(0x44ce1df4), X(0x44de1b7d), X(0x44ee186a), + X(0x44fe14ba), X(0x450e106b), X(0x451e0b7e), X(0x452e05ef), + X(0x453dffbf), X(0x454df8eb), X(0x455df173), X(0x456de956), + X(0x457de092), X(0x458dd726), X(0x459dcd10), X(0x45adc251), + X(0x45bdb6e5), X(0x45cdaacd), X(0x45dd9e06), X(0x45ed9091), + X(0x45fd826a), X(0x460d7392), X(0x461d6407), X(0x462d53c8), + X(0x463d42d4), X(0x464d3129), X(0x465d1ec6), X(0x466d0baa), + X(0x467cf7d3), X(0x468ce342), X(0x469ccdf3), X(0x46acb7e7), + X(0x46bca11c), X(0x46cc8990), X(0x46dc7143), X(0x46ec5833), + X(0x46fc3e5f), X(0x470c23c6), X(0x471c0867), X(0x472bec40), + X(0x473bcf50), X(0x474bb196), X(0x475b9311), X(0x476b73c0), + X(0x477b53a1), X(0x478b32b4), X(0x479b10f6), X(0x47aaee67), + X(0x47bacb06), X(0x47caa6d1), X(0x47da81c7), X(0x47ea5be7), + X(0x47fa3530), X(0x480a0da1), X(0x4819e537), X(0x4829bbf3), + X(0x483991d3), X(0x484966d6), X(0x48593afb), X(0x48690e3f), + X(0x4878e0a3), X(0x4888b225), X(0x489882c4), X(0x48a8527e), + X(0x48b82153), X(0x48c7ef41), X(0x48d7bc47), X(0x48e78863), + X(0x48f75396), X(0x49071ddc), X(0x4916e736), X(0x4926afa2), + X(0x4936771f), X(0x49463dac), X(0x49560347), X(0x4965c7ef), + X(0x49758ba4), X(0x49854e63), X(0x4995102c), X(0x49a4d0fe), + X(0x49b490d7), X(0x49c44fb6), X(0x49d40d9a), X(0x49e3ca82), + X(0x49f3866c), X(0x4a034159), X(0x4a12fb45), X(0x4a22b430), + X(0x4a326c19), X(0x4a4222ff), X(0x4a51d8e1), X(0x4a618dbd), + X(0x4a714192), X(0x4a80f45f), X(0x4a90a623), X(0x4aa056dd), + X(0x4ab0068b), X(0x4abfb52c), X(0x4acf62c0), X(0x4adf0f44), + X(0x4aeebab9), X(0x4afe651c), X(0x4b0e0e6c), X(0x4b1db6a9), + X(0x4b2d5dd1), X(0x4b3d03e2), X(0x4b4ca8dd), X(0x4b5c4cbf), + X(0x4b6bef88), X(0x4b7b9136), X(0x4b8b31c8), X(0x4b9ad13d), + X(0x4baa6f93), X(0x4bba0ccb), X(0x4bc9a8e2), X(0x4bd943d7), + X(0x4be8dda9), X(0x4bf87658), X(0x4c080de1), X(0x4c17a444), + X(0x4c27397f), X(0x4c36cd92), X(0x4c46607b), X(0x4c55f239), + X(0x4c6582cb), X(0x4c75122f), X(0x4c84a065), X(0x4c942d6c), + X(0x4ca3b942), X(0x4cb343e6), X(0x4cc2cd57), X(0x4cd25594), + X(0x4ce1dc9c), X(0x4cf1626d), X(0x4d00e707), X(0x4d106a68), + X(0x4d1fec8f), X(0x4d2f6d7a), X(0x4d3eed2a), X(0x4d4e6b9d), + X(0x4d5de8d1), X(0x4d6d64c5), X(0x4d7cdf79), X(0x4d8c58eb), + X(0x4d9bd11a), X(0x4dab4804), X(0x4dbabdaa), X(0x4dca3209), + X(0x4dd9a520), X(0x4de916ef), X(0x4df88774), X(0x4e07f6ae), + X(0x4e17649c), X(0x4e26d13c), X(0x4e363c8f), X(0x4e45a692), + X(0x4e550f44), X(0x4e6476a4), X(0x4e73dcb2), X(0x4e83416c), + X(0x4e92a4d1), X(0x4ea206df), X(0x4eb16796), X(0x4ec0c6f5), + X(0x4ed024fa), X(0x4edf81a5), X(0x4eeedcf3), X(0x4efe36e5), + X(0x4f0d8f79), X(0x4f1ce6ad), X(0x4f2c3c82), X(0x4f3b90f4), + X(0x4f4ae405), X(0x4f5a35b1), X(0x4f6985fa), X(0x4f78d4dc), + X(0x4f882257), X(0x4f976e6a), X(0x4fa6b914), X(0x4fb60254), + X(0x4fc54a28), X(0x4fd49090), X(0x4fe3d58b), X(0x4ff31917), + X(0x50025b33), X(0x50119bde), X(0x5020db17), X(0x503018dd), + X(0x503f552f), X(0x504e900b), X(0x505dc971), X(0x506d0160), + X(0x507c37d7), X(0x508b6cd3), X(0x509aa055), X(0x50a9d25b), + X(0x50b902e4), X(0x50c831ef), X(0x50d75f7b), X(0x50e68b87), + X(0x50f5b612), X(0x5104df1a), X(0x5114069f), X(0x51232ca0), + X(0x5132511a), X(0x5141740f), X(0x5150957b), X(0x515fb55f), + X(0x516ed3b8), X(0x517df087), X(0x518d0bca), X(0x519c257f), + X(0x51ab3da7), X(0x51ba543f), X(0x51c96947), X(0x51d87cbd), + X(0x51e78ea1), X(0x51f69ef1), X(0x5205adad), X(0x5214bad3), + X(0x5223c662), X(0x5232d05a), X(0x5241d8b9), X(0x5250df7d), + X(0x525fe4a7), X(0x526ee835), X(0x527dea26), X(0x528cea78), + X(0x529be92c), X(0x52aae63f), X(0x52b9e1b0), X(0x52c8db80), + X(0x52d7d3ac), X(0x52e6ca33), X(0x52f5bf15), X(0x5304b251), + X(0x5313a3e5), X(0x532293d0), X(0x53318212), X(0x53406ea8), + X(0x534f5993), X(0x535e42d2), X(0x536d2a62), X(0x537c1043), + X(0x538af475), X(0x5399d6f6), X(0x53a8b7c4), X(0x53b796e0), + X(0x53c67447), X(0x53d54ffa), X(0x53e429f6), X(0x53f3023b), + X(0x5401d8c8), X(0x5410ad9c), X(0x541f80b5), X(0x542e5213), + X(0x543d21b5), X(0x544bef9a), X(0x545abbc0), X(0x54698627), + X(0x54784ece), X(0x548715b3), X(0x5495dad6), X(0x54a49e35), + X(0x54b35fd0), X(0x54c21fa6), X(0x54d0ddb5), X(0x54df99fd), + X(0x54ee547c), X(0x54fd0d32), X(0x550bc41d), X(0x551a793d), + X(0x55292c91), X(0x5537de16), X(0x55468dce), X(0x55553bb6), + X(0x5563e7cd), X(0x55729213), X(0x55813a87), X(0x558fe127), + X(0x559e85f2), X(0x55ad28e9), X(0x55bbca08), X(0x55ca6950), + X(0x55d906c0), X(0x55e7a257), X(0x55f63c13), X(0x5604d3f4), + X(0x561369f8), X(0x5621fe1f), X(0x56309067), X(0x563f20d1), + X(0x564daf5a), X(0x565c3c02), X(0x566ac6c7), X(0x56794faa), + X(0x5687d6a8), X(0x56965bc1), X(0x56a4def4), X(0x56b36040), + X(0x56c1dfa4), X(0x56d05d1f), X(0x56ded8af), X(0x56ed5255), + X(0x56fbca0f), X(0x570a3fdc), X(0x5718b3bc), X(0x572725ac), + X(0x573595ad), X(0x574403bd), X(0x57526fdb), X(0x5760da07), + X(0x576f423f), X(0x577da883), X(0x578c0cd1), X(0x579a6f29), + X(0x57a8cf8a), X(0x57b72df2), X(0x57c58a61), X(0x57d3e4d6), + X(0x57e23d50), X(0x57f093cd), X(0x57fee84e), X(0x580d3ad1), + X(0x581b8b54), X(0x5829d9d8), X(0x5838265c), X(0x584670dd), + X(0x5854b95c), X(0x5862ffd8), X(0x5871444f), X(0x587f86c1), + X(0x588dc72c), X(0x589c0591), X(0x58aa41ed), X(0x58b87c40), + X(0x58c6b489), X(0x58d4eac7), X(0x58e31ef9), X(0x58f1511f), + X(0x58ff8137), X(0x590daf40), X(0x591bdb3a), X(0x592a0524), + X(0x59382cfc), X(0x594652c2), X(0x59547675), X(0x59629815), + X(0x5970b79f), X(0x597ed513), X(0x598cf071), X(0x599b09b7), + X(0x59a920e5), X(0x59b735f9), X(0x59c548f4), X(0x59d359d2), + X(0x59e16895), X(0x59ef753b), X(0x59fd7fc4), X(0x5a0b882d), + X(0x5a198e77), X(0x5a2792a0), X(0x5a3594a9), X(0x5a43948e), + X(0x5a519251), X(0x5a5f8df0), X(0x5a6d876a), X(0x5a7b7ebe), + X(0x5a8973ec), X(0x5a9766f2), X(0x5aa557d0), X(0x5ab34685), + X(0x5ac1330f), X(0x5acf1d6f), X(0x5add05a3), X(0x5aeaebaa), + X(0x5af8cf84), X(0x5b06b12f), X(0x5b1490ab), X(0x5b226df7), + X(0x5b304912), X(0x5b3e21fc), X(0x5b4bf8b2), X(0x5b59cd35), + X(0x5b679f84), X(0x5b756f9e), X(0x5b833d82), X(0x5b91092e), + X(0x5b9ed2a3), X(0x5bac99e0), X(0x5bba5ee3), X(0x5bc821ac), + X(0x5bd5e23a), X(0x5be3a08c), X(0x5bf15ca1), X(0x5bff1679), + X(0x5c0cce12), X(0x5c1a836c), X(0x5c283686), X(0x5c35e760), + X(0x5c4395f7), X(0x5c51424c), X(0x5c5eec5e), X(0x5c6c942b), + X(0x5c7a39b4), X(0x5c87dcf7), X(0x5c957df3), X(0x5ca31ca8), + X(0x5cb0b915), X(0x5cbe5338), X(0x5ccbeb12), X(0x5cd980a1), + X(0x5ce713e5), X(0x5cf4a4dd), X(0x5d023387), X(0x5d0fbfe4), + X(0x5d1d49f2), X(0x5d2ad1b1), X(0x5d38571f), X(0x5d45da3c), + X(0x5d535b08), X(0x5d60d981), X(0x5d6e55a7), X(0x5d7bcf78), + X(0x5d8946f5), X(0x5d96bc1c), X(0x5da42eec), X(0x5db19f65), + X(0x5dbf0d86), X(0x5dcc794e), X(0x5dd9e2bd), X(0x5de749d1), + X(0x5df4ae8a), X(0x5e0210e7), X(0x5e0f70e7), X(0x5e1cce8a), + X(0x5e2a29ce), X(0x5e3782b4), X(0x5e44d93a), X(0x5e522d5f), + X(0x5e5f7f23), X(0x5e6cce85), X(0x5e7a1b85), X(0x5e876620), + X(0x5e94ae58), X(0x5ea1f42a), X(0x5eaf3797), X(0x5ebc789d), + X(0x5ec9b73c), X(0x5ed6f372), X(0x5ee42d41), X(0x5ef164a5), + X(0x5efe999f), X(0x5f0bcc2f), X(0x5f18fc52), X(0x5f262a09), + X(0x5f335553), X(0x5f407e2f), X(0x5f4da49d), X(0x5f5ac89b), + X(0x5f67ea29), X(0x5f750946), X(0x5f8225f2), X(0x5f8f402b), + X(0x5f9c57f2), X(0x5fa96d44), X(0x5fb68023), X(0x5fc3908c), + X(0x5fd09e7f), X(0x5fdda9fc), X(0x5feab302), X(0x5ff7b990), + X(0x6004bda5), X(0x6011bf40), X(0x601ebe62), X(0x602bbb09), + X(0x6038b534), X(0x6045ace4), X(0x6052a216), X(0x605f94cb), + X(0x606c8502), X(0x607972b9), X(0x60865df2), X(0x609346aa), + X(0x60a02ce1), X(0x60ad1096), X(0x60b9f1c9), X(0x60c6d079), + X(0x60d3aca5), X(0x60e0864d), X(0x60ed5d70), X(0x60fa320d), + X(0x61070424), X(0x6113d3b4), X(0x6120a0bc), X(0x612d6b3c), + X(0x613a3332), X(0x6146f89f), X(0x6153bb82), X(0x61607bd9), + X(0x616d39a5), X(0x6179f4e5), X(0x6186ad98), X(0x619363bd), + X(0x61a01753), X(0x61acc85b), X(0x61b976d3), X(0x61c622bc), + X(0x61d2cc13), X(0x61df72d8), X(0x61ec170c), X(0x61f8b8ad), + X(0x620557ba), X(0x6211f434), X(0x621e8e18), X(0x622b2568), + X(0x6237ba21), X(0x62444c44), X(0x6250dbd0), X(0x625d68c4), + X(0x6269f320), X(0x62767ae2), X(0x6283000b), X(0x628f829a), + X(0x629c028e), X(0x62a87fe6), X(0x62b4faa2), X(0x62c172c2), + X(0x62cde844), X(0x62da5b29), X(0x62e6cb6e), X(0x62f33915), + X(0x62ffa41c), X(0x630c0c83), X(0x63187248), X(0x6324d56d), + X(0x633135ef), X(0x633d93ce), X(0x6349ef0b), X(0x635647a3), + X(0x63629d97), X(0x636ef0e6), X(0x637b418f), X(0x63878f92), + X(0x6393daef), X(0x63a023a4), X(0x63ac69b1), X(0x63b8ad15), + X(0x63c4edd1), X(0x63d12be3), X(0x63dd674b), X(0x63e9a008), + X(0x63f5d61a), X(0x64020980), X(0x640e3a39), X(0x641a6846), + X(0x642693a5), X(0x6432bc56), X(0x643ee258), X(0x644b05ab), + X(0x6457264e), X(0x64634441), X(0x646f5f83), X(0x647b7814), + X(0x64878df3), X(0x6493a120), X(0x649fb199), X(0x64abbf5f), + X(0x64b7ca71), X(0x64c3d2ce), X(0x64cfd877), X(0x64dbdb69), + X(0x64e7dba6), X(0x64f3d92b), X(0x64ffd3fa), X(0x650bcc11), + X(0x6517c16f), X(0x6523b415), X(0x652fa402), X(0x653b9134), + X(0x65477bad), X(0x6553636a), X(0x655f486d), X(0x656b2ab3), + X(0x65770a3d), X(0x6582e70a), X(0x658ec11a), X(0x659a986d), + X(0x65a66d00), X(0x65b23ed5), X(0x65be0deb), X(0x65c9da41), + X(0x65d5a3d7), X(0x65e16aac), X(0x65ed2ebf), X(0x65f8f011), + X(0x6604aea1), X(0x66106a6e), X(0x661c2377), X(0x6627d9be), + X(0x66338d40), X(0x663f3dfd), X(0x664aebf5), X(0x66569728), + X(0x66623f95), X(0x666de53b), X(0x6679881b), X(0x66852833), + X(0x6690c583), X(0x669c600b), X(0x66a7f7ca), X(0x66b38cc0), + X(0x66bf1eec), X(0x66caae4f), X(0x66d63ae6), X(0x66e1c4b3), + X(0x66ed4bb4), X(0x66f8cfea), X(0x67045153), X(0x670fcfef), + X(0x671b4bbe), X(0x6726c4bf), X(0x67323af3), X(0x673dae58), + X(0x67491eee), X(0x67548cb5), X(0x675ff7ab), X(0x676b5fd2), + X(0x6776c528), X(0x678227ad), X(0x678d8761), X(0x6798e443), + X(0x67a43e52), X(0x67af958f), X(0x67bae9f9), X(0x67c63b8f), + X(0x67d18a52), X(0x67dcd640), X(0x67e81f59), X(0x67f3659d), + X(0x67fea90c), X(0x6809e9a5), X(0x68152768), X(0x68206254), + X(0x682b9a68), X(0x6836cfa6), X(0x6842020b), X(0x684d3199), + X(0x68585e4d), X(0x68638829), X(0x686eaf2b), X(0x6879d354), + X(0x6884f4a2), X(0x68901316), X(0x689b2eb0), X(0x68a6476d), + X(0x68b15d50), X(0x68bc7056), X(0x68c78080), X(0x68d28dcd), + X(0x68dd983e), X(0x68e89fd0), X(0x68f3a486), X(0x68fea65d), + X(0x6909a555), X(0x6914a16f), X(0x691f9aa9), X(0x692a9104), + X(0x69358480), X(0x6940751b), X(0x694b62d5), X(0x69564daf), + X(0x696135a7), X(0x696c1abe), X(0x6976fcf3), X(0x6981dc46), + X(0x698cb8b6), X(0x69979243), X(0x69a268ed), X(0x69ad3cb4), + X(0x69b80d97), X(0x69c2db96), X(0x69cda6b0), X(0x69d86ee5), + X(0x69e33436), X(0x69edf6a1), X(0x69f8b626), X(0x6a0372c5), + X(0x6a0e2c7e), X(0x6a18e350), X(0x6a23973c), X(0x6a2e4840), + X(0x6a38f65d), X(0x6a43a191), X(0x6a4e49de), X(0x6a58ef42), + X(0x6a6391be), X(0x6a6e3151), X(0x6a78cdfa), X(0x6a8367ba), + X(0x6a8dfe90), X(0x6a98927c), X(0x6aa3237d), X(0x6aadb194), + X(0x6ab83cc0), X(0x6ac2c500), X(0x6acd4a55), X(0x6ad7ccbf), + X(0x6ae24c3c), X(0x6aecc8cd), X(0x6af74271), X(0x6b01b929), + X(0x6b0c2cf4), X(0x6b169dd1), X(0x6b210bc1), X(0x6b2b76c2), + X(0x6b35ded6), X(0x6b4043fc), X(0x6b4aa632), X(0x6b55057a), + X(0x6b5f61d3), X(0x6b69bb3d), X(0x6b7411b7), X(0x6b7e6541), + X(0x6b88b5db), X(0x6b930385), X(0x6b9d4e3f), X(0x6ba79607), + X(0x6bb1dadf), X(0x6bbc1cc6), X(0x6bc65bbb), X(0x6bd097bf), + X(0x6bdad0d0), X(0x6be506f0), X(0x6bef3a1d), X(0x6bf96a58), + X(0x6c0397a0), X(0x6c0dc1f5), X(0x6c17e957), X(0x6c220dc6), + X(0x6c2c2f41), X(0x6c364dc9), X(0x6c40695c), X(0x6c4a81fc), + X(0x6c5497a7), X(0x6c5eaa5d), X(0x6c68ba1f), X(0x6c72c6eb), + X(0x6c7cd0c3), X(0x6c86d7a6), X(0x6c90db92), X(0x6c9adc8a), + X(0x6ca4da8b), X(0x6caed596), X(0x6cb8cdab), X(0x6cc2c2ca), + X(0x6cccb4f2), X(0x6cd6a424), X(0x6ce0905e), X(0x6cea79a1), + X(0x6cf45fee), X(0x6cfe4342), X(0x6d0823a0), X(0x6d120105), + X(0x6d1bdb73), X(0x6d25b2e8), X(0x6d2f8765), X(0x6d3958ea), + X(0x6d432777), X(0x6d4cf30a), X(0x6d56bba5), X(0x6d608147), + X(0x6d6a43f0), X(0x6d7403a0), X(0x6d7dc056), X(0x6d877a13), + X(0x6d9130d6), X(0x6d9ae4a0), X(0x6da4956f), X(0x6dae4345), + X(0x6db7ee20), X(0x6dc19601), X(0x6dcb3ae7), X(0x6dd4dcd3), + X(0x6dde7bc4), X(0x6de817bb), X(0x6df1b0b6), X(0x6dfb46b7), + X(0x6e04d9bc), X(0x6e0e69c7), X(0x6e17f6d5), X(0x6e2180e9), + X(0x6e2b0801), X(0x6e348c1d), X(0x6e3e0d3d), X(0x6e478b62), + X(0x6e51068a), X(0x6e5a7eb7), X(0x6e63f3e7), X(0x6e6d661b), + X(0x6e76d552), X(0x6e80418e), X(0x6e89aacc), X(0x6e93110f), + X(0x6e9c7454), X(0x6ea5d49d), X(0x6eaf31e9), X(0x6eb88c37), + X(0x6ec1e389), X(0x6ecb37de), X(0x6ed48936), X(0x6eddd790), + X(0x6ee722ee), X(0x6ef06b4d), X(0x6ef9b0b0), X(0x6f02f315), + X(0x6f0c327c), X(0x6f156ee6), X(0x6f1ea852), X(0x6f27dec1), + X(0x6f311232), X(0x6f3a42a5), X(0x6f43701a), X(0x6f4c9a91), + X(0x6f55c20a), X(0x6f5ee686), X(0x6f680803), X(0x6f712682), + X(0x6f7a4203), X(0x6f835a86), X(0x6f8c700b), X(0x6f958291), + X(0x6f9e921a), X(0x6fa79ea4), X(0x6fb0a830), X(0x6fb9aebd), + X(0x6fc2b24c), X(0x6fcbb2dd), X(0x6fd4b06f), X(0x6fddab03), + X(0x6fe6a299), X(0x6fef9730), X(0x6ff888c9), X(0x70017763), + X(0x700a62ff), X(0x70134b9c), X(0x701c313b), X(0x702513dc), + X(0x702df37e), X(0x7036d021), X(0x703fa9c6), X(0x7048806d), + X(0x70515415), X(0x705a24bf), X(0x7062f26b), X(0x706bbd17), + X(0x707484c6), X(0x707d4976), X(0x70860b28), X(0x708ec9dc), + X(0x70978591), X(0x70a03e48), X(0x70a8f400), X(0x70b1a6bb), + X(0x70ba5677), X(0x70c30335), X(0x70cbacf5), X(0x70d453b6), + X(0x70dcf77a), X(0x70e59840), X(0x70ee3607), X(0x70f6d0d1), + X(0x70ff689d), X(0x7107fd6b), X(0x71108f3b), X(0x71191e0d), + X(0x7121a9e2), X(0x712a32b9), X(0x7132b892), X(0x713b3b6e), + X(0x7143bb4c), X(0x714c382d), X(0x7154b211), X(0x715d28f7), + X(0x71659ce0), X(0x716e0dcc), X(0x71767bbb), X(0x717ee6ac), + X(0x71874ea1), X(0x718fb399), X(0x71981594), X(0x71a07493), + X(0x71a8d094), X(0x71b1299a), X(0x71b97fa2), X(0x71c1d2af), + X(0x71ca22bf), X(0x71d26fd2), X(0x71dab9ea), X(0x71e30106), + X(0x71eb4526), X(0x71f3864a), X(0x71fbc472), X(0x7203ff9e), + X(0x720c37cf), X(0x72146d05), X(0x721c9f3f), X(0x7224ce7e), + X(0x722cfac2), X(0x7235240b), X(0x723d4a59), X(0x72456dad), + X(0x724d8e05), X(0x7255ab63), X(0x725dc5c7), X(0x7265dd31), + X(0x726df1a0), X(0x72760315), X(0x727e1191), X(0x72861d12), + X(0x728e259a), X(0x72962b28), X(0x729e2dbd), X(0x72a62d59), + X(0x72ae29fc), X(0x72b623a5), X(0x72be1a56), X(0x72c60e0e), + X(0x72cdfece), X(0x72d5ec95), X(0x72ddd764), X(0x72e5bf3b), + X(0x72eda41a), X(0x72f58601), X(0x72fd64f1), X(0x730540e9), + X(0x730d19e9), X(0x7314eff3), X(0x731cc305), X(0x73249321), + X(0x732c6046), X(0x73342a75), X(0x733bf1ad), X(0x7343b5ef), + X(0x734b773b), X(0x73533591), X(0x735af0f2), X(0x7362a95d), + X(0x736a5ed3), X(0x73721153), X(0x7379c0df), X(0x73816d76), + X(0x73891719), X(0x7390bdc7), X(0x73986181), X(0x73a00247), + X(0x73a7a01a), X(0x73af3af8), X(0x73b6d2e4), X(0x73be67dc), + X(0x73c5f9e1), X(0x73cd88f3), X(0x73d51513), X(0x73dc9e40), + X(0x73e4247c), X(0x73eba7c5), X(0x73f3281c), X(0x73faa582), + X(0x74021ff7), X(0x7409977b), X(0x74110c0d), X(0x74187daf), + X(0x741fec61), X(0x74275822), X(0x742ec0f3), X(0x743626d5), + X(0x743d89c7), X(0x7444e9c9), X(0x744c46dd), X(0x7453a101), + X(0x745af837), X(0x74624c7f), X(0x74699dd8), X(0x7470ec44), + X(0x747837c2), X(0x747f8052), X(0x7486c5f5), X(0x748e08ac), + X(0x74954875), X(0x749c8552), X(0x74a3bf43), X(0x74aaf648), + X(0x74b22a62), X(0x74b95b90), X(0x74c089d2), X(0x74c7b52a), + X(0x74cedd97), X(0x74d6031a), X(0x74dd25b2), X(0x74e44561), + X(0x74eb6226), X(0x74f27c02), X(0x74f992f5), X(0x7500a6ff), + X(0x7507b820), X(0x750ec659), X(0x7515d1aa), X(0x751cda14), + X(0x7523df96), X(0x752ae231), X(0x7531e1e5), X(0x7538deb2), + X(0x753fd89a), X(0x7546cf9b), X(0x754dc3b7), X(0x7554b4ed), + X(0x755ba33e), X(0x75628eaa), X(0x75697732), X(0x75705cd5), + X(0x75773f95), X(0x757e1f71), X(0x7584fc6a), X(0x758bd67f), + X(0x7592adb2), X(0x75998203), X(0x75a05371), X(0x75a721fe), + X(0x75adeda9), X(0x75b4b673), X(0x75bb7c5c), X(0x75c23f65), + X(0x75c8ff8d), X(0x75cfbcd6), X(0x75d6773f), X(0x75dd2ec8), + X(0x75e3e373), X(0x75ea953f), X(0x75f1442d), X(0x75f7f03d), + X(0x75fe996f), X(0x76053fc5), X(0x760be33d), X(0x761283d8), + X(0x76192197), X(0x761fbc7b), X(0x76265482), X(0x762ce9af), + X(0x76337c01), X(0x763a0b78), X(0x76409814), X(0x764721d7), + X(0x764da8c1), X(0x76542cd1), X(0x765aae08), X(0x76612c67), + X(0x7667a7ee), X(0x766e209d), X(0x76749675), X(0x767b0975), + X(0x7681799f), X(0x7687e6f3), X(0x768e5170), X(0x7694b918), + X(0x769b1deb), X(0x76a17fe9), X(0x76a7df13), X(0x76ae3b68), + X(0x76b494ea), X(0x76baeb98), X(0x76c13f74), X(0x76c7907c), + X(0x76cddeb3), X(0x76d42a18), X(0x76da72ab), X(0x76e0b86d), + X(0x76e6fb5e), X(0x76ed3b7f), X(0x76f378d0), X(0x76f9b352), + X(0x76ffeb05), X(0x77061fe8), X(0x770c51fe), X(0x77128145), + X(0x7718adbf), X(0x771ed76c), X(0x7724fe4c), X(0x772b225f), + X(0x773143a7), X(0x77376223), X(0x773d7dd3), X(0x774396ba), + X(0x7749acd5), X(0x774fc027), X(0x7755d0af), X(0x775bde6f), + X(0x7761e965), X(0x7767f193), X(0x776df6fa), X(0x7773f998), + X(0x7779f970), X(0x777ff681), X(0x7785f0cd), X(0x778be852), + X(0x7791dd12), X(0x7797cf0d), X(0x779dbe43), X(0x77a3aab6), + X(0x77a99465), X(0x77af7b50), X(0x77b55f79), X(0x77bb40e0), + X(0x77c11f85), X(0x77c6fb68), X(0x77ccd48a), X(0x77d2aaec), + X(0x77d87e8d), X(0x77de4f6f), X(0x77e41d92), X(0x77e9e8f5), + X(0x77efb19b), X(0x77f57782), X(0x77fb3aad), X(0x7800fb1a), + X(0x7806b8ca), X(0x780c73bf), X(0x78122bf7), X(0x7817e175), + X(0x781d9438), X(0x78234440), X(0x7828f18f), X(0x782e9c25), + X(0x78344401), X(0x7839e925), X(0x783f8b92), X(0x78452b46), + X(0x784ac844), X(0x7850628b), X(0x7855fa1c), X(0x785b8ef8), + X(0x7861211e), X(0x7866b090), X(0x786c3d4d), X(0x7871c757), + X(0x78774ead), X(0x787cd351), X(0x78825543), X(0x7887d483), + X(0x788d5111), X(0x7892caef), X(0x7898421c), X(0x789db69a), + X(0x78a32868), X(0x78a89787), X(0x78ae03f8), X(0x78b36dbb), + X(0x78b8d4d1), X(0x78be393a), X(0x78c39af6), X(0x78c8fa06), + X(0x78ce566c), X(0x78d3b026), X(0x78d90736), X(0x78de5b9c), + X(0x78e3ad58), X(0x78e8fc6c), X(0x78ee48d7), X(0x78f3929b), + X(0x78f8d9b7), X(0x78fe1e2c), X(0x79035ffb), X(0x79089f24), + X(0x790ddba8), X(0x79131587), X(0x79184cc2), X(0x791d8159), + X(0x7922b34d), X(0x7927e29e), X(0x792d0f4d), X(0x7932395a), + X(0x793760c6), X(0x793c8591), X(0x7941a7bd), X(0x7946c749), + X(0x794be435), X(0x7950fe84), X(0x79561634), X(0x795b2b47), + X(0x79603dbc), X(0x79654d96), X(0x796a5ad4), X(0x796f6576), + X(0x79746d7e), X(0x797972eb), X(0x797e75bf), X(0x798375f9), + X(0x7988739b), X(0x798d6ea5), X(0x79926717), X(0x79975cf2), + X(0x799c5037), X(0x79a140e6), X(0x79a62f00), X(0x79ab1a85), + X(0x79b00376), X(0x79b4e9d3), X(0x79b9cd9d), X(0x79beaed4), + X(0x79c38d79), X(0x79c8698d), X(0x79cd4310), X(0x79d21a03), + X(0x79d6ee66), X(0x79dbc03a), X(0x79e08f7f), X(0x79e55c36), + X(0x79ea265f), X(0x79eeedfc), X(0x79f3b30c), X(0x79f87590), + X(0x79fd3589), X(0x7a01f2f7), X(0x7a06addc), X(0x7a0b6636), + X(0x7a101c08), X(0x7a14cf52), X(0x7a198013), X(0x7a1e2e4d), + X(0x7a22da01), X(0x7a27832f), X(0x7a2c29d7), X(0x7a30cdfa), + X(0x7a356f99), X(0x7a3a0eb4), X(0x7a3eab4c), X(0x7a434561), + X(0x7a47dcf5), X(0x7a4c7207), X(0x7a510498), X(0x7a5594a9), + X(0x7a5a223a), X(0x7a5ead4d), X(0x7a6335e0), X(0x7a67bbf6), + X(0x7a6c3f8f), X(0x7a70c0ab), X(0x7a753f4b), X(0x7a79bb6f), + X(0x7a7e3519), X(0x7a82ac48), X(0x7a8720fe), X(0x7a8b933b), + X(0x7a9002ff), X(0x7a94704b), X(0x7a98db20), X(0x7a9d437e), + X(0x7aa1a967), X(0x7aa60cd9), X(0x7aaa6dd7), X(0x7aaecc61), + X(0x7ab32877), X(0x7ab7821b), X(0x7abbd94b), X(0x7ac02e0a), + X(0x7ac48058), X(0x7ac8d035), X(0x7acd1da3), X(0x7ad168a1), + X(0x7ad5b130), X(0x7ad9f751), X(0x7ade3b05), X(0x7ae27c4c), + X(0x7ae6bb27), X(0x7aeaf796), X(0x7aef319a), X(0x7af36934), + X(0x7af79e64), X(0x7afbd12c), X(0x7b00018a), X(0x7b042f81), + X(0x7b085b10), X(0x7b0c8439), X(0x7b10aafc), X(0x7b14cf5a), + X(0x7b18f153), X(0x7b1d10e8), X(0x7b212e1a), X(0x7b2548e9), + X(0x7b296155), X(0x7b2d7761), X(0x7b318b0b), X(0x7b359c55), + X(0x7b39ab3f), X(0x7b3db7cb), X(0x7b41c1f8), X(0x7b45c9c8), + X(0x7b49cf3b), X(0x7b4dd251), X(0x7b51d30b), X(0x7b55d16b), + X(0x7b59cd70), X(0x7b5dc71b), X(0x7b61be6d), X(0x7b65b366), + X(0x7b69a608), X(0x7b6d9653), X(0x7b718447), X(0x7b756fe5), + X(0x7b79592e), X(0x7b7d4022), X(0x7b8124c3), X(0x7b850710), + X(0x7b88e70a), X(0x7b8cc4b3), X(0x7b90a00a), X(0x7b947911), + X(0x7b984fc8), X(0x7b9c242f), X(0x7b9ff648), X(0x7ba3c612), + X(0x7ba79390), X(0x7bab5ec1), X(0x7baf27a5), X(0x7bb2ee3f), + X(0x7bb6b28e), X(0x7bba7493), X(0x7bbe344e), X(0x7bc1f1c1), + X(0x7bc5acec), X(0x7bc965cf), X(0x7bcd1c6c), X(0x7bd0d0c3), + X(0x7bd482d4), X(0x7bd832a1), X(0x7bdbe02a), X(0x7bdf8b70), + X(0x7be33473), X(0x7be6db34), X(0x7bea7fb4), X(0x7bee21f4), + X(0x7bf1c1f3), X(0x7bf55fb3), X(0x7bf8fb35), X(0x7bfc9479), + X(0x7c002b7f), X(0x7c03c04a), X(0x7c0752d8), X(0x7c0ae32b), + X(0x7c0e7144), X(0x7c11fd23), X(0x7c1586c9), X(0x7c190e36), + X(0x7c1c936c), X(0x7c20166b), X(0x7c239733), X(0x7c2715c6), + X(0x7c2a9224), X(0x7c2e0c4e), X(0x7c318444), X(0x7c34fa07), + X(0x7c386d98), X(0x7c3bdef8), X(0x7c3f4e26), X(0x7c42bb25), + X(0x7c4625f4), X(0x7c498e95), X(0x7c4cf507), X(0x7c50594c), + X(0x7c53bb65), X(0x7c571b51), X(0x7c5a7913), X(0x7c5dd4aa), + X(0x7c612e17), X(0x7c64855b), X(0x7c67da76), X(0x7c6b2d6a), + X(0x7c6e7e37), X(0x7c71ccdd), X(0x7c75195e), X(0x7c7863ba), + X(0x7c7babf1), X(0x7c7ef206), X(0x7c8235f7), X(0x7c8577c6), + X(0x7c88b774), X(0x7c8bf502), X(0x7c8f306f), X(0x7c9269bd), + X(0x7c95a0ec), X(0x7c98d5fe), X(0x7c9c08f2), X(0x7c9f39cb), + X(0x7ca26887), X(0x7ca59528), X(0x7ca8bfb0), X(0x7cabe81d), + X(0x7caf0e72), X(0x7cb232af), X(0x7cb554d4), X(0x7cb874e2), + X(0x7cbb92db), X(0x7cbeaebe), X(0x7cc1c88d), X(0x7cc4e047), + X(0x7cc7f5ef), X(0x7ccb0984), X(0x7cce1b08), X(0x7cd12a7b), + X(0x7cd437dd), X(0x7cd74330), X(0x7cda4c74), X(0x7cdd53aa), + X(0x7ce058d3), X(0x7ce35bef), X(0x7ce65cff), X(0x7ce95c04), + X(0x7cec58ff), X(0x7cef53f0), X(0x7cf24cd7), X(0x7cf543b7), + X(0x7cf8388f), X(0x7cfb2b60), X(0x7cfe1c2b), X(0x7d010af1), + X(0x7d03f7b2), X(0x7d06e26f), X(0x7d09cb29), X(0x7d0cb1e0), + X(0x7d0f9696), X(0x7d12794b), X(0x7d1559ff), X(0x7d1838b4), + X(0x7d1b156a), X(0x7d1df022), X(0x7d20c8dd), X(0x7d239f9b), + X(0x7d26745e), X(0x7d294725), X(0x7d2c17f1), X(0x7d2ee6c4), + X(0x7d31b39f), X(0x7d347e81), X(0x7d37476b), X(0x7d3a0e5f), + X(0x7d3cd35d), X(0x7d3f9665), X(0x7d425779), X(0x7d451699), + X(0x7d47d3c6), X(0x7d4a8f01), X(0x7d4d484b), X(0x7d4fffa3), + X(0x7d52b50c), X(0x7d556885), X(0x7d581a0f), X(0x7d5ac9ac), + X(0x7d5d775c), X(0x7d60231f), X(0x7d62ccf6), X(0x7d6574e3), + X(0x7d681ae6), X(0x7d6abeff), X(0x7d6d612f), X(0x7d700178), + X(0x7d729fd9), X(0x7d753c54), X(0x7d77d6e9), X(0x7d7a6f9a), + X(0x7d7d0666), X(0x7d7f9b4f), X(0x7d822e55), X(0x7d84bf79), + X(0x7d874ebc), X(0x7d89dc1e), X(0x7d8c67a1), X(0x7d8ef144), + X(0x7d91790a), X(0x7d93fef2), X(0x7d9682fd), X(0x7d99052d), + X(0x7d9b8581), X(0x7d9e03fb), X(0x7da0809b), X(0x7da2fb62), + X(0x7da57451), X(0x7da7eb68), X(0x7daa60a8), X(0x7dacd413), + X(0x7daf45a9), X(0x7db1b56a), X(0x7db42357), X(0x7db68f71), + X(0x7db8f9b9), X(0x7dbb6230), X(0x7dbdc8d6), X(0x7dc02dac), + X(0x7dc290b3), X(0x7dc4f1eb), X(0x7dc75156), X(0x7dc9aef4), + X(0x7dcc0ac5), X(0x7dce64cc), X(0x7dd0bd07), X(0x7dd31379), + X(0x7dd56821), X(0x7dd7bb01), X(0x7dda0c1a), X(0x7ddc5b6b), + X(0x7ddea8f7), X(0x7de0f4bd), X(0x7de33ebe), X(0x7de586fc), + X(0x7de7cd76), X(0x7dea122e), X(0x7dec5525), X(0x7dee965a), + X(0x7df0d5d0), X(0x7df31386), X(0x7df54f7e), X(0x7df789b8), + X(0x7df9c235), X(0x7dfbf8f5), X(0x7dfe2dfa), X(0x7e006145), + X(0x7e0292d5), X(0x7e04c2ac), X(0x7e06f0cb), X(0x7e091d32), + X(0x7e0b47e1), X(0x7e0d70db), X(0x7e0f981f), X(0x7e11bdaf), + X(0x7e13e18a), X(0x7e1603b3), X(0x7e182429), X(0x7e1a42ed), + X(0x7e1c6001), X(0x7e1e7b64), X(0x7e209518), X(0x7e22ad1d), + X(0x7e24c375), X(0x7e26d81f), X(0x7e28eb1d), X(0x7e2afc70), + X(0x7e2d0c17), X(0x7e2f1a15), X(0x7e31266a), X(0x7e333115), + X(0x7e353a1a), X(0x7e374177), X(0x7e39472e), X(0x7e3b4b3f), + X(0x7e3d4dac), X(0x7e3f4e75), X(0x7e414d9a), X(0x7e434b1e), + X(0x7e4546ff), X(0x7e474140), X(0x7e4939e0), X(0x7e4b30e2), + X(0x7e4d2644), X(0x7e4f1a09), X(0x7e510c30), X(0x7e52fcbc), + X(0x7e54ebab), X(0x7e56d900), X(0x7e58c4bb), X(0x7e5aaedd), + X(0x7e5c9766), X(0x7e5e7e57), X(0x7e6063b2), X(0x7e624776), + X(0x7e6429a5), X(0x7e660a3f), X(0x7e67e945), X(0x7e69c6b8), + X(0x7e6ba299), X(0x7e6d7ce7), X(0x7e6f55a5), X(0x7e712cd3), + X(0x7e730272), X(0x7e74d682), X(0x7e76a904), X(0x7e7879f9), + X(0x7e7a4962), X(0x7e7c173f), X(0x7e7de392), X(0x7e7fae5a), + X(0x7e817799), X(0x7e833f50), X(0x7e85057f), X(0x7e86ca27), + X(0x7e888d49), X(0x7e8a4ee5), X(0x7e8c0efd), X(0x7e8dcd91), + X(0x7e8f8aa1), X(0x7e914630), X(0x7e93003c), X(0x7e94b8c8), + X(0x7e966fd4), X(0x7e982560), X(0x7e99d96e), X(0x7e9b8bfe), + X(0x7e9d3d10), X(0x7e9eeca7), X(0x7ea09ac2), X(0x7ea24762), + X(0x7ea3f288), X(0x7ea59c35), X(0x7ea7446a), X(0x7ea8eb27), + X(0x7eaa906c), X(0x7eac343c), X(0x7eadd696), X(0x7eaf777b), + X(0x7eb116ed), X(0x7eb2b4eb), X(0x7eb45177), X(0x7eb5ec91), + X(0x7eb7863b), X(0x7eb91e74), X(0x7ebab53e), X(0x7ebc4a99), + X(0x7ebdde87), X(0x7ebf7107), X(0x7ec1021b), X(0x7ec291c3), + X(0x7ec42001), X(0x7ec5acd5), X(0x7ec7383f), X(0x7ec8c241), + X(0x7eca4adb), X(0x7ecbd20d), X(0x7ecd57da), X(0x7ecedc41), + X(0x7ed05f44), X(0x7ed1e0e2), X(0x7ed3611d), X(0x7ed4dff6), + X(0x7ed65d6d), X(0x7ed7d983), X(0x7ed95438), X(0x7edacd8f), + X(0x7edc4586), X(0x7eddbc20), X(0x7edf315c), X(0x7ee0a53c), + X(0x7ee217c1), X(0x7ee388ea), X(0x7ee4f8b9), X(0x7ee6672f), + X(0x7ee7d44c), X(0x7ee94012), X(0x7eeaaa80), X(0x7eec1397), + X(0x7eed7b59), X(0x7eeee1c6), X(0x7ef046df), X(0x7ef1aaa5), + X(0x7ef30d18), X(0x7ef46e39), X(0x7ef5ce09), X(0x7ef72c88), + X(0x7ef889b8), X(0x7ef9e599), X(0x7efb402c), X(0x7efc9972), + X(0x7efdf16b), X(0x7eff4818), X(0x7f009d79), X(0x7f01f191), + X(0x7f03445f), X(0x7f0495e4), X(0x7f05e620), X(0x7f073516), + X(0x7f0882c5), X(0x7f09cf2d), X(0x7f0b1a51), X(0x7f0c6430), + X(0x7f0daccc), X(0x7f0ef425), X(0x7f103a3b), X(0x7f117f11), + X(0x7f12c2a5), X(0x7f1404fa), X(0x7f15460f), X(0x7f1685e6), + X(0x7f17c47f), X(0x7f1901db), X(0x7f1a3dfb), X(0x7f1b78e0), + X(0x7f1cb28a), X(0x7f1deafa), X(0x7f1f2231), X(0x7f20582f), + X(0x7f218cf5), X(0x7f22c085), X(0x7f23f2de), X(0x7f252401), + X(0x7f2653f0), X(0x7f2782ab), X(0x7f28b032), X(0x7f29dc87), + X(0x7f2b07aa), X(0x7f2c319c), X(0x7f2d5a5e), X(0x7f2e81f0), + X(0x7f2fa853), X(0x7f30cd88), X(0x7f31f18f), X(0x7f33146a), + X(0x7f343619), X(0x7f35569c), X(0x7f3675f6), X(0x7f379425), + X(0x7f38b12c), X(0x7f39cd0a), X(0x7f3ae7c0), X(0x7f3c0150), + X(0x7f3d19ba), X(0x7f3e30fe), X(0x7f3f471e), X(0x7f405c1a), + X(0x7f416ff3), X(0x7f4282a9), X(0x7f43943e), X(0x7f44a4b2), + X(0x7f45b405), X(0x7f46c239), X(0x7f47cf4e), X(0x7f48db45), + X(0x7f49e61f), X(0x7f4aefdc), X(0x7f4bf87e), X(0x7f4d0004), + X(0x7f4e0670), X(0x7f4f0bc2), X(0x7f500ffb), X(0x7f51131c), + X(0x7f521525), X(0x7f531618), X(0x7f5415f4), X(0x7f5514bb), + X(0x7f56126e), X(0x7f570f0c), X(0x7f580a98), X(0x7f590511), + X(0x7f59fe78), X(0x7f5af6ce), X(0x7f5bee14), X(0x7f5ce44a), + X(0x7f5dd972), X(0x7f5ecd8b), X(0x7f5fc097), X(0x7f60b296), + X(0x7f61a389), X(0x7f629370), X(0x7f63824e), X(0x7f647021), + X(0x7f655ceb), X(0x7f6648ad), X(0x7f673367), X(0x7f681d19), + X(0x7f6905c6), X(0x7f69ed6d), X(0x7f6ad40f), X(0x7f6bb9ad), + X(0x7f6c9e48), X(0x7f6d81e0), X(0x7f6e6475), X(0x7f6f460a), + X(0x7f70269d), X(0x7f710631), X(0x7f71e4c6), X(0x7f72c25c), + X(0x7f739ef4), X(0x7f747a8f), X(0x7f75552e), X(0x7f762ed1), + X(0x7f770779), X(0x7f77df27), X(0x7f78b5db), X(0x7f798b97), + X(0x7f7a605a), X(0x7f7b3425), X(0x7f7c06fa), X(0x7f7cd8d9), + X(0x7f7da9c2), X(0x7f7e79b7), X(0x7f7f48b8), X(0x7f8016c5), + X(0x7f80e3e0), X(0x7f81b009), X(0x7f827b40), X(0x7f834588), + X(0x7f840edf), X(0x7f84d747), X(0x7f859ec1), X(0x7f86654d), + X(0x7f872aec), X(0x7f87ef9e), X(0x7f88b365), X(0x7f897641), + X(0x7f8a3832), X(0x7f8af93a), X(0x7f8bb959), X(0x7f8c7890), + X(0x7f8d36df), X(0x7f8df448), X(0x7f8eb0ca), X(0x7f8f6c67), + X(0x7f90271e), X(0x7f90e0f2), X(0x7f9199e2), X(0x7f9251f0), + X(0x7f93091b), X(0x7f93bf65), X(0x7f9474ce), X(0x7f952958), + X(0x7f95dd01), X(0x7f968fcd), X(0x7f9741ba), X(0x7f97f2ca), + X(0x7f98a2fd), X(0x7f995254), X(0x7f9a00d0), X(0x7f9aae71), + X(0x7f9b5b38), X(0x7f9c0726), X(0x7f9cb23b), X(0x7f9d5c78), + X(0x7f9e05de), X(0x7f9eae6e), X(0x7f9f5627), X(0x7f9ffd0b), + X(0x7fa0a31b), X(0x7fa14856), X(0x7fa1ecbf), X(0x7fa29054), + X(0x7fa33318), X(0x7fa3d50b), X(0x7fa4762c), X(0x7fa5167e), + X(0x7fa5b601), X(0x7fa654b5), X(0x7fa6f29b), X(0x7fa78fb3), + X(0x7fa82bff), X(0x7fa8c77f), X(0x7fa96234), X(0x7fa9fc1e), + X(0x7faa953e), X(0x7fab2d94), X(0x7fabc522), X(0x7fac5be8), + X(0x7facf1e6), X(0x7fad871d), X(0x7fae1b8f), X(0x7faeaf3b), + X(0x7faf4222), X(0x7fafd445), X(0x7fb065a4), X(0x7fb0f641), + X(0x7fb1861b), X(0x7fb21534), X(0x7fb2a38c), X(0x7fb33124), + X(0x7fb3bdfb), X(0x7fb44a14), X(0x7fb4d56f), X(0x7fb5600c), + X(0x7fb5e9ec), X(0x7fb6730f), X(0x7fb6fb76), X(0x7fb78323), + X(0x7fb80a15), X(0x7fb8904d), X(0x7fb915cc), X(0x7fb99a92), + X(0x7fba1ea0), X(0x7fbaa1f7), X(0x7fbb2497), X(0x7fbba681), + X(0x7fbc27b5), X(0x7fbca835), X(0x7fbd2801), X(0x7fbda719), + X(0x7fbe257e), X(0x7fbea331), X(0x7fbf2032), X(0x7fbf9c82), + X(0x7fc01821), X(0x7fc09311), X(0x7fc10d52), X(0x7fc186e4), + X(0x7fc1ffc8), X(0x7fc277ff), X(0x7fc2ef89), X(0x7fc36667), + X(0x7fc3dc9a), X(0x7fc45221), X(0x7fc4c6ff), X(0x7fc53b33), + X(0x7fc5aebe), X(0x7fc621a0), X(0x7fc693db), X(0x7fc7056f), + X(0x7fc7765c), X(0x7fc7e6a3), X(0x7fc85645), X(0x7fc8c542), + X(0x7fc9339b), X(0x7fc9a150), X(0x7fca0e63), X(0x7fca7ad3), + X(0x7fcae6a2), X(0x7fcb51cf), X(0x7fcbbc5c), X(0x7fcc2649), + X(0x7fcc8f97), X(0x7fccf846), X(0x7fcd6058), X(0x7fcdc7cb), + X(0x7fce2ea2), X(0x7fce94dd), X(0x7fcefa7b), X(0x7fcf5f7f), + X(0x7fcfc3e8), X(0x7fd027b7), X(0x7fd08aed), X(0x7fd0ed8b), + X(0x7fd14f90), X(0x7fd1b0fd), X(0x7fd211d4), X(0x7fd27214), + X(0x7fd2d1bf), X(0x7fd330d4), X(0x7fd38f55), X(0x7fd3ed41), + X(0x7fd44a9a), X(0x7fd4a761), X(0x7fd50395), X(0x7fd55f37), + X(0x7fd5ba48), X(0x7fd614c9), X(0x7fd66eba), X(0x7fd6c81b), + X(0x7fd720ed), X(0x7fd77932), X(0x7fd7d0e8), X(0x7fd82812), + X(0x7fd87eae), X(0x7fd8d4bf), X(0x7fd92a45), X(0x7fd97f40), + X(0x7fd9d3b0), X(0x7fda2797), X(0x7fda7af5), X(0x7fdacdca), + X(0x7fdb2018), X(0x7fdb71dd), X(0x7fdbc31c), X(0x7fdc13d5), + X(0x7fdc6408), X(0x7fdcb3b6), X(0x7fdd02df), X(0x7fdd5184), + X(0x7fdd9fa5), X(0x7fdded44), X(0x7fde3a60), X(0x7fde86fb), + X(0x7fded314), X(0x7fdf1eac), X(0x7fdf69c4), X(0x7fdfb45d), + X(0x7fdffe76), X(0x7fe04811), X(0x7fe0912e), X(0x7fe0d9ce), + X(0x7fe121f0), X(0x7fe16996), X(0x7fe1b0c1), X(0x7fe1f770), + X(0x7fe23da4), X(0x7fe2835f), X(0x7fe2c89f), X(0x7fe30d67), + X(0x7fe351b5), X(0x7fe3958c), X(0x7fe3d8ec), X(0x7fe41bd4), + X(0x7fe45e46), X(0x7fe4a042), X(0x7fe4e1c8), X(0x7fe522da), + X(0x7fe56378), X(0x7fe5a3a1), X(0x7fe5e358), X(0x7fe6229b), + X(0x7fe6616d), X(0x7fe69fcc), X(0x7fe6ddbb), X(0x7fe71b39), + X(0x7fe75847), X(0x7fe794e5), X(0x7fe7d114), X(0x7fe80cd5), + X(0x7fe84827), X(0x7fe8830c), X(0x7fe8bd84), X(0x7fe8f78f), + X(0x7fe9312f), X(0x7fe96a62), X(0x7fe9a32b), X(0x7fe9db8a), + X(0x7fea137e), X(0x7fea4b09), X(0x7fea822b), X(0x7feab8e5), + X(0x7feaef37), X(0x7feb2521), X(0x7feb5aa4), X(0x7feb8fc1), + X(0x7febc478), X(0x7febf8ca), X(0x7fec2cb6), X(0x7fec603e), + X(0x7fec9363), X(0x7fecc623), X(0x7fecf881), X(0x7fed2a7c), + X(0x7fed5c16), X(0x7fed8d4e), X(0x7fedbe24), X(0x7fedee9b), + X(0x7fee1eb1), X(0x7fee4e68), X(0x7fee7dc0), X(0x7feeacb9), + X(0x7feedb54), X(0x7fef0991), X(0x7fef3771), X(0x7fef64f5), + X(0x7fef921d), X(0x7fefbee8), X(0x7fefeb59), X(0x7ff0176f), + X(0x7ff0432a), X(0x7ff06e8c), X(0x7ff09995), X(0x7ff0c444), + X(0x7ff0ee9c), X(0x7ff1189b), X(0x7ff14243), X(0x7ff16b94), + X(0x7ff1948e), X(0x7ff1bd32), X(0x7ff1e581), X(0x7ff20d7b), + X(0x7ff2351f), X(0x7ff25c70), X(0x7ff2836d), X(0x7ff2aa17), + X(0x7ff2d06d), X(0x7ff2f672), X(0x7ff31c24), X(0x7ff34185), + X(0x7ff36695), X(0x7ff38b55), X(0x7ff3afc4), X(0x7ff3d3e4), + X(0x7ff3f7b4), X(0x7ff41b35), X(0x7ff43e69), X(0x7ff4614e), + X(0x7ff483e6), X(0x7ff4a631), X(0x7ff4c82f), X(0x7ff4e9e1), + X(0x7ff50b47), X(0x7ff52c62), X(0x7ff54d33), X(0x7ff56db9), + X(0x7ff58df5), X(0x7ff5ade7), X(0x7ff5cd90), X(0x7ff5ecf1), + X(0x7ff60c09), X(0x7ff62ada), X(0x7ff64963), X(0x7ff667a5), + X(0x7ff685a1), X(0x7ff6a357), X(0x7ff6c0c7), X(0x7ff6ddf1), + X(0x7ff6fad7), X(0x7ff71778), X(0x7ff733d6), X(0x7ff74fef), + X(0x7ff76bc6), X(0x7ff78759), X(0x7ff7a2ab), X(0x7ff7bdba), + X(0x7ff7d888), X(0x7ff7f315), X(0x7ff80d61), X(0x7ff8276c), + X(0x7ff84138), X(0x7ff85ac4), X(0x7ff87412), X(0x7ff88d20), + X(0x7ff8a5f0), X(0x7ff8be82), X(0x7ff8d6d7), X(0x7ff8eeef), + X(0x7ff906c9), X(0x7ff91e68), X(0x7ff935cb), X(0x7ff94cf2), + X(0x7ff963dd), X(0x7ff97a8f), X(0x7ff99105), X(0x7ff9a742), + X(0x7ff9bd45), X(0x7ff9d30f), X(0x7ff9e8a0), X(0x7ff9fdf9), + X(0x7ffa131a), X(0x7ffa2803), X(0x7ffa3cb4), X(0x7ffa512f), + X(0x7ffa6573), X(0x7ffa7981), X(0x7ffa8d59), X(0x7ffaa0fc), + X(0x7ffab46a), X(0x7ffac7a3), X(0x7ffadaa8), X(0x7ffaed78), + X(0x7ffb0015), X(0x7ffb127f), X(0x7ffb24b6), X(0x7ffb36bb), + X(0x7ffb488d), X(0x7ffb5a2e), X(0x7ffb6b9d), X(0x7ffb7cdb), + X(0x7ffb8de9), X(0x7ffb9ec6), X(0x7ffbaf73), X(0x7ffbbff1), + X(0x7ffbd03f), X(0x7ffbe05e), X(0x7ffbf04f), X(0x7ffc0012), + X(0x7ffc0fa6), X(0x7ffc1f0d), X(0x7ffc2e47), X(0x7ffc3d54), + X(0x7ffc4c35), X(0x7ffc5ae9), X(0x7ffc6971), X(0x7ffc77ce), + X(0x7ffc8600), X(0x7ffc9407), X(0x7ffca1e4), X(0x7ffcaf96), + X(0x7ffcbd1f), X(0x7ffcca7e), X(0x7ffcd7b4), X(0x7ffce4c1), + X(0x7ffcf1a5), X(0x7ffcfe62), X(0x7ffd0af6), X(0x7ffd1763), + X(0x7ffd23a9), X(0x7ffd2fc8), X(0x7ffd3bc1), X(0x7ffd4793), + X(0x7ffd533f), X(0x7ffd5ec5), X(0x7ffd6a27), X(0x7ffd7563), + X(0x7ffd807a), X(0x7ffd8b6e), X(0x7ffd963d), X(0x7ffda0e8), + X(0x7ffdab70), X(0x7ffdb5d5), X(0x7ffdc017), X(0x7ffdca36), + X(0x7ffdd434), X(0x7ffdde0f), X(0x7ffde7c9), X(0x7ffdf161), + X(0x7ffdfad8), X(0x7ffe042f), X(0x7ffe0d65), X(0x7ffe167b), + X(0x7ffe1f71), X(0x7ffe2848), X(0x7ffe30ff), X(0x7ffe3997), + X(0x7ffe4211), X(0x7ffe4a6c), X(0x7ffe52a9), X(0x7ffe5ac8), + X(0x7ffe62c9), X(0x7ffe6aae), X(0x7ffe7275), X(0x7ffe7a1f), + X(0x7ffe81ad), X(0x7ffe891f), X(0x7ffe9075), X(0x7ffe97b0), + X(0x7ffe9ece), X(0x7ffea5d2), X(0x7ffeacbb), X(0x7ffeb38a), + X(0x7ffeba3e), X(0x7ffec0d8), X(0x7ffec758), X(0x7ffecdbf), + X(0x7ffed40d), X(0x7ffeda41), X(0x7ffee05d), X(0x7ffee660), + X(0x7ffeec4b), X(0x7ffef21f), X(0x7ffef7da), X(0x7ffefd7e), + X(0x7fff030b), X(0x7fff0881), X(0x7fff0de0), X(0x7fff1328), + X(0x7fff185b), X(0x7fff1d77), X(0x7fff227e), X(0x7fff276f), + X(0x7fff2c4b), X(0x7fff3112), X(0x7fff35c4), X(0x7fff3a62), + X(0x7fff3eeb), X(0x7fff4360), X(0x7fff47c2), X(0x7fff4c0f), + X(0x7fff504a), X(0x7fff5471), X(0x7fff5885), X(0x7fff5c87), + X(0x7fff6076), X(0x7fff6452), X(0x7fff681d), X(0x7fff6bd6), + X(0x7fff6f7d), X(0x7fff7313), X(0x7fff7698), X(0x7fff7a0c), + X(0x7fff7d6f), X(0x7fff80c2), X(0x7fff8404), X(0x7fff8736), + X(0x7fff8a58), X(0x7fff8d6b), X(0x7fff906e), X(0x7fff9362), + X(0x7fff9646), X(0x7fff991c), X(0x7fff9be3), X(0x7fff9e9c), + X(0x7fffa146), X(0x7fffa3e2), X(0x7fffa671), X(0x7fffa8f1), + X(0x7fffab65), X(0x7fffadca), X(0x7fffb023), X(0x7fffb26f), + X(0x7fffb4ae), X(0x7fffb6e0), X(0x7fffb906), X(0x7fffbb20), + X(0x7fffbd2e), X(0x7fffbf30), X(0x7fffc126), X(0x7fffc311), + X(0x7fffc4f1), X(0x7fffc6c5), X(0x7fffc88f), X(0x7fffca4d), + X(0x7fffcc01), X(0x7fffcdab), X(0x7fffcf4a), X(0x7fffd0e0), + X(0x7fffd26b), X(0x7fffd3ec), X(0x7fffd564), X(0x7fffd6d2), + X(0x7fffd838), X(0x7fffd993), X(0x7fffdae6), X(0x7fffdc31), + X(0x7fffdd72), X(0x7fffdeab), X(0x7fffdfdb), X(0x7fffe104), + X(0x7fffe224), X(0x7fffe33c), X(0x7fffe44d), X(0x7fffe556), + X(0x7fffe657), X(0x7fffe751), X(0x7fffe844), X(0x7fffe930), + X(0x7fffea15), X(0x7fffeaf3), X(0x7fffebca), X(0x7fffec9b), + X(0x7fffed66), X(0x7fffee2a), X(0x7fffeee8), X(0x7fffefa0), + X(0x7ffff053), X(0x7ffff0ff), X(0x7ffff1a6), X(0x7ffff247), + X(0x7ffff2e4), X(0x7ffff37a), X(0x7ffff40c), X(0x7ffff499), + X(0x7ffff520), X(0x7ffff5a3), X(0x7ffff621), X(0x7ffff69b), + X(0x7ffff710), X(0x7ffff781), X(0x7ffff7ee), X(0x7ffff857), + X(0x7ffff8bb), X(0x7ffff91c), X(0x7ffff979), X(0x7ffff9d2), + X(0x7ffffa27), X(0x7ffffa79), X(0x7ffffac8), X(0x7ffffb13), + X(0x7ffffb5b), X(0x7ffffba0), X(0x7ffffbe2), X(0x7ffffc21), + X(0x7ffffc5d), X(0x7ffffc96), X(0x7ffffccd), X(0x7ffffd01), + X(0x7ffffd32), X(0x7ffffd61), X(0x7ffffd8e), X(0x7ffffdb8), + X(0x7ffffde0), X(0x7ffffe07), X(0x7ffffe2b), X(0x7ffffe4d), + X(0x7ffffe6d), X(0x7ffffe8b), X(0x7ffffea8), X(0x7ffffec3), + X(0x7ffffedc), X(0x7ffffef4), X(0x7fffff0a), X(0x7fffff1f), + X(0x7fffff33), X(0x7fffff45), X(0x7fffff56), X(0x7fffff66), + X(0x7fffff75), X(0x7fffff82), X(0x7fffff8f), X(0x7fffff9a), + X(0x7fffffa5), X(0x7fffffaf), X(0x7fffffb8), X(0x7fffffc0), + X(0x7fffffc8), X(0x7fffffce), X(0x7fffffd5), X(0x7fffffda), + X(0x7fffffdf), X(0x7fffffe4), X(0x7fffffe8), X(0x7fffffeb), + X(0x7fffffef), X(0x7ffffff1), X(0x7ffffff4), X(0x7ffffff6), + X(0x7ffffff8), X(0x7ffffff9), X(0x7ffffffb), X(0x7ffffffc), + X(0x7ffffffd), X(0x7ffffffd), X(0x7ffffffe), X(0x7fffffff), + X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), + X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), + X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), +}; + +#endif diff --git a/android/src/net/strangesoft/kcat/OpenAL.java b/android/src/net/strangesoft/kcat/OpenAL.java new file mode 100644 index 00000000..b3b9920a --- /dev/null +++ b/android/src/net/strangesoft/kcat/OpenAL.java @@ -0,0 +1,50 @@ +package net.strangesoft.kcat; + +import java.io.InputStream; +import java.io.IOException; +import android.app.Activity; +import android.os.Bundle; +import android.util.Log; + +public class OpenAL extends Activity +{ + static + { + // make sure openal is loaded before shared library that uses it + System.loadLibrary("openal"); + System.loadLibrary("example"); + } + + static native void run(byte[] data); + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + byte[] data = null; + + try + { + InputStream is = getAssets().open("trash80_-_three-four-robot-slojam.ogg"); + + int length = is.available(); + + data = new byte[length]; + is.read(data); + is.close(); + } + catch (java.io.IOException e) + { + Log.i("OpenAL", "ogg file not found in assets"); + } + + if (data != null) + { + run(data); + } + + finish(); + } +} -- 2.11.4.GIT